السلام عليكم و رحمة الله
الان بعد انشاء قاعدة البيانات الخاصة بكل سنةو انشاء الجداول الخاصة بها بالكود التالي
كود :
procedure TForm1.button1Click(Sender: TObject);
var
i:Integer;
DataSource: String;
DbName:String;
CS:String;
begin
i:=YearOf(Date());
if not FileExists('d:\'+IntToStr(i)+'Données.mdb') then
begin
DbName:='d:\'+IntToStr(i)+'Données.mdb';
DataSource :='Provider=Microsoft.Jet.OLEDB.4.0' +';Data Source=' + dbName +';Jet OLEDB:Engine Type=5';
ADOXCatalog1.Create1(DataSource);
ADOConnection1.ConnectionString:=DataSource;
ADOConnection1.LoginPrompt:=False;
ADOCommand1.Connection:=ADOConnection1;
cs:='CREATE TABLE '+IntToStr(i)+'Articles ('+'N°Ordre COUNTER,'+'Article TEXT(15))';
DataModule1.ADOCommand1.CommandText := cs;
DataModule1.ADOCommand1.Execute;
ADOConnection1.Close;
Close;
end
else
begin
ADOConnection1.Close;
while FileExists('d:\'+IntToStr(i)+'Données.mdb') do
Inc(i);
Copy(IntToStr(i)+'Données',5,4);
DbName:= 'd:\'+IntToStr(i)+'Données.mdb';
DataSource :='Provider=Microsoft.Jet.OLEDB.4.0' +';Data Source=' + dbName +';Jet OLEDB:Engine Type=5';
ADOXCatalog1.Create1(DataSource);
DataSource:='Provider = Microsoft.Jet.OLEDB.4.0 '+'; Data Source = d:\'+IntToStr(i)+'Données.mdb' +'; Persist Security Info = False';
ADOConnection1.ConnectionString:=DataSource;
ADOConnection1.LoginPrompt:=False;
ADOCommand1.Connection:=ADOConnection1;
cs:='CREATE TABLE '+IntToStr(i)+'Articles ('+'N°Ordre COUNTER,'+'Article TEXT(15))';
DataModule1.ADOCommand1.CommandText := cs;
DataModule1.ADOCommand1.Execute;
ADOConnection1.Close;
Close;
END;
end.
قلت تبين بان الجداول الجديدة تنشؤ فارغة وهذا ما لا نحبذه
لذا قررنا تعبئتها كما يلي
كود :
cs:='Insert into '+IntToStr(i)+'Articles (N°Ordre,Article) select N°Ordre,Article from '+IntToStr(i-1)+'Données.'+IntToStr(i-1)+'Articles';
DataModule1.ADOCommand1.CommandText := cs;
DataModule1.ADOCommand1.Execute;
فوقع المشكل و هو ان مسار القاعدة IntToStr(i-1)+'Données اي قاعدة السنة الماضية التي نستمد منها المعطيات القديمة غير معروف
كيف لنا ان نجعل القاعدتين IntToStr(i-1)+'Données و IntToStr(i)+'Données معروفتين بالنسبة للمحرك
وهل من طريقة لانشاء جدول في قاعدة من قاعدة اخرى ببياناته
وشكرا
السلام عليكم و رحمة الله
كلما في الامر تشكيل قاعدة جديدة بالكود السلف الذكر ثم عمل copy كمايلي
كود :
procedure TForm1.button1Click(Sender: TObject);
var
i:Integer;
DataSource: String;
DbName:String;
CS:String;
begin
i:=YearOf(Date());
if not FileExists('d:\'+IntToStr(i)+'Données.mdb') then
begin
DbName:='d:\'+IntToStr(i)+'Données.mdb';
DataSource :='Provider=Microsoft.Jet.OLEDB.4.0' +';Data Source=' + dbName +';Jet OLEDB:Engine Type=5';
ADOXCatalog1.Create1(DataSource);
ADOConnection1.ConnectionString:=DataSource;
ADOConnection1.LoginPrompt:=False;
ADOCommand1.Connection:=ADOConnection1;
cs:='CREATE TABLE '+IntToStr(i)+'Articles ('+'N°Ordre COUNTER,'+'Article TEXT(15))';
DataModule1.ADOCommand1.CommandText := cs;
DataModule1.ADOCommand1.Execute;
ADOConnection1.Close;
Close;
end
else
begin
ADOConnection1.Close;
while FileExists('d:\'+IntToStr(i)+'Données.mdb') do
Inc(i);
Copy(IntToStr(i)+'Données',5,4);
DbName:= 'd:\'+IntToStr(i)+'Données.mdb';
DataSource :='Provider=Microsoft.Jet.OLEDB.4.0' +';Data Source=' + dbName +';Jet OLEDB:Engine Type=5';
ADOXCatalog1.Create1(DataSource);
DataSource:='Provider = Microsoft.Jet.OLEDB.4.0 '+'; Data Source = d:\'+IntToStr(i)+'Données.mdb' +'; Persist Security Info = False';
ADOConnection1.ConnectionString:=DataSource;
ADOConnection1.LoginPrompt:=False;
ADOCommand1.Connection:=ADOConnection1;
cs:='CREATE TABLE '+IntToStr(i)+'Articles ('+'N°Ordre COUNTER,'+'Article TEXT(15))';
DataModule1.ADOCommand1.CommandText := cs;
DataModule1.ADOCommand1.Execute;
ADOConnection1.Close;
Close;
END;
ثم
كود :
CopyFile(PChar('D:\'+IntToStr(i-1)+'Données.mdb'),PChar('D:\'+IntToStr(i)+'Données.mdb'),False);
وبهذا حلت المشكلة و شكرا

.
هذه فعليا خطا. يمكن ان تصنع حل عن طريق تصميم قاعدة البيانات
الغكره ان تقوم بعمل جدول اسمه السنوات. و تغلق كل سنه قديمه و تجعل السنة الجديده مفتوح التسجيل فيها
و في هذه الحاله ,,, توجه كل العمليات تضيف فقط في السنة المفتوحة التسجيل
و هكذا لا يلزمك ان نعمل ضبط مصنع او غيره
السلام عليكم
نعم أخي palunix لما لا ننشئ جدول امه السنواة أو سمه كما تشاء ونربط بقية الجداول التي لها علاقة بتغير السنوات بهذا الجدول وبهذ كلما تغيرت سنة أدخلناها في جدول السنوات ينتج لنا جداول جديدة وبهذا تبقى معنا قاعدة البيانات ببياناتها القديمة والجديدة إلى ما شاء الله ولك أن تضع تعليمات تحذف سجلات يمر عليها زمن معين كسجلات أنشئت قبل 6 أشهر أ سنة أو أكثر أو أقل هذا إن خفت على كبر حجم قاعدة البيانات .
شكرا للجميع
والسلام عليكم.