kachwahed
03-01-2010, 08:12 PM
بسم الله الرحمن الرحيم
محرك قواعد البيانات Microsoft Access ضمن مجموعة برامج المكتبية Microsoft Office الشهيرة، أحد أسهل مخدمات قواعد البيانات، ومما زاد استخدامه شيوعا لدى المبرمجين كون المحرك ADO مضمن مع إصدارات Windows، حيث هذا المحرك هو الأنسب والأكثر استخداما للاتصال مع محركات Microsoft.
باختصار... لست بحاجة لتثبيت MS Office إذا أردت أن تستخدم قاعدة بيانات Access لأن المحرك مضمن مع إصدار Windows الحديثة.
وبالمقابل فإن من أسوأ عيوب قاعدة بيانات Access أنها تحتاج لصيانة باستمرار، حيث يزداد حجمها مع كل استخدام جراء البيانات الداخلية المتدفقة (Caching, Temporary buffering). ومع زيادة الحجم تزداد مدة فتح قاعدة البيانات ويتضخم حجم النسخة الاحتياطية Backup، والأفظع من ذلك أنك قد تأتي إلى فتح قاعدة البيانات فتصادفك رسالة "مرعبة" تخبرك بأن قاعدة البيانات معطوبة لكن يمكن إصلاحها، والأفظع منه أنك عندما تأتي إلى إصلاحها قد تضيع بعد البيانات (حقول مشوهة، قيود حذفت، ....)، هذا ناهيك عن عدم الاستقرار عند العمل على الشبكات...
* مثال رسالة Access تقترح إصلاح قاعدة البيانات:
http://www.datanumen.com/aar/errors/images/error2239_1.gif
* هنا Access ينكر ملفات قاعدة يباناته ويتبرأ منها :):
http://www.datanumen.com/aar/errors/images/error2239_2.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: هذه الدالة شائعة في النت، قمت ببعض التعديلات عليها.
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 }
يأخذ هذا التابع معلمتين DB هو المسار الكامل لملف قاعدة بيانات Access و Password كلمة المرور لها.
ويعيد ناتج Boolean بقيمة True في حالة النجاح أو False عند الفشل.
التابعين الآتيين على نفس النسق.
أضفت لها Password والشرط:
if FileExists(DB + 'x') then begin
برأيي أن التحقق من وجود الملف في هذه مثل الحالات ضروري جدا...
لا تدري ما الذي سيحصل !؟ وعدم إصلاح قاعدة البيانات خير من حذفها بالكامل!
يتبع...
محرك قواعد البيانات Microsoft Access ضمن مجموعة برامج المكتبية Microsoft Office الشهيرة، أحد أسهل مخدمات قواعد البيانات، ومما زاد استخدامه شيوعا لدى المبرمجين كون المحرك ADO مضمن مع إصدارات Windows، حيث هذا المحرك هو الأنسب والأكثر استخداما للاتصال مع محركات Microsoft.
باختصار... لست بحاجة لتثبيت MS Office إذا أردت أن تستخدم قاعدة بيانات Access لأن المحرك مضمن مع إصدار Windows الحديثة.
وبالمقابل فإن من أسوأ عيوب قاعدة بيانات Access أنها تحتاج لصيانة باستمرار، حيث يزداد حجمها مع كل استخدام جراء البيانات الداخلية المتدفقة (Caching, Temporary buffering). ومع زيادة الحجم تزداد مدة فتح قاعدة البيانات ويتضخم حجم النسخة الاحتياطية Backup، والأفظع من ذلك أنك قد تأتي إلى فتح قاعدة البيانات فتصادفك رسالة "مرعبة" تخبرك بأن قاعدة البيانات معطوبة لكن يمكن إصلاحها، والأفظع منه أنك عندما تأتي إلى إصلاحها قد تضيع بعد البيانات (حقول مشوهة، قيود حذفت، ....)، هذا ناهيك عن عدم الاستقرار عند العمل على الشبكات...
* مثال رسالة Access تقترح إصلاح قاعدة البيانات:
http://www.datanumen.com/aar/errors/images/error2239_1.gif
* هنا Access ينكر ملفات قاعدة يباناته ويتبرأ منها :):
http://www.datanumen.com/aar/errors/images/error2239_2.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: هذه الدالة شائعة في النت، قمت ببعض التعديلات عليها.
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 }
يأخذ هذا التابع معلمتين DB هو المسار الكامل لملف قاعدة بيانات Access و Password كلمة المرور لها.
ويعيد ناتج Boolean بقيمة True في حالة النجاح أو False عند الفشل.
التابعين الآتيين على نفس النسق.
أضفت لها Password والشرط:
if FileExists(DB + 'x') then begin
برأيي أن التحقق من وجود الملف في هذه مثل الحالات ضروري جدا...
لا تدري ما الذي سيحصل !؟ وعدم إصلاح قاعدة البيانات خير من حذفها بالكامل!
يتبع...