إصلاح وضغط قاعدة البيانات MS Access
#2
-الطريقة الثانية: باستخدام مكتبة من النظام JRO_TLB، يجب تثبيتها أولا كما يلي:
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; 
هذه الأخيرة ليس فيها Password.

لكن متى يجب ضغط (Compact) قاعدة البيانات ؟
أعتقد أن أحسن موعد هو قبل غلق البرنامج، وهذا خيار في MS Access. أو سؤال المستخدم إذا كان أهلا لذلك. في انتظار ما عند الخبراء.

تنبيه هام:
- قبل استخدام أي من هذه التوابع يجب غلق أي اتصال مع قاعدة البيانات، بعبارة أخرى الضغط يتم على قاعدة البيانات بشكل Exclusive. يتم ذلك بشيء مثل:
كود :
ADOConnection1.Close; if CompactAndRepair(DatabaseName, DatabasePassword) then ShowMessage('database compact successfully'); ADOTable1.Open;
ملاحظة: يمكن القيام بذلك من خلال سطر أوامر مضمن مع MS Access بهذا الشكل:
كود :
"%programfiles%\Microsoft Office\Office12\msaccess.exe" /compact *.mdb
ويمكن تطبيق هذا السطر من دلفي بـ ShellExecute مثلا.

في المرفقات مثال باستخدام DAO.DBEngine مرفق بالمصدر.
في انتظار آرائكم إثراءا للموضوع. تحياتي.


الملفات المرفقة
.rar   BatchCompactMDB.rar (الحجم : 130.4 ك ب / التحميلات : 4,320)
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد


الردود في هذا الموضوع
إصلاح وضغط قاعدة البيانات MS Access - بواسطة kachwahed - 03-01-2010, 08:37 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم