-الطريقة الثانية: باستخدام مكتبة من النظام JRO_TLB، يجب تثبيتها أولا كما يلي:
Project – Import Type Library
ثم اختر “Microsoft Jet and Replication Objects 2.1 Library”
أو في نسخ دلفي الحديثة من Component ثم Install Component ثم اختر Import Library... الخ.
- الطريقة الثالثة: من خلال DAO.DBEngine دون استخدام مكتبة خاصة، هذه الطريقة مناسبة لنسخ دلفي السابقة التي لا تحتوي على مكونات ADO
لكن يجب التحقق من نسخة DAO.DBEngine المثبتة 3.5 أو 3.6
هذه الأخيرة ليس فيها Password.
لكن متى يجب ضغط (Compact) قاعدة البيانات ؟
أعتقد أن أحسن موعد هو قبل غلق البرنامج، وهذا خيار في MS Access. أو سؤال المستخدم إذا كان أهلا لذلك. في انتظار ما عند الخبراء.
تنبيه هام:
- قبل استخدام أي من هذه التوابع يجب غلق أي اتصال مع قاعدة البيانات، بعبارة أخرى الضغط يتم على قاعدة البيانات بشكل Exclusive. يتم ذلك بشيء مثل:
ملاحظة: يمكن القيام بذلك من خلال سطر أوامر مضمن مع MS Access بهذا الشكل:
ويمكن تطبيق هذا السطر من دلفي بـ ShellExecute مثلا.
في المرفقات مثال باستخدام DAO.DBEngine مرفق بالمصدر.
في انتظار آرائكم إثراءا للموضوع. تحياتي.
Project – Import Type Library
ثم اختر “Microsoft Jet and Replication Objects 2.1 Library”
أو في نسخ دلفي الحديثة من Component ثم Install Component ثم اختر Import Library... الخ.
PHP كود :
Uses
JRO_TLB;
function CompactAndRepair(DB, Password: String): Boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password="%s"';
var
oJetEng : JetEngine;
begin
try
oJetEng := CoJetEngine.Create;
try
oJetEng.CompactDatabase(Format(sProvider, [DB, Password]),Format(sProvider, [DB + 'x', Password]));
if FileExists(DB + 'x') then begin
DeleteFile(DB);
RenameFile(DB + 'x', DB)
end;
Result := True;
finally
FreeAndNil(oJetEng);
end;
except
Result := False;
end;
end;
- الطريقة الثالثة: من خلال DAO.DBEngine دون استخدام مكتبة خاصة، هذه الطريقة مناسبة لنسخ دلفي السابقة التي لا تحتوي على مكونات ADO
لكن يجب التحقق من نسخة DAO.DBEngine المثبتة 3.5 أو 3.6
PHP كود :
function CompactAndRepair(DB: String):Boolean;
var
dao: OLEVariant;
begin
try
//May be version DAO.DBEngine.35 or other...
dao := CreateOleObject('DAO.DBEngine.36');
try
dao.CompactDatabase(DB ,DB + 'x');
if FileExists(DB + 'x') then begin
DeleteFile(DB);
RenameFile(DB + 'x', DB)
end;
Result := True;
finally
dao := Unassigned;
end;
except
Result := False;
end;
end;
لكن متى يجب ضغط (Compact) قاعدة البيانات ؟
أعتقد أن أحسن موعد هو قبل غلق البرنامج، وهذا خيار في MS Access. أو سؤال المستخدم إذا كان أهلا لذلك. في انتظار ما عند الخبراء.
تنبيه هام:
- قبل استخدام أي من هذه التوابع يجب غلق أي اتصال مع قاعدة البيانات، بعبارة أخرى الضغط يتم على قاعدة البيانات بشكل Exclusive. يتم ذلك بشيء مثل:
كود :
ADOConnection1.Close;
if CompactAndRepair(DatabaseName, DatabasePassword) then
ShowMessage('database compact successfully');
ADOTable1.Open;كود :
"%programfiles%\Microsoft Office\Office12\msaccess.exe" /compact *.mdbفي المرفقات مثال باستخدام DAO.DBEngine مرفق بالمصدر.
في انتظار آرائكم إثراءا للموضوع. تحياتي.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...

