يمكن تخزين الملفات المستخدمة في البرنامج مثل ملفات الصوت وملفات الصور في قاعدة البيانات بعدة طرق، مما يحقق لبرنامجك أماناً أكثر، كما يقلل عدد الملفات المستخدمة في البرنامج، خاصة إذا كنت تستخدم أحد برامج التحزيم التي تقوم بدمج مكتبات الربط وأدوات الأكتف إكس داخل الملف التنفيذي للبرنامج، بهذا يصل عدد ملفات برنامجك إلى ملفين فقط هما: الملف التنفيذي وقاعدة البيانات.
تخزين الملفات:
1- نقوم بإنشاء قاعدة بيانات جديدة من خلال برنامج مايكروسوفت أكسس، ثم ننشئ بداخلها جدولاً باسم Files يتكون من حقلين:
- حقل ترقيم تلقائي باسم ID (ولا تنس أن تجعله مفتاحاً أساسياً)
- حقل من نوع (كائن OLE) باسم Files.
2- نقوم بإنشاء مشروع جديد في الفيجوال بيسيك من النوع القياسي Standard ونضبط اسم المشروع على FileManager، ونضبط خواص النموذج كالتالي:
الاسم Name: frmMain، نمط الإطار BorderStyle: Fixed Single (حيث إن النموذج يحتوي على أزرار أوامر لذلك لا يجب أن يترك حجمه قابلاً للتغيير)، العنوان Caption: "إدارة ملفات البرنامج"، الارتفاع Height: 1200، الرمز Icon: أي رمز مناسب، زر التصغير MinButton: True، اليمين لليسار RightToLeft: True، موضع بدء التشغيل Startup Position: في وسط الشاشة Center Screen،.
3- نقوم بإدراج مكتبة قاعدة البيانات Microsoft ActiveX Data Objects 2.8 Library فى المشروع، من خلال الأمر "مراجع" References في قائمة "المشروع" Project.
4- نقوم بإضافة أداة مربع الحوار العام Microsoft Common Dialog Control بواسطة الأمر "مكونات" Components في قائمة "المشروع" Project
ثم نقوم بضبط خواصها كالتالي:
الاسم Name:cdlFiles، خطأ إلغاء الأمر CancelError: True (وذلك لتلافي الأخطاء الناتجة عن اختيار المستخدم للزر إلغاء الأمر في مربع الحوار"، المرشح Filter: " All Files|*.*".
4- نقوم بإضافة زر أمر Command Button باسم Name: cmdInsertFile وعنوان Caption: "إدراج ملف" لإدراج ملف في قاعدة البيانات (سنقوم بعد ذلك بمناقشة إدراج عدة ملفات صوت في قاعدة البيانات وذلك في حالة وجود عدد من الملفات لا يمكن إدراجه بهذه الطريقة).
5- نقوم بفتح نافذة الكود للنموذج، ونتجه إلى قسم التصريحات العامة General، ونضع فيع المتغيرات التالية:
Dim con As New Connection Dim rs As New Recordset Dim Path As String[
حيث con هو عنصر الاتصال بقاعدة البيانات، و rs هو عنصر مجموعة السجلات التي سوف نستخدمه في فتح الجدول، و Path هو المتغير الذي سوف نستخدمه في تحديد مسار قاعدة البيانات.
6- نقوم بإنشاء حدث لتحميل النموذج ونضع فيه الشفرة التالية:
Private Sub Form_Load() Path = App.Path If Right(Path, 1) <> "\" Then Path = Path + "\" con.Provider = "MICROSOFT.JET.OLEDB.4.0" con.Open Path & "DB.MDB" rs.Open "Files", con, adOpenKeyset, adLockOptimistic End Sub
7- والآن جاء دور زر الأمر: نقوم بإضافة زر أمر من مربع الأدوات باسم Name: cmdInsertFile وعنوان Caption: "إدراج ملف"، ثم نقوم بإنشاء حدث للنقر عليه، ونضع فيه الشفرة التالية:
Private Sub cmdInsertFile_Click()
Dim FN As String
Dim FF As Long
Dim B() As Byte
cdlFiles.DialogTitle = "فتح ملف"
On Error GoTo CancelError
cdlFiles.ShowOpen
FN = cdlFiles.FileName
If FN = "" Then Exit Sub
FF = FreeFile
Open FN For Binary As FF
ReDim B(LOF(FF))
Get FF, , B
Close FF
rs.AddNew
rs("Files") = B
rs.Update
Exit Sub
CancelError:
End Subحيث FN هو المتغير الذي سوف نستخدمه في تخزين اسم الملف، و FF هو المتغير الذي سوف نلتقط فيه رقم أول ملف خالي في الفيجوال المشروع، و B هي مصفوفة البيانات من النوع الثنائي التي سوف نخزن فيها محتويات الملف المطلوب تمهيداً لإدراجه في قاعدة البيانات، أما العنوان CancelError المشار إليه، فهو عنوان السطر الذي نقوم بتوجيه المترجم إليه ليبدأ منه تنفيذ الأوامر في حالة حدوث خطأ ناتج عن قيام المستخدم باختيار زر الأمر "إلغاء الأمر" في مربع الحوار، والذي لا يوجد بعده أوامر سوى إنهاء الإجراء، ثم قمنا بعد ذلك بضبط خاصية عنوان مربع الحوار على عبارة "فتح ملف" بالخاصية DialogTitle، ومن ثم قمنا باستدعائه لفتح ملف بالطريقة ShowOpen، وتخزين اسم الملف الناتج عنه في المتغير FN، ثم قمنا بفتح الملف في الوضع الثنائي بالرقم المخزن في المتغير FF بالأمر Open، أما الكلمة المحجوزة Redim فقد استخدمناها لتوسيع نطاق عناصر المصفوفة B ليكون مساوياً لعدد الوحدات بالبايت Byte المطابقة لطول الملف المطلوب، وذلك ضروري لتخزين كافة محتويات الملف في المصفوفة، ثم قمنا بتخزين محتوياته في المصفوفة B، ومن ثم إغلاقه بعد ذلك بالأمر Close، ثم قمنا بإضافة سجل جديد إلى مجموعة السجلات rs بالطريقة AddNew، وتخزين قيمة المصفوفة B في الحقل "Files"، وتحديث مجموعة السجلات بعد ذلك بالطريقة Update.
وبهذا نكون قد انتهينا أخيراً من تخزين الملف في قاعدة البيانات، ولم يبق لنا إلا استرجاعه وتجربته للتأكد من سلامة الخطوات.
8- نقوم بإضافة زر أمر آخر باسم Name: cmdRestoreFile وعنوان Caption: "استرجاع ملف"، ثم نقوم بإنشاء حدث للنقر عليه، ونضع فيه الشفرة التالية:
Private Sub cmdRestoreFile_Click()
Dim FN As String
Dim FF As Long
Dim B() As Byte
cdlFiles.DialogTitle = "حفظ ملف"
On Error GoTo CancelError
If rs.EOF Then Exit Sub
cdlFiles.ShowSave
FN = cdlFiles.FileName
If FN = "" Then Exit Sub
B = rs("Files")
FF = FreeFile
Open FN For Binary As FF
Put FF, , B
Close FF
Exit Sub
CancelError:
End Subوفيه نكرر معظم الخطوات السابقة في إدراج الملف مع تغيير بسيط:
- تغيير عنوان مربع الحوار إلى "حفظ ملف"، واستدعاؤه لحفظ الملفات بالطريقة ShowSave، كما أنه تم اختبار مجموعة السجلات rs للتأكد من عدم خلوها من السجلات بخاصية نهاية الملف EOF التابعة لها، كما أننا استغنينا عن عملية تعديل حجم المصفوفة الثنائية B لعدم الحاجة إلى ذلك الآن، وقمنا بتخزين قيمة الحقل "Files" في هذه المصفوفة، ثم قمنا بدورنا بتخزين محتويات المصفوفة في الملف الجديد الذي قمنا بحفظه عن طريق الأمر Close، وبهذا نكون قد انتهينا سريعاً من عملية استرجاع الملف، وما علينا الآن سوى تجربته في المكان الذي قمنا بتخزينه فيه داخل جهاز الكمبيوتر.
والآن جاء دورك عزيزي القارئ في تجربة البرنامج، ولا تنس الدعاء لي.
ولم يبق لنا سوى مناقشة التعامل مع كمية كبيرة من الملفات، سوف نناقشها في لقاء آخر إذا أحيانا المولى عز وجل.
مع تحياتي.
