اذهب الي المحتوي
أوفيسنا

نسخ قاعدة بيانات الجداول المرتبطة فقط عند الخروج


الردود الموصى بها

السلام عليكم ورحمة الله

لدي برنامج مقسم الي وجهات وجداول ومرتبطين مع بعضهما

مسار البرنامج هو D:\archives

مسار قاعدة البيانات المرتبطة D:\archives\server

اريد عمل نسخه احتياطية للجداول المرتبطة بشكل تلقائي عند الخروج من البرنامج ووضعها في وحفظها في المسار التالي D:\archives\backup

وتكون مسمى بالوقت والتاريخ 

وعند الخروج كل مرة يتم استبدال النسخه القديمة بالنسخه الجديدة

علما بانني اطلعت علي رابط مشاركة لاستاذ جعفر والاستاذ اخر الارضي ولكن لم تضبط معي

بارك الله فيكم

رابط هذا التعليق
شارك

اخي وليد هذا الرابط ان عارفه جدا

وحاولت مرارا التجربة علي الامثلة والاكواع التي به ولم افلح. 

فممكن ترفق لي نسخه من ملفك ويكون موضح به المطلوب

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

السلام عليكم

اسمحوا لي بالمشاركة معكم

هذا الكود كامل بالمطلوب ويمكنكم تسمية النسخة واللاحقة بما تريدون

يتم اخذ النسخة عند اغلاق النموذج / انظر المرفق

Dim DBOld As String
 Dim DBNew As String
Private Sub Form_Load()
DBOld = CurrentProject.Path & "\Data.mdb"  'اختيار قاعدة بيانات الجداول
DBNew = CurrentProject.Path & "\Backup"  'اختيار مكان حفظ النسخة
End Sub
Private Sub Form_Close()
On Error Resume Next
Shell "cmd.exe /C copy " & """" & DBOld & """" & " " & """" & DBNew & "\" & "Data.mdb" & """", 0
End Sub

xxxx.rar

  • Like 3
رابط هذا التعليق
شارك

بارك الله فيك استاذنا ابو خليل

اتفضل اخي محمد هذا المثال  من استاذنا الجميل جعفر

 ضع الفولدر Prog والذي يحتوي علي الجداول المرتبطة علي الD كما هو  .. ثم قم بفتح البرنامج الاساسي AA  وقم بالخروج 

سوف ينشيء فولدر تلقائي باسم BAk علي الD وبه نسخة من الجداول المرتبطة بالتاريخ والوقت

للاسف يوجد مشكلة بالموقع عند تحميل الملفات

اتفضل هذا الكود  لحين استطيع تحميل المرفقات

On Error GoTo err_Form_Close

    'make a backup of BE
    BE_or_FE = "D:\prog"
    Backup_Folder = "D:\BAK"
   
    'Do a copy from a PC name wael ONLY
    'If VBA.Environ("Computername") <> "wael" Then Exit Sub
   
    'Delete the old saved accdb
    Kill Backup_Folder & "\AA_BE_*.accdb"
   
    'Now lets work on saving the new accdb''Is this PC name =  jj'
    '
    BE_Address = BE_or_FE & "\AA_BE.accdb"
    BK_Address = Backup_Folder & "\AA_BE_" & Format(Date, "dd-mm-yyyy") & "-" & Format(Now(), "Hh-Nn-AMPM") & ".accdb*"
 
   
    'Debug.Print "xcopy " & Chr(34) & BE_Address & Chr(34) & " " & Chr(34) & BK_Address & Chr(34)
    Call Shell("xcopy " & Chr(34) & BE_Address & Chr(34) & " " & Chr(34) & BK_Address & Chr(34), vbHide)


Exit Sub
err_Form_Close:

    If Err.Number = 2450 Or Err.Number = 53 Then
        'ignor
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If

تم تعديل بواسطه wael_rafat
  • Like 1
رابط هذا التعليق
شارك

وجزاك ربي خيرا اخونا عزيز

هذا الكود كامل بالمطلوب ويمكنكم تسمية النسخة واللاحقة بما تريدون

 

اقصد بالنسخة واللاحقة هي اسم قاعد الجداول ولاحقتها : Data.mdb  والموجودة بهذه العبارة

Shell "cmd.exe /C copy " & """" & DBOld & """" & " " & """" & DBNew & "\" & "Data.mdb" & """", 0

 

  • Like 1
رابط هذا التعليق
شارك

بارك الله فيك استاذنا العزيز ابو خليل

مثالك رائع ولكن ينقصه ان تكون النسخة الاحتياطية بالوقت والتاريخ وان يتم استبدال النسخه القديمة بالنسخه الجديدة فى كل مرة خروج من البرنامج

و يكون كمبيوتر او مستخدم معين هو الذي ينفذ النسخ مثل كود الاستاذ جعفر .. ولا اعرف لماذا لا يعمل عندى

لو تكرمت استانا ابو خليل تجربة كود الاستاذ جعفر على جهازكم لبيان اذا كان يعمل ام لا

شكرا لك وبارك الله فيك وفى اولادك

اخى وائل

 

بارك الله فيك استاذنا ابو خليل

اتفضل اخي محمد هذا المثال  من استاذنا الجميل جعفر

 ضع الفولدر Prog والذي يحتوي علي الجداول المرتبطة علي الD كما هو  .. ثم قم بفتح البرنامج الاساسي AA  وقم بالخروج 

سوف ينشيء فولدر تلقائي باسم BAk علي الD وبه نسخة من الجداول المرتبطة بالتاريخ والوقت

للاسف يوجد مشكلة بالموقع عند تحميل الملفات

اتفضل هذا الكود  لحين استطيع تحميل المرفقات

On Error GoTo err_Form_Close

    'make a backup of BE
    BE_or_FE = "D:\prog"
    Backup_Folder = "D:\BAK"
   
    'Do a copy from a PC name wael ONLY
    'If VBA.Environ("Computername") <> "wael" Then Exit Sub
   
    'Delete the old saved accdb
    Kill Backup_Folder & "\AA_BE_*.accdb"
   
    'Now lets work on saving the new accdb''Is this PC name =  jj'
    '
    BE_Address = BE_or_FE & "\AA_BE.accdb"
    BK_Address = Backup_Folder & "\AA_BE_" & Format(Date, "dd-mm-yyyy") & "-" & Format(Now(), "Hh-Nn-AMPM") & ".accdb*"
 
   
    'Debug.Print "xcopy " & Chr(34) & BE_Address & Chr(34) & " " & Chr(34) & BK_Address & Chr(34)
    Call Shell("xcopy " & Chr(34) & BE_Address & Chr(34) & " " & Chr(34) & BK_Address & Chr(34), vbHide)


Exit Sub
err_Form_Close:

    If Err.Number = 2450 Or Err.Number = 53 Then
        'ignor
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If

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

فلو تكرمت ممكن مرفق بالبرنامج والجداول المرتبطة به 

واذا تعذر يمكنك رفعه على موقع خارجي وادراج الرابط هنا

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

     'If VBA.Environ("Computername") <> "wael" Then Exit Sub

بانتظرك اخى وائل واستاذنا ابو خليل 

رابط هذا التعليق
شارك

مسألة اننا نحذف النسخة السابقة ونلصق النسخة الجديدة  فهي فكرة للحد من تراكم النسخ

ولكن ما النتيجة و ماالمخرج من المصيبة حين تأخذ نسخة من قاعدة بيانات معطوبة لتحل محل السابقة السليمة

يوجد طريقتين لاخذ الاحتياط من الوقوع بهذا الخطأ

الطريقة الاولى :

ان تكون النسخة شهرية (اي يتم تسمية النسخة بالسنة والشهر فقط )

وخلال الشهر تتم العملية بالكتابة آليا فوق النسخة

فإذا دخل الشهر الجديد يتم وضع نسخة جديدة بجانب نسخة الشهر السابق

وهكذا .. نتحصل على 12 نسخة في السنة الواحدة

الطريقة الثانية :

وهي الافضل على الاطلاق

ان يكون هناك عملية تسبق عملية النسخ داخل الاجراء نفسه ومهمتها تحسس مجلد النسخ

يتم من خلالها حذف النسخ الزائدة ان وجدت والابقاء على آخر  ثلاث نسخ جديدة 

 

وبالنسبة لطلبك اظهار التاريخ والوقت في اسم النسخة يمكنك استبدال الجزء الخاص بالنسخ بالكود في مشاركتي الاولى بهذا :

Shell "cmd.exe /C copy " & """" & DBOld & """" & " " & """" & _
DBNew & "\" & Format(Now(), "yymmddhhnn") & ".mdb" & """", 0

لاحظ انه يمكنك حذف ما تشاء من تنسيق التاريخ

فإن حذفت nn سيتم اخذ نسخة بجانب الاولى بعد دقيقة

وان حذفت hh ================= بعد ساعة

وان حذفت dd ================= بعد يوم

وهكذا ...............

رابط هذا التعليق
شارك

الله الله عليك استاذنا ابو خليل

يعني افهم من كلامك ان حذفت ال mm وهي الشهر سيتم اخذ نسخه كل شهر تلقائيا.

صح كده

رابط هذا التعليق
شارك

ليس حذف mm بل الابقاء على mm مع yy وان اردت السنة كاملة مع الشهر : yyyymm

وتحذف ما عداها ..

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

وفي بداية الشهر الجديد يتم وضع نسخة جديدة بجانب القديمة

والسبب ؟؟ لان اسم القاعدة تغير

ارجوا يكون الشرح واضح

 

  • Like 1
رابط هذا التعليق
شارك

الله الله عليك استاذنا ابوخليل

تمام شغاله تمام جدا

بارك الله فيك

خطر ببالي فكرة جديد لتطوير اداه معاينة لهذا الامر حتي يستفيد منها جميع الاعضاء.

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

شكرا لحضرتك جدا

رابط هذا التعليق
شارك

  • 5 months later...
10 ساعات مضت, محمد سلامة said:

تم تكملة الموضوع في هذا الرابط

.

وهنا بداية جديدة للمرحلة التالية ، ونريد افكارك كذلك:rol: :

http://www.officena.net/ib/topic/67564-علاج-تراكم-عدد-النسخ-الاحتياطي/

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information