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

شرح : نسخ احتياطى تلقائى لمحتويات فولدر بالكامل فى وقت معين (يوميا-اسبوعيا-شهريا)


Amr Ashraf

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

السلام عليكم .. اخوانى الكرام ,, بعد التحية

موضوعنا اليوم عن النسخ الاحتياطى لمحتويات فولدر محدد فى وقت محدد من اليوم على اساس يومى او اسبوعى او شهرى كما تريد .

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

كود النسخ المستخدم كالتالى :

Public Sub Copy_Folder1()
    Dim FSO As Object
    Dim FromPath As String
    Dim ToPath As String

    FromPath = Forms!Frm!from
    'ToPath = "D:\Old\test"    '<< Change

    ToPath = Forms!Frm!To2 & Format(Now, "yyyy-mm-dd h-mm-ss")

    If Right(FromPath, 1) = "\" Then
        FromPath = Left(FromPath, Len(FromPath) - 1)
    End If

    If Right(ToPath, 1) = "\" Then
        ToPath = Left(ToPath, Len(ToPath) - 1)
    End If

    Set FSO = CreateObject("scripting.filesystemobject")

    If FSO.FolderExists(FromPath) = False Then
        MsgBox FromPath & "المسار المطلوب النسخ منه غير موجود"
        Exit Sub
    End If

    FSO.CopyFolder Source:=FromPath, Destination:=ToPath

End Sub

مميزات الكود :

  • نسخ محتويات الفولدر بالكامل سواء ملفات او فولدرات فرعية .
  • فى حالة عدم وجود المسار المطلوب وضع النسخة الاحتياطية فيه سيقوم بانشاءه تلقائياً.
  • فى حالة وجود المسار وبه ملفات بنفس الاسم سيتم عمل Overwrite للملفات القديمة واستبدالها بالجديدة (وذلك فى حالة انك غيرت الاسم الذى يتم الحفظ به لأن الافتراضى يحفظ الاسم بالتاريخ ووقت الحفظ بالدقائق وبالتالى من الصعب تشابه الاسماء بين النسخ).

شكل النموذج

Capture.PNG.646b953c648f7c5149d52745426f14aa.PNG

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

لحد الآن موصلناش لجزئية التلقائى المذكورة فى العنوان 😅, من المعروف ان لازم تكون القاعدة مفتوحة حتى يعمل النسخ الاحتياطى وبالتالى فى حالة انك قمت بعمل استيراد للبرنامج ده داخل قاعدتك الاساسية المفتوحة طوال اليوم فلا مشكلة وعند وصول الوقت المحدد ستعمل بدون مشاكل .. ولكن ماذا لو اردت ان النسخ يتم حتى لو القاعدة مغلقة ؟

سنقوم بالاستفادة بخاصية مهمة موجودة فى الويندوز وبدون استخدام برامج خارجية تابع معى :

فى قائمة Start ابحث عن Task Scheduler وهى خاصية تقوم بعمل مجموعة من الاوامر فى اوقات محددة مثل تشغيل برنامج او اغلاقه او ارسال ايميل مثلا الخ... هذه صورة الواجهة

0.PNG.e58669f3105b1c0badc287a2604fee55.PNG

اضغط على Create Basic Task وستفتح لك الواجهة التالية :

1.PNG.21323bfa7dbdcdbfc31c8e68751e517f.PNG

اكتب اسم المهمة المطلوبة ثم Next :

2.PNG.bf8dc79277f9fe9cd92d45f171636da4.PNG

هنا تكرار المهمة يوميا - اسبوعيا - شهريا - مرة واحدة - عند بداية التشغيل للجهاز - عندما اسجل دخول المستخدم - عند حدوث حدث معين . اختر ما يناسبك وفى حالتنا اخترت Daily يومياً .

3.PNG.81cdd30461d8a7809b22590932595262.PNG

اختر تاريخ بداية العمل و الوقت المطلوب تشغيل المهمة فيه .التالى

3-2.PNG.5506c1b30eb773aaf12daef5c376fde5.PNG

فى هذه الخطوة تختار ماهية المهمة فتح برنامج معين - ارسال ايميل - عرض رسالة محددة .. اختر Start Program فى حالتنا .. التالى

4.PNG.dd82e90ae9712dd35b125927715c3a14.PNG

فى هذه الخطوة تقوم باختيار مسار البرنامج المطلوب تشغيله وطبعا فى هذه الحالة البرنامج هو ميكروسوفت اكسس يتم تحديد مسار البرنامج من "C:" ثم تحديد القاعدة المطلوب تشغيلها فى Arguments بنفس الصيغة الموجودة بالصورة (بين علامتين تنصيص والمسار كامل بالامتداد )

#Program/Script
"C:\Program Files\Microsoft Office\Office16\MSACCESS.EXE"
#Arguments
"C:\Users\Amr\Access\Backup\Tasker.Accdb"

ثم اضغط على Finish. وبهذا قمنا بعمل مهمة للويندوز انه يفتح القاعدة الخاصة بنا فى وقت معين يومياً ,, باقى العمل داخل القاعدة نفسها كالتالى :

فى حدث عند الفتح للنموذج ستجد الكود التالى :

Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acFirst
Me.To2 = [to] & "\" & [newnm] & " "
Call SixHatHideWindow(SW_SHOWMINIMIZED)
'Call Copy_Folder1 '''' نقوم بتفعيل الخيار بعد تحديد الخيارات فى النموذج اول مرة لتعمل بتلقائية فيما بعد
'DoCmd.Quit '''' نقوم بتفعيل الخيار بعد تحديد الخيارات فى النموذج اول مرة لتعمل بتلقائية فيما بعد
End Sub

السطرين الغير مفعلين يتم تفعليهم بعد تحديد الخيارات الخاصة بيك من النموذج اول مرة وعند تفعيلهم بمجرد تشغيل القاعدة ستقوم بعملية النسخ وتغلق تلقائياً  ..

وبالتالى ملخص الفكرة ان القاعدة هتكون مغلقة وهتقوم مهمة الويندوز بتشغيلها وعند تشغيلها ستقوم بعمل النسخ الاحتياطى بالبيانات التى تم تحديدها اول مرة ثم تغلق تلقائياً وذلك فى اقل من ثانية قد لا تلاحظها من الاساس .

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

ملحوظة : يمكن عمل المهمة الخاصة بالويندوز عن طريق اسكريبت VBS اختصارا للخطوات ولكن اردت شرح الفكرة من أساسها ويكون هناك مساحة للتطوير فيما بعد .

 

BackupManual+Auto+Timer-AmrAshraf.accdb

تم تعديل بواسطه Amr Ashraf
  • Like 4
  • Thanks 5
رابط هذا التعليق
شارك

وعليكم السلام 🙂

 

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

في الواقع طريقة استخدام "جدولة الوندوز" افضل طريقة للقيام بالاعمال المتكررة ، ومنها اخذ النسخ كما تفضلت ،

واذا كان المطلوب عمل نسخ لمفات اكسس فقط ولأكثر من برنامج ، فاقترح انزال برنامج  http://www.peterssoftware.com/cal.htm (الموقع به الكثير من البرامج المجانية المفيدة)

ومن ثم نجعل "جدولة الوندوز" (حسب شرحك اعلاه) ، تفتح هذا البرنامج ، وهو يقوم بالباقي ،

ويسمح لك بإختيار اي عدد من قواعد البيانات ، ويمكنك طلب ان يعمل ضغط واصلاح لهم ، وحفظهم بطريقة مضغوطة winzip كذلك 🙂

 

ويمكننا عمل ملفات bat. (اخف بكثير من تشغيل الاكسس) للقيام ببعض المهام ، ومناداة هذا الملف للقيام بالعمل ، مثل حذف ملف معين كل يوم او في تاريخ معين :

 

 

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

 

جعفر

مرفق نسخة من الرابط اعلاه

cal.zip

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

35 دقائق مضت, jjafferr said:

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

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

تشرفت بمرورك :fff:

37 دقائق مضت, jjafferr said:

واذا كان المطلوب عمل نسخ لمفات اكسس فقط ولأكثر من برنامج ، فاقترح انزال برنامج  http://www.peterssoftware.com/cal.htm (الموقع به الكثير من البرامج المجانية المفيدة)

اضافة رائعة جزاكم الله خير .

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

عمل رائع مهم واتساءل هل يمكن عمل نسخة لاكثر من مجلد 

في ٢٦‏/١‏/٢٠٢٢ at 10:08, Amr Ashraf said:

السلام عليكم .. اخوانى الكرام ,, بعد التحية

موضوعنا اليوم عن النسخ الاحتياطى لمحتويات فولدر محدد فى وقت محدد من اليوم على اساس يومى او اسبوعى او شهرى كما تريد .

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

كود النسخ المستخدم كالتالى :

Public Sub Copy_Folder1()
    Dim FSO As Object
    Dim FromPath As String
    Dim ToPath As String

    FromPath = Forms!Frm!from
    'ToPath = "D:\Old\test"    '<< Change

    ToPath = Forms!Frm!To2 & Format(Now, "yyyy-mm-dd h-mm-ss")

    If Right(FromPath, 1) = "\" Then
        FromPath = Left(FromPath, Len(FromPath) - 1)
    End If

    If Right(ToPath, 1) = "\" Then
        ToPath = Left(ToPath, Len(ToPath) - 1)
    End If

    Set FSO = CreateObject("scripting.filesystemobject")

    If FSO.FolderExists(FromPath) = False Then
        MsgBox FromPath & "المسار المطلوب النسخ منه غير موجود"
        Exit Sub
    End If

    FSO.CopyFolder Source:=FromPath, Destination:=ToPath

End Sub

مميزات الكود :

  • نسخ محتويات الفولدر بالكامل سواء ملفات او فولدرات فرعية .
  • فى حالة عدم وجود المسار المطلوب وضع النسخة الاحتياطية فيه سيقوم بانشاءه تلقائياً.
  • فى حالة وجود المسار وبه ملفات بنفس الاسم سيتم عمل Overwrite للملفات القديمة واستبدالها بالجديدة (وذلك فى حالة انك غيرت الاسم الذى يتم الحفظ به لأن الافتراضى يحفظ الاسم بالتاريخ ووقت الحفظ بالدقائق وبالتالى من الصعب تشابه الاسماء بين النسخ).

شكل النموذج

Capture.PNG.646b953c648f7c5149d52745426f14aa.PNG

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

لحد الآن موصلناش لجزئية التلقائى المذكورة فى العنوان 😅, من المعروف ان لازم تكون القاعدة مفتوحة حتى يعمل النسخ الاحتياطى وبالتالى فى حالة انك قمت بعمل استيراد للبرنامج ده داخل قاعدتك الاساسية المفتوحة طوال اليوم فلا مشكلة وعند وصول الوقت المحدد ستعمل بدون مشاكل .. ولكن ماذا لو اردت ان النسخ يتم حتى لو القاعدة مغلقة ؟

سنقوم بالاستفادة بخاصية مهمة موجودة فى الويندوز وبدون استخدام برامج خارجية تابع معى :

فى قائمة Start ابحث عن Task Scheduler وهى خاصية تقوم بعمل مجموعة من الاوامر فى اوقات محددة مثل تشغيل برنامج او اغلاقه او ارسال ايميل مثلا الخ... هذه صورة الواجهة

0.PNG.e58669f3105b1c0badc287a2604fee55.PNG

اضغط على Create Basic Task وستفتح لك الواجهة التالية :

1.PNG.21323bfa7dbdcdbfc31c8e68751e517f.PNG

اكتب اسم المهمة المطلوبة ثم Next :

2.PNG.bf8dc79277f9fe9cd92d45f171636da4.PNG

هنا تكرار المهمة يوميا - اسبوعيا - شهريا - مرة واحدة - عند بداية التشغيل للجهاز - عندما اسجل دخول المستخدم - عند حدوث حدث معين . اختر ما يناسبك وفى حالتنا اخترت Daily يومياً .

3.PNG.81cdd30461d8a7809b22590932595262.PNG

اختر تاريخ بداية العمل و الوقت المطلوب تشغيل المهمة فيه .التالى

3-2.PNG.5506c1b30eb773aaf12daef5c376fde5.PNG

فى هذه الخطوة تختار ماهية المهمة فتح برنامج معين - ارسال ايميل - عرض رسالة محددة .. اختر Start Program فى حالتنا .. التالى

4.PNG.dd82e90ae9712dd35b125927715c3a14.PNG

فى هذه الخطوة تقوم باختيار مسار البرنامج المطلوب تشغيله وطبعا فى هذه الحالة البرنامج هو ميكروسوفت اكسس يتم تحديد مسار البرنامج من "C:" ثم تحديد القاعدة المطلوب تشغيلها فى Arguments بنفس الصيغة الموجودة بالصورة (بين علامتين تنصيص والمسار كامل بالامتداد )

#Program/Script
"C:\Program Files\Microsoft Office\Office16\MSACCESS.EXE"
#Arguments
"C:\Users\Amr\Access\Backup\Tasker.Accdb"

ثم اضغط على Finish. وبهذا قمنا بعمل مهمة للويندوز انه يفتح القاعدة الخاصة بنا فى وقت معين يومياً ,, باقى العمل داخل القاعدة نفسها كالتالى :

فى حدث عند الفتح للنموذج ستجد الكود التالى :

Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acFirst
Me.To2 = [to] & "\" & [newnm] & " "
Call SixHatHideWindow(SW_SHOWMINIMIZED)
'Call Copy_Folder1 '''' نقوم بتفعيل الخيار بعد تحديد الخيارات فى النموذج اول مرة لتعمل بتلقائية فيما بعد
'DoCmd.Quit '''' نقوم بتفعيل الخيار بعد تحديد الخيارات فى النموذج اول مرة لتعمل بتلقائية فيما بعد
End Sub

السطرين الغير مفعلين يتم تفعليهم بعد تحديد الخيارات الخاصة بيك من النموذج اول مرة وعند تفعيلهم بمجرد تشغيل القاعدة ستقوم بعملية النسخ وتغلق تلقائياً  ..

وبالتالى ملخص الفكرة ان القاعدة هتكون مغلقة وهتقوم مهمة الويندوز بتشغيلها وعند تشغيلها ستقوم بعمل النسخ الاحتياطى بالبيانات التى تم تحديدها اول مرة ثم تغلق تلقائياً وذلك فى اقل من ثانية قد لا تلاحظها من الاساس .

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

ملحوظة : يمكن عمل المهمة الخاصة بالويندوز عن طريق اسكريبت VBS اختصارا للخطوات ولكن اردت شرح الفكرة من أساسها ويكون هناك مساحة للتطوير فيما بعد .

 

BackupManual+Auto+Timer-AmrAshraf.accdb 812 kB · 19 downloads

 

الان, ahmus said:

عمل رائع مهم واتساءل هل يمكن عمل نسخة لاكثر من مجلد 

 

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

14 دقائق مضت, ahmus said:

عمل رائع مهم واتساءل هل يمكن عمل نسخة لاكثر من مجلد 

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

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

السلام  عليكم 

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

تم تعديل بواسطه ahmus
رابط هذا التعليق
شارك

24 دقائق مضت, ahmus said:

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

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

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

تحياتي اخي Amr Ashraf

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

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

2 دقائق مضت, ahmus said:

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

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information