![]() |
|
إصلاح وضغط قاعدة البيانات MS Access - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي و التعامل مع قواعد البيانات (https://delphi4arab.net/forum/forumdisplay.php?fid=23) +--- الموضوع : إصلاح وضغط قاعدة البيانات MS Access (/showthread.php?tid=1465) |
إصلاح وضغط قاعدة البيانات MS Access - kachwahed - 03-01-2010 بسم الله الرحمن الرحيم
محرك قواعد البيانات Microsoft Access ضمن مجموعة برامج المكتبية Microsoft Office الشهيرة، أحد أسهل مخدمات قواعد البيانات، ومما زاد استخدامه شيوعا لدى المبرمجين كون المحرك ADO مضمن مع إصدارات Windows، حيث هذا المحرك هو الأنسب والأكثر استخداما للاتصال مع محركات Microsoft. باختصار... لست بحاجة لتثبيت MS Office إذا أردت أن تستخدم قاعدة بيانات Access لأن المحرك مضمن مع إصدار Windows الحديثة. وبالمقابل فإن من أسوأ عيوب قاعدة بيانات Access أنها تحتاج لصيانة باستمرار، حيث يزداد حجمها مع كل استخدام جراء البيانات الداخلية المتدفقة (Caching, Temporary buffering). ومع زيادة الحجم تزداد مدة فتح قاعدة البيانات ويتضخم حجم النسخة الاحتياطية Backup، والأفظع من ذلك أنك قد تأتي إلى فتح قاعدة البيانات فتصادفك رسالة "مرعبة" تخبرك بأن قاعدة البيانات معطوبة لكن يمكن إصلاحها، والأفظع منه أنك عندما تأتي إلى إصلاحها قد تضيع بعد البيانات (حقول مشوهة، قيود حذفت، ....)، هذا ناهيك عن عدم الاستقرار عند العمل على الشبكات... * مثال رسالة Access تقترح إصلاح قاعدة البيانات: ![]() * هنا Access ينكر ملفات قاعدة يباناته ويتبرأ منها :![]() ![]() الحل الأمثل لتفادي فيلم الرعب السابق، هو تنظيف (أو ضغط) قاعدة البيانات باستمرار أو ما يعرف بالقيام بـ Compact، وبذلك لن نضطر لإصلاح قاعدة البيانات لاحقا. يمكن عمل ذلك من خلال MS Access كما يلي: Tools – Database Utilities – Compact and Repair Database أو في إصدار Access 2007 تقريبا هكذا: File - Manage - Compact and Repair Database للقيام بذلك من خلال دلفي هناك عدة طرق كلها تصب في نهر واحد: - الطريقة الأولى: عبر مزود قواعد البيانات JRO.JetEngine: هذه الدالة شائعة في النت، قمت ببعض التعديلات عليها. PHP كود : usesويعيد ناتج Boolean بقيمة True في حالة النجاح أو False عند الفشل. التابعين الآتيين على نفس النسق. أضفت لها Password والشرط: كود : if FileExists(DB + 'x') then beginلا تدري ما الذي سيحصل !؟ وعدم إصلاح قاعدة البيانات خير من حذفها بالكامل! يتبع... إصلاح وضغط قاعدة البيانات MS Access - kachwahed - 03-01-2010 -الطريقة الثانية: باستخدام مكتبة من النظام JRO_TLB، يجب تثبيتها أولا كما يلي: Project – Import Type Library ثم اختر “Microsoft Jet and Replication Objects 2.1 Library” أو في نسخ دلفي الحديثة من Component ثم Install Component ثم اختر Import Library... الخ. PHP كود : Uses- الطريقة الثالثة: من خلال DAO.DBEngine دون استخدام مكتبة خاصة، هذه الطريقة مناسبة لنسخ دلفي السابقة التي لا تحتوي على مكونات ADO لكن يجب التحقق من نسخة DAO.DBEngine المثبتة 3.5 أو 3.6 PHP كود : function CompactAndRepair(DB: String):Boolean;لكن متى يجب ضغط (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 مرفق بالمصدر. في انتظار آرائكم إثراءا للموضوع. تحياتي. إصلاح وضغط قاعدة البيانات MS Access - AL-MOB4RM3G - 04-01-2010 جميل جداً اخي كاشواحد,, :laugh: إقتباس :لكن متى يجب ضغط (Compact) قاعدة البيانات ؟ هل افهم من هذا انه يجب عمل ضغط للقآعدة بعد كل استخدآم ؟ وكيف تعد هذه القآعدة قويّة ان كانت تحتاج الى ضغط بعد كل استخدام ؟ في الحقيقة موضوع جميل, وانا في الحقيقة احب هذا القآعدة لسهولتها, لكن ربما علي التّخلّي عنها قريبا, بارك الله لك وجزآك الله كل خير,:bye1: إصلاح وضغط قاعدة البيانات MS Access - issamdnn - 04-01-2010 الله يعطيك ألف عافية الحقيقة موضوع جميل جداً ويستحق التقدير . وخصوصاً أني دائم الإستخدام لقواعد بيانات ال MS Access . شكراً مجدداً. إصلاح وضغط قاعدة البيانات MS Access - kachwahed - 04-01-2010 [COLOR="black"] إقتباس :هل افهم من هذا انه يجب عمل ضغط للقآعدة بعد كل استخدآم ؟لا أقول يجب بعد كل استخدام... لكن ينبغي ألا تغفل عليها حتى تشاهد فيلم رعب حقيقي ![]() التنظيف يكون بشكل دوري (شهريا، أسبوعيا، يوميا...) حسب الحاجة وحسب الاستخدام. إقتباس :وكيف تعد هذه القآعدة قويّة ان كانت تحتاج الى ضغط بعد كل استخدام ؟نظرية :إذا افترضنا أن أحسن وسيلة نقل هي الطائرة مثلا ... لأنها أسرع من السيارة... فهل سنركب الطائرة عوضا عن السيارة للذهاب إلى السوق لأنها أحسن وأسرع وسيلة نقل !!!؟ ... كل شيء له استخدامه في نطاق معين... Microsoft لا زالت تطور MS Access وقد أصدرت نسخة Office 2010 ... وفي نفس الوقت لا زالت تطور SQL Server ولم تقل: نتوقف عن تطوير Access مادمنا نطور SQL Server ! وقس على ذلك باقي محركات قواعد البيانات ... لكل عيوب ومميزات ... وما تربحه من جهة قد تخسر لأجله من جهة أخرى وما عليك إلا الموازنة بحسب ما تحتاج... لأجل أن تخسر أقل شيء مقابل أكبر ربح ممكن. والله أعلم. بارك الله لك أخي issamdnn، تشجيعك يدفعني للمزيد.[/COLOR] إصلاح وضغط قاعدة البيانات MS Access - AL-MOB4RM3G - 05-01-2010 إقتباس :لا أقول يجب بعد كل استخدام... لكن ينبغي ألا تغفل عليها حتى تشاهد فيلم رعب حقيقي طيب جميل اخي الكريم, ومثآل السيآرة و الطآئرة وآضح ايضى ولله الحمد, اذا نحتآج موضوع يوضح لنا متى نستخدم اي قآعدة حتى لا نجد انفسنا في فيلم الرعب الذي تتحدث عنه,,:unsure: بارك الله لك اخي الكريم, إصلاح وضغط قاعدة البيانات MS Access - kachwahed - 05-01-2010 إقتباس :فيلم الرعب الذي تتحدث عنه,,في بعض الأحيان حتى Access نفسه لن يستطيع إصلاحها: كود : http://www.datanumen.com/aar/errors/database-needs-repaired.htmكود : http://office.microsoft.com/en-us/access/HA010345701033.aspx?pid=CH063648701033كود : http://office.microsoft.com/en-us/access/HP051874491033.aspxإقتباس :اذا نحتآج موضوع يوضح لنا متى نستخدم اي قآعدةهذا أتركه للخبراء .إصلاح وضغط قاعدة البيانات MS Access - DJILANI - 04-09-2015 كيف أتأكد من أن هذا الكو د يعمل فعليا إصلاح وضغط قاعدة البيانات MS Access - bassem_43 - 04-09-2015 DJILANI كتب :كيف أتأكد من أن هذا الكو د يعمل فعلياالسلام عليكم حل بسيط برايي خد قاعدة بيانات ms access لاحد برامجك و قس حجمها اولا ثم قم بعملية تنظيف واصلاح كما هو مبين في الدرس ثم اعد قياس حجمها وقارن الفرق ولا تنسى هده الرسالة تخبرك بنجاح العملية من فشلها كود : ADOConnection1.Close;
if CompactAndRepair(DatabaseName, DatabasePassword) then
ShowMessage('database compact successfully');
ADOTable1.Open;إصلاح وضغط قاعدة البيانات MS Access - DJILANI - 05-09-2015 كود : procedure TForm5.Button3Click(Sender: TObject);
begin
DataModule1.ADOConnection1.Close;
if CompactAndRepair('E:\Projet\gestion commerciale\gestion commerciale\gestion commerciale\gestion commerciale.mdb','') then
ShowMessage('database compact successfully');
DataModule1.utilisateur.Open;
end;كود : [align=left]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 + 'E:\Projet\gestion commerciale\gestion commerciale\gestion commerciale\gestion commerciale.mdb', Password]));
if FileExists(DB + 'E:\Projet\gestion commerciale\gestion commerciale\gestion commerciale\gestion commerciale.mdb') then begin
DeleteFile(DB);
RenameFile(DB + 'E:\Projet\gestion commerciale\gestion commerciale\gestion commerciale\gestion commerciale.mdb', DB)
end;
finally
v := Unassigned
end; { try }
except
Result := False
end; { try }
end; { CompactAndRepair }[/align]إستعملت الكود التالي ولم يعمل معي؟ |