20/04/2025
احد الزملاء سال وشات جى بى تى يجيب
السؤال:
"ليه بيظهر عندنا أكتر من نسخة من ملف الأكسس، وبيبقى مكتوب جنبها Backup أو Backup1؟
وهل نكمل الشغل على الملف الأساسي، ولا على النسخة دي؟
خصوصًا إنها بتظهر بعد ما البرنامج بيقفل فجأة ويرجع يفتح تاني لوحده."
🔷 الإجابة:
أهلاً وسهلاً بحضرتك،
سؤالك مهم جدًا، وبيواجهه كتير من الزملاء اللي شغالين على Microsoft Access، واسمحلي أوضح لحضرتك الموضوع بشكل بسيط ومنظّم.
✅ أولاً: ليه بتظهر نسخ Backup؟
السبب الرئيسي في ظهور النسخ دي هو إن البرنامج اتقفل فجأة بطريقة غير سليمة – سواء بسبب:
مشكلة في الجهاز نفسه (تهنيج أو Restart مفاجئ)،
أو مشكلة في البرنامج (كود شغال ومقفّلش كويس)،
أو حتى قطع في الكهرباء.
Access بيحاول يحمي بياناتك، فبيعمل نسخة تلقائية من الملف علشان لو فيه تغييرات ما كنتش لحقت تحفظها، ما تروحش عليك.
النسخ دي بيكون اسمها:
اسم الملف - Backup.accdb
أو Backup1, Backup2 لو حصلت أكتر من مرة.
🔎 ثانيًا: أشتغل على أنهي ملف؟
علشان تتأكد إيه النسخة الصح تشتغل عليها، حضرتك ممكن تعمل الآتي:
بص على تاريخ التعديل (Modified Date):
شوف أي نسخة تم تعديلها في آخر وقت. النسخة الأحدث هي اللي غالبًا فيها آخر شغل حضرتك عملته.
افتح النسخ وقارن المحتوى:
افتح كل نسخة، وبص على الجداول والنماذج والتقارير.
لو لقيت نسخة فيها بيانات كنت ضايفها ولسه مش موجودة في الملف الأساسي → يبقى هي دي اللي تكمل عليها.
لو النسخة ناقصة حاجات أو فيها بيانات قديمة → يبقى تكمّل شغلك على النسخة الأصلية.
لو اعتمدت النسخة الاحتياطية،
يُفضّل تعيد تسميتها وترجعها لاسم الملف الأصلي، علشان الدنيا ما تبقاش ملخبطة بعدين.
💡 ثالثًا: نصيحة مهمة جدًا لحضرتك وللزملاء:
لو الإغلاق المفاجئ بيتكرر كتير، يبقى ضروري نعمل نسخة احتياطية تلقائية من الملف كل مرة نفتحه فيها.
وده ممكن يتعمل بكود بسيط في VBA، يحفظ نسخة من الملف في مجلد معين بتاريخ اليوم والساعة، بحيث تقدر ترجع لأي نسخة في أي وقت.
لو تحب، أجهزلك الكود ده بالكامل، ومعاه شرح إزاي تضيفه لقاعدة البيانات خطوة بخطوة.
📌 الخلاصة:
💭 البند 💡 التوضيح
سبب ظهور النسخة Backup البرنامج بيعمل كده تلقائي لما يقفل فجأة، كنوع من الحماية
أشتغل على أنهي نسخة؟ شوف الأحدث من حيث التاريخ والمحتوى، وقارن بين النسخ
إزاي أتجنب تكرار المشكلة؟ نستخدم كود VBA يعمل نسخة احتياطية أوتوماتيك
أهو الكود اللي هيعمل نسخة احتياطية من ملف قاعدة البيانات (Access Database) بشكل تلقائي **كل مرة تفتح فيها الملف**، وهيحفظ النسخة بتاريخ اليوم والساعة في مجلد بتحدده حضرتك.
---
# # 🔧 أولًا: الكود – نسخة VBA لإنشاء باك أب تلقائي
```vba
'==============================
'📁 هذا الكود يتم تنفيذه عند فتح قاعدة البيانات
'يقوم بإنشاء نسخة احتياطية تلقائية من الملف الحالي
'==============================
Sub CreateDatabaseBackup()
Dim sourceFile As String
Dim backupFolder As String
Dim backupFile As String
Dim fileName As String
Dim timeStamp As String
'📍 مسار الملف الحالي
sourceFile = Application.CurrentProject.FullName
'📁 اسم الملف بدون الامتداد
fileName = Left(Application.CurrentProject.Name, Len(Application.CurrentProject.Name) - 6)
'🕓 تاريخ ووقت النسخة (بتنسيق YYYY-MM-DD_HH-MM-SS)
timeStamp = Format(Now, "yyyy-mm-dd_hh-nn-ss")
'📁 مسار مجلد النسخ الاحتياطي - عدّله حسب رغبتك
backupFolder = "C:\Access_Backups\" '⬅️ يمكن تغييره إلى أي مجلد آخر
'📌 تأكد إن المجلد موجود، لو مش موجود يتم إنشاؤه
If Dir(backupFolder, vbDirectory) = "" Then
MkDir backupFolder
End If
'📄 اسم النسخة الاحتياطية
backupFile = backupFolder & fileName & "_Backup_" & timeStamp & ".accdb"
'📤 نسخ الملف الحالي إلى النسخة الاحتياطية
FileCopy sourceFile, backupFile
'✅ رسالة تأكيد اختيارية
' MsgBox "تم إنشاء نسخة احتياطية بنجاح: " & vbCrLf & backupFile, vbInformation
End Sub
```
---
# # ⚙️ ثانيًا: طريقة تفعيل الكود تلقائيًا عند فتح قاعدة البيانات
# # # الخطوة 1️⃣: فتح محرر VBA
- افتح قاعدة البيانات.
- اضغط `ALT + F11` لفتح محرر الأكواد.
# # # الخطوة 2️⃣: إنشاء وحدة نمطية (Module)
- من القائمة: **Insert > Module**
- الصق الكود أعلاه بالكامل داخلها.
- احفظ الوحدة باسم مثلاً: `modBackup`
# # # الخطوة 3️⃣: تشغيل الكود عند فتح قاعدة البيانات
عندك طريقتين:
---
# # # # الطريقة الأولى: **استخدام ماكرو AutoExec**
1. من Access، أنشئ ماكرو جديد.
2. أول إجراء في الماكرو:
- **الإجراء (Action):** `RunCode`
- **اسم الدالة:** `CreateDatabaseBackup()`
3. احفظ الماكرو باسم: `AutoExec`
(ده اسم خاص بيشغّل الماكرو تلقائيًا عند فتح الملف)
---
# # # # الطريقة الثانية: **تشغيله من نموذج بدء التشغيل (Startup Form)**
لو عندك نموذج بيتفتح أول ما تفتح الملف:
1. افتح النموذج في وضع التصميم.
2. اضغط بزر الماوس الأيمن واختر **Properties**.
3. في حدث **On Load** (عند التحميل)، اختَر `[Event Procedure]`، واضغط على زر `...`.
4. اكتب داخل الإجراء:
```vba
Private Sub Form_Load()
CreateDatabaseBackup
End Sub
```
---
# # 📂 مثال على اسم الملف الناتج:
```
C:\Access_Backups\MyDatabase_Backup_2025-04-20_11-32-45.accdb
```
---