03-01-2010, 08:12 PM
بسم الله الرحمن الرحيم
محرك قواعد البيانات Microsoft Access ضمن مجموعة برامج المكتبية Microsoft Office الشهيرة، أحد أسهل مخدمات قواعد البيانات، ومما زاد استخدامه شيوعا لدى المبرمجين كون المحرك ADO مضمن مع إصدارات Windows، حيث هذا المحرك هو الأنسب والأكثر استخداما للاتصال مع محركات Microsoft.
باختصار... لست بحاجة لتثبيت MS Office إذا أردت أن تستخدم قاعدة بيانات Access لأن المحرك مضمن مع إصدار Windows الحديثة.
وبالمقابل فإن من أسوأ عيوب قاعدة بيانات Access أنها تحتاج لصيانة باستمرار، حيث يزداد حجمها مع كل استخدام جراء البيانات الداخلية المتدفقة (Caching, Temporary buffering). ومع زيادة الحجم تزداد مدة فتح قاعدة البيانات ويتضخم حجم النسخة الاحتياطية Backup، والأفظع من ذلك أنك قد تأتي إلى فتح قاعدة البيانات فتصادفك رسالة "مرعبة" تخبرك بأن قاعدة البيانات معطوبة لكن يمكن إصلاحها، والأفظع منه أنك عندما تأتي إلى إصلاحها قد تضيع بعد البيانات (حقول مشوهة، قيود حذفت، ....)، هذا ناهيك عن عدم الاستقرار عند العمل على الشبكات...
* مثال رسالة Access تقترح إصلاح قاعدة البيانات:
![[صورة: error2239_1.gif]](http://www.datanumen.com/aar/errors/images/error2239_1.gif)
* هنا Access ينكر ملفات قاعدة يباناته ويتبرأ منها
:![[صورة: error2239_2.gif]](http://www.datanumen.com/aar/errors/images/error2239_2.gif)
![[صورة: error2239_3.gif]](http://www.datanumen.com/aar/errors/images/error2239_3.gif)
الحل الأمثل لتفادي فيلم الرعب السابق، هو تنظيف (أو ضغط) قاعدة البيانات باستمرار أو ما يعرف بالقيام بـ Compact، وبذلك لن نضطر لإصلاح قاعدة البيانات لاحقا.
يمكن عمل ذلك من خلال MS Access كما يلي:
Tools – Database Utilities – Compact and Repair Database
أو في إصدار Access 2007 تقريبا هكذا:
File - Manage - Compact and Repair Database
للقيام بذلك من خلال دلفي هناك عدة طرق كلها تصب في نهر واحد:
- الطريقة الأولى: عبر مزود قواعد البيانات JRO.JetEngine: هذه الدالة شائعة في النت، قمت ببعض التعديلات عليها.
PHP كود :
uses
ComObj
function CompactAndRepair(DB, Password: string) : boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password="%s"';
var
v: OLEvariant;
begin { CompactAndRepair }
Result := True;
try
v := CreateOLEObject('JRO.JetEngine');
try
v.CompactDatabase(Format(sProvider, [DB, Password]), Format(sProvider, [DB + 'x', Password]));
if FileExists(DB + 'x') then begin
DeleteFile(DB);
RenameFile(DB + 'x', DB)
end;
finally
v := Unassigned
end; { try }
except
Result := False
end; { try }
end; { CompactAndRepair }
ويعيد ناتج Boolean بقيمة True في حالة النجاح أو False عند الفشل.
التابعين الآتيين على نفس النسق.
أضفت لها Password والشرط:
كود :
if FileExists(DB + 'x') then beginلا تدري ما الذي سيحصل !؟ وعدم إصلاح قاعدة البيانات خير من حذفها بالكامل!
يتبع...
