كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

مُساهمة من طرف أحمد مناع في السبت مايو 05, 2012 2:51 pm

بسم الله الرحمن الرحيم



أخوانى الكرام أهلا وسهلا بك فى درس جديد من دورس هذا المنتدى ....اليوم إن شاء الله تعالى سنتحدث سويا عن كيفية ضغط و عمل نسخة أحتياطية لقاعدة بيانات أكسس المستخدمة فى مشروعك .......فهيا بنا



أولا : تصميم النوافذ


_ قم فتح مشروع جديد .....ثم قم بعمل الاتى :



_ قم بإنشاء نافذة النسخ الاحتياطى و ضع عليها عدد 4 مربعات نصوص وعدد 2 زر أمر وعدد واحد filelistbox كما فى الشكل التالى :







ويرجى ملاحظة أننى قمت بضبط مربعات النصوص التى تعرض معلومات عن قاعدة البيانات على النحو الاتى :



txtDatabasename : مربع نص لعرض أسم قاعدة البيانات المستخدمة



txtPath : مربع نص لعرض مسار قاعدة البيانات



txtCreateDate :مربع نص لعرض تاريخ إنشاء قاعدة البيانات



txtSize : مربع نص لعرض حجم قاعدة البيانات .



_ قم بأنشاء نافذة أستيراد النسخة الاحتياطية و ضع عليها عدد واحد فيلكس جريد وعدد filelistbox وعدد 2 زر أمر كما فى الشكل التالى :









ثانيا :كتابة الاكواد البرمجية




- بداية قم بأستدعاء المكتبة Microsoft Jet And Replication Object 2.6 Library


وذلك عن طريق " project" ثم أختيار الامر reference



1_ كتابة أكواد نموذج النسخ الاحتياطى .....



_فى قسم التصريحات نقوم بتعريف متغرين الاول ليحمل المكتبة Jet And Replication Object و ليكن je و الثانى من نوع String ليحمل أسم قاعدة بيانات المشروع وليكن DBName....وذلك عن طريق الكود التالى :



الرمز:
Dim je    As New JRO.JetEngine
 Dim DBName As String




- فى حدث تحميل النافذة Form_Load نكتب الكود التالى :



الرمز:


Private Sub Form_Load()

 DBName = "pj.mdb"
 If Dir(App.Path & "\Backup", vbDirectory) = "" Then _
  MkDir App.Path & "\Backup"

  File1.Path = App.Path & "\Backup"

 If Dir(App.Path & "" & DBName) = "" Then _
    Exit Sub

    txtDatabasename = DBName
    txtPath = App.Path
    txtCreateDate = FileDateTime(App.Path & "" & DBName)
    txtSize = FileLen(App.Path & "" & DBName) & " بايت"
'
End Sub

 





شرح الكود :



السطر الاول : قمنا بجعل المتغير DBName يحمل أسم قاعدة البيانات pj.mdb



السطر الثانى : أستخدمنا جملة الشرط if للتأكد من أن مجلد Backup موجود فى نفس مجلد البرنامج .....لذلك أستخدمنا الامر DIR و الذى يستخدم فى معرفة صحة مسار معين ..ثم وضعنا المسار بأستخدام الدالة App.Path ...فإن لم يكن موجود ينتقل للسطر الثالث .



السطر الثالث : قم بإنشاء المجلد Backup فى مسار البرنامج ...ويرجى ملاحظة أننا أستخدمنا الامر MkDir وهو الخاص بإنشاء المجلد فى المسار المراد App.Path .



السطر الرابع : جعلنا مسار FILE يساوى مسار مجلد النسخ الاحتياطى Backup ...



السطر الخامس و السادس : أستخدمنا جملة الشرط IF للتأكد من أن قاعدة البيانات موجودة و الا الخروج من الاجراء.



السطر السابع وحتى العاشر :هى جعل مربعات النصوص الاربعة تعرض معلومات عن أسم قاعدة البيانات و المسار الموجودة فية و تاريخ الانشاء و حجم قاعدة البيانات ....ويجب ملاحظة أننا قد أستخدمنا الدالة FileDateTime و التى تعطى معلومات عن وقت وتاريخ أنشاء أى ملف ...كما أننا أستخدمنا الدالة FileLen و التى تعرض حجم الملف .





_ برمجة زر "تنفيذ عملية النسخ ".....بداية نقوم تعريف المتغيرات التالية عند الضغط على الزر ...وذلك بأستخادم الكود التالى :



الرمز:


 Dim Filename As String, i As Integer, inteFilename As Variant
 Dim Numeric  As Integer, bFilename As String





قمنا بالاعلان عن عدد 5 متغيرات كما سبق 2 من نوع String و عدد 2 من نوع Integer و متغير واحد من نوع Variant ....وسيتم شرحها عند أستخدام تلك المتغيرات ...



- أول كود سيتم كتابتة فى هذا الزر بعد الاعلان عن المتغيرات السابقة هو التأكد من وجود قاعدة البيانات وإلا يتم الخروج من الاجراء...وذلك كما يلى :



الرمز:


 

 If Dir(App.Path & "" & DBName) = "" Then Exit Sub




ثم بعد ذلك نقوم بكتابة الكود التالى :







شرح الكود السابق :



السطر الاول : أستخدمنا جملة الشرط IF للتأكد من أن مجلد النسخ الاحتياطى لايوجد به أى نسخ أخرى و ذلك عن طريق الامر File1.ListCount = 0 ...وطبعا قد أخبرنا البرنامج أنه عند بداية تحميل النافذة يجعل مسار File1 يساوى مسار مجدل النسخ Backup ....وبالتالى فإن File1.ListCount تساوى صفر معنى ذلك أنه لا يوجد أى نسخ أحتياطية أخرى ....ومن ثم فإن حدث ذلك فلينتقل الى السطر الثانى ,,,,,,,,,,,,,



السطر الثانى : جعلنا المتغير Je _والذى قد أعلانا عنه فى قسم التصريحات بأنه يساوى JRO.JetEngine وهو المزود الخاص بكائنات النسخ المتماثل _ يقوم بضغط قاعدة البيانات و نسخها و ذلك عن طريق الامر CompactDatabase ثم وضعنا مسار قاعدة البيانات بين علامتى تنصيص كما يلى :



"Data Source=" & App.Path & "" & DBName & ";"



بعد ذلك وضعنا فاصلة , ثم بعد ذلك وضعنا أيضا المسار الذى سيتم نسخ قاعدة البيانات فية و ايضا تحديد أمتداد قاعدة البيانات التى سيتم نسخها ...وأنا فى هذا المثال أردت نسخ قاعدة البيانات على هيئة ملف Backup



السطر الثالث : ما زلنا فى جملة الشرط if ...فلنفترض أن هناك نسخ موجودة بالفعل من قاعدة البيانات فى مجلد النسخ Backup ...ويحمل نفس الاسم ...فى تلك الحالة أنتقل للسطر الرابع



السطر الرابع : قمنا بأستخدام المتغير Filename الذى قد أعلانا عنه من قبل و جعلناه يساوى عدد عناصر File1 ناقص واحد ....



ومن السطر الخامس حتى العاشر : قمنا بعمل حلقة تكرار لحساب عدد النسخ الاحتياطية ووضع رقم لكل نسخة ...فبدئنا حلقة التكرار من 1 حتى عدد حروف القيمة المخزنة فى المتغير Filename وذلك عن طريق الدالة Len والتى تقوم بحساب طول النص ...ويرجى ملاحظة أننا أستخدمنا المتغير i الذى قد صرحنا عنه من قبل .



ثم بعد ذلك وضعنا المطلوب تنفيذة فى حقلة التكرار تلك ....و أول سطر تم وضعة فى حلقة التكرار هو جعل المتغير inteFilename يساوى القيمة المخزنة فى Filename لكن بعد حذف أخر حرف منه وذلك بأستخادم الدالة Mid والتى تعيد عددا من الأحرف قدره length بدءا من حرف معين هو i، في سلسلة نصية string ...فمثلا عندى متغير يسمى m يحتوى على النص (ahmed) ...ثم قمت بأستخدام الكود التالى :



Label1.Caption = Mid(m, 1, 3) ...فإن النتيجة ستكون ahm ..معنى ذلك أننى قلت للدالة Mid أبقى فقط على 3 حروف من النص (ahmed) مع بدء العد من الحرف رقم 1 وهو فى مثالنا هذا يساوى (a)...أما أن كتبت الكود على يلى :



L.Caption = Mid(m, 2, 3)...فأن النتيجة ستكون hme ...وذلك لان الدالة بدأت العد من الحرف رقم (2)ثم بقت على 3 حروف



بعد ذلك أستخدمنا جملة شرط مركبة للتأكد من أن المتغير inteFilename لا يحتوى على "." فإن حدث ذلك ....نستخدم جملة شرط أخرى مع الدالة IsNumeric لمعرفة ما إذا كان المتغير inteFilename يدل على عدد أم لا فإذا كان يمكن التعامل معه كعدد فإن المتغير Numeric يساوى قيمته بالاضافة الى قيمة المتغير inteFilename غير ذلك ...._أى أن المتغير لا يمكن التعامل معه كعدد_ أجعل المتغير Numeric يساوى (صفر)مع أستخدام جملة شرط أخرى لجعل المتغير bFilename يساوى النسخة الاحتياطية الاولى Backup1.bak ....غير ذلك أجعل المتغير Numeric يساوى قيمتة + 1 مع تغير قيمة المتغير bFilename



بعد كل ذلك أمرنا المتغير je و الذى يعبر المزود JRO.JetEngine بضغط و أصلاح وعمل نسخة أحتياطية بأستخدام الامر CompactDatabase مع وضع مسار قاعدة البيانات بين علامتى تنصيص ....





2_ كتابة أكواد نموذج أستيراد النسخة الاحتياطية .....



_نقوم بكتابة الكود التالى فى حدث تحميل النافذة



الرمز:



    File1.Path = App.Path & "\Backup"
    File1.Refresh
'
    MSFlexGrid1.Clear
    MSFlexGrid1.Rows = 1
    MSFlexGrid1.Cols = 3
    MSFlexGrid1.TextMatrix(0, 0) = "C?? C????"
    MSFlexGrid1.TextMatrix(0, 1) = "C???? ( EC?E )"
    MSFlexGrid1.TextMatrix(0, 2) = "EC??I C???OC?"
    MSFlexGrid1.ColAlignment(0) = 2
    MSFlexGrid1.ColAlignment(1) = 2
    MSFlexGrid1.ColAlignment(2) = 2
    MSFlexGrid1.FixedAlignment(0) = 3
    MSFlexGrid1.FixedAlignment(1) = 3
    MSFlexGrid1.FixedAlignment(2) = 3
    MSFlexGrid1.ColWidth(0) = 3500
    MSFlexGrid1.ColWidth(1) = 1500
    MSFlexGrid1.ColWidth(2) = 2500
'
 For i = 0 To File1.ListCount - 1
      MSFlexGrid1.Rows = i + 2
      MSFlexGrid1.TextMatrix(i + 1, 0) = File1.List(i)
      MSFlexGrid1.TextMatrix(i + 1, 1) = FileLen(App.Path & "\Backup" & File1.List(i))
      MSFlexGrid1.TextMatrix(i + 1, 2) = FileDateTime(App.Path & "\Backup" & File1.List(i))
 Next i
'
 If File1.ListCount = 0 Then Command1.Enabled = False

 





شرح الكود السابق :



السطر الاول :قمنا بجعل مسار File1 يساوى المسار الموجود فية مجلد النسخ Backup

السطر الثانى :تنشيط عناصر File1 عن طريق الامر Refresh

ومن السطر الثالث حتى السابع عشر ...هو تنسيق أداة عرض البيانات FlexGrid ....فقمنا بمسح محتوياتها عن طريق الامر Clear و حددنا عدد الصفوف و الاعمدة ثم وضعنا عنواين الاعمدة ....الخ



ويجب ملاحظة أن الخاصية [TextMatrix] تأخذ قيمتين لتعريف الصف الحالي المراد اضافة النص اليه وهي من اليسار لليمين (الاول لرقم صف الخلية المراد ادخال النص فيها ، والثاني لادخال رقم عمود الخلية المراد ادخال النص فيها.فهذا يعني أن الصف 0 والعمود 0 سيكون فيه النص "أسم الملف " وهكذا بالنسبة للباقى .



أما من بداية السطر الثامن عشر : قمنا بعمل حلقة تكرار لجعل عدد أعمدة FlexGrid تساوى عدد النسخ الاحتياطية الموجودة فى مجلد النسخ الاحتياطى و ايضا تم الحصول على أسم النسخة الاحتياطية و حجمها و تاريخ الانشاء ووضعها فى أداة عرض البيانات FlexGrid



أما السطر الاخير .أستخدمنا جملة الشرط if للتأكد من وجود عناصر فى مجلد النسخ من عدمة ...وفى حالة عدم وجودة جعلنا زر الامر الخاص بأستيراد النسخة الاحتياطية غير متاح .





_ زر أستيراد النسخة الاحتياطية .....نقوم بكتابة الكود التالى



الرمز:


 Dim gFilename As String
    gFilename = MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)
'
 
 If Dir(App.Path & "\pj.mdb") <> "" Then _
    Kill App.Path & "\pj.mdb"
'
    FileCopy App.Path & "\Backup" & gFilename, App.Path & "\pj.mdb"
'
    Kill App.Path & "\Backup" & gFilename
'
        MsgBox "تم أستيراد النسخة بنجاح ", vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading, "النسخ الاحتياطى"

 





شكر الكود ...



السطر الاول و الثانى : قمنا بالاعلان عن المتغير gFilename بأنه من النوع النصى ثم جعلنا يساوى MSFlexGrid1.TextMatrix



السطر الثالث :أستخدمنا جملة شرط للتأكد أن قاعدة البيانات موجودة ....وأن كانت كذلك نقوم حذفها وذلك عن طريق الامر Kill مع وضع المسار و اسم قاعدة البيانات ...



السطر الرابع : قمنا بنسخ النسخة الاحتياطية و المخزنة فى المتغير gFilename الى المسار الموجود فية برنامجنا ...



السطر الخامس : مسح القيمة المخزنة فى المتغير gFilename





و فى النهاية أرجوا أن أكون قد وفقت فى الشرح و اليكم الان المشروع فى المرفقات ...
المرفقات
Backup.zip لا تتوفر على صلاحيات كافية لتحميل هذه المرفقات.(60 Ko) عدد مرات التنزيل 268

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 809
النقاط : 1478
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

مُساهمة من طرف elnawbasy في الأربعاء أكتوبر 17, 2012 7:03 am

شكرا على هذا المجهود الخرافى
أسال الله أن يوفقكم ويزيد من اعمالكم
ايهاب مليحه

elnawbasy
.
.

تاريخ التسجيل : 29/04/2012
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

مُساهمة من طرف khasd في الثلاثاء يناير 22, 2013 11:13 am

اي نعم مجهود لا يقارن ولكن تظهر مشكلة عندما تريد ان تقوم باسترجاع قاعدة البيانات كما هو مبين في الصورة
فما الحل اذن؟

khasd
....
....

تاريخ التسجيل : 23/05/2012
المساهمات : 57
النقاط : 102
التقيم : 1
الدولة : المغرب
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

مُساهمة من طرف tryold في الخميس مايو 16, 2013 12:26 am

اولا شكرا لك على مجهودك استاذنا أحمد والله يوفقك





بالنسبة للخطأ اللي حصل عندك اختي الكريمه هو عباره عن :



Runtime Error 70 : Permission Denied" Occurs When Attempting to Invoke the Methods of a Secure MTS Object from a VB Application
وهذا الرابط من MicroSofft يحل المشكلة





http://support.microsoft.com/kb/252711





تحياتي

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ


ليس من اخترق جهاز اصبح هكر

وليس من كتب كود اصبح مبرمج

وليس من كسر برنامج صار خيبير كسر

ولكن من تواضع لله رفعة


tryold
...
...

تاريخ التسجيل : 06/04/2013
المساهمات : 37
النقاط : 45
التقيم : 0
الدولة : السعودية
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

المرفقات لا تعمل

مُساهمة من طرف ? في الجمعة نوفمبر 08, 2013 3:58 pm


المرفقات لا تعمل أخي لماذا ممكن لو سمحت تعيد وضعها بعد اذنكSurprised 

?
زائر


الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

مُساهمة من طرف end.sub في الإثنين فبراير 03, 2014 9:10 am

? كتب:
المرفقات لا تعمل أخي لماذا ممكن لو سمحت تعيد وضعها بعد اذنكSurprised 

المرفقات لا يمكنك التحميل منها لانك زائر فقط ....قم بالتسجيل للحصول على عضوية كاملة و حينئذ تستطيع تحميل اى مرفق

تحياتى لك

end.sub
.....
.....

تاريخ التسجيل : 15/08/2013
المساهمات : 70
النقاط : 131
التقيم : 9
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ضغط و إصلاح و عمل نسخة أحتياطية Backup من قاعدة بيانات أكسس بأستخدام مكتبة Microsoft Jet And Replication Object

مُساهمة من طرف hima1986 في الجمعة أكتوبر 10, 2014 3:25 pm

مشكور جداً على الجهد الكبير

hima1986
.
.

تاريخ التسجيل : 10/10/2014
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة : سوريا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى