بسم الله الرحمن الرحيم
أهلا وسهلا بكم أخوانى الكرام.... اليوم أقدم لكم درس جديد لنتعلم سوية كيف حفظ الصورة فى حقل ما داخل أحد جدوال قاعدة بيانات أكسس ....وذلك على النحو التالى :
الخطوة الاولى : قم بإنشاء قاعدة بيانات و ليكن BLOB مثلا و بها جدول و ليكن employee مثلا ...ثم انشىء الحقول التى ترغب فيها مع مراعاة أن يكون الحقل الذى سوف يتم حفظ الصورة فية من نوع OLE Object كما فى الصورة التالية :
الخطوة الثانية : قم بفتح الفجوال بيسك ثم أختيار مشروع جديد ...وقم بأنشاء نافذة كما فى الشكل التالى أو كما يحلو لك :
الخطوة الثالثة : قم بأدراج المكتبة Microsoft ActiveX Data Objects 2.5 Library فما فوق ...لانك لو أستخدمت أقل من هذا الاصدار لن تستطيع حفظ الصورة أو أسرجاعها
الخطوة الرابعة : قم بأدراج الاداة Microsoft Common Dialog Control 6.0 لاستعراض الصورة من جهازك .
الخطوة الخامسة : كتابة الاكواد لحفظ الصورة فى قاعدة البيانات وذلك على النحو التالى :
1_ فى قسم التصريحات نقوم بكتابة الاكواد الخاصة بفتح قاعدة البيانات و الجدول و ايضا نقوم بتعريف متغير لحفظ مسار الصورة فية على النحو التالى :
PHP كود :
Dim cnnEmp As ADODB.Connection
Dim rsEMP As ADODB.Recordset
Dim fileName As String
2_ فى حدث الضغط على مربع الصورة Picturebox نكتب الكود التالى و ذلك لفتح المربع الحوارى لاختيار صورة من الجهاز و ذلك على النحو التالى :
PHP كود :
cdgPhoto.Filter = "(*.bmp;*.ico;*.gif;*.jpg)|*.bmp;*.ico;*.gif;*.jpg"
cdgPhoto.ShowOpen
fileName = cdgPhoto.fileName
If fileName <> "" Then
Set imgPhoto.Picture = LoadPicture(fileName)
End If
ويجب ان تلاحظ أننا فى الكود السابق حددنا أمتداد الصور و انواعها التى يجب أن تظهر للمستخدم و ذلك عن طريق الامر Filter للاداة CommonDialog ثم فتحنا المربع الحوارى ثم جعلنا المتغير fileName يساوى مسار الصورة المختارة ...و أخيرة تطبيق الصورة و اظهارها فى مربع الصورة imgPhoto
3 _ زر الامر (حفظ ) سنقوم بكتابة الكود التالى :
PHP كود :
Dim smEmp As ADODB.Stream
Set smEmp = New ADODB.Stream
smEmp.Type = adTypeBinary
smEmp.Open
smEmp.LoadFromFile fileName
If smEmp.Size > 0 Then
'Save the Employee Information
rsEMP.AddNew
rsEMP("FirstName") = txtFName
rsEMP("MiddleName") = txtMName
rsEMP("LastName") = txtLName
rsEMP("SSN") = txtSSN
rsEMP("Photo") = smEmp.Read
'Update the data
rsEMP.Update
'Clear the form
ClearFields
MsgBox "Employee Information Saved Successfully"
Else
MsgBox "The Employee's Photo is not valid"
End If
smEmp.Close
Set smEmp = Nothing
السطر الاول و الثانى ...قمنا بإنشاء الكائن stram object و الذى سيقوم بحفظ الصورة فى قاعدة البيانات
السطر الثالث و الرابع...جعل الكائن stram object من نوع بيانات ثنائى binary data وذلك لنستطيع فتح و حفظ الصورة فى تلك الهيئة .
السطر الخامس ...تحميل محتوى الصورة الى الكائن stram object
السطر السادس ...التحقق من حجم محتوى الكائن stram object فإن كان أكبر من الصفر معنى ذلك وجودة صورة بالكائن و ذلك لتفادى الخطأ فى حالة عدم أختيار صورة
الاسطر من السابع وحتى الحادى عشر ....هى فتح سجل جديد فى جدول employee و اضافة كافة حقول الجدول مثل الاسم الاول و الثانى ووالاخير حتى الصورة الخاصة بالموظف ثم حفظ تلك البيانات فى ها الجدول .
وبهذا نكون قد انتهيانا من حفظ بيانات و و صورة الموظف على النحو المبين أعلاه ....
الخطوة السادسة ...أسترجاع الصورة المخزنة فى قاعدة البيانات و ذلك عن طريق إنشاء إجراء يقوم بقرائه الصورة و التى هى على شكل بيانات ثنائية فى قاعدة البيانات ثم بعد ذلك يقوم بتحويلها وإنشاء صورة مؤقته فى مجلد البرنامج و من ثم أستخدامها فى عنصر التحكم imgPhoto وذلك على النحو التالى :
PHP كود :
Private Sub ReadPictureData()
Dim diskFile As String
diskFile = App.Path & "\temp\emp.bmp"
Dim smEmp As ADODB.Stream
Set smEmp = New ADODB.Stream
smEmp.Type = adTypeBinary
smEmp.Open
smEmp.Write rsEMP.Fields("Photo").Value
If smEmp.Size > 0 Then
smEmp.SaveToFile diskFile, adSaveCreateOverWrite
imgPhoto.Picture = LoadPicture(App.Path & "\temp\emp.bmp")
Else
MsgBox "Error reading the Photo"
End If
'Close and destroy the stream object
smEmp.Close
Set smEmp = Nothing
End Sub
قمنا بإنشاء الاجراء ReadPictureData و يحتوى على الاسطر التالية :
السطر الاول و الثانى ....قمنا بإنشاء المتغير diskFile و ذلك لحفظ المسار الذى سيحتوى على الصور المؤقتة و التى سيتم إنشائها من قاعدة البيانات .
السطر الثالث و الرابع و الخامس و السادس ......قمنا بإنشاء الكائن stram object و الذى سيقوم استرجاع الصورة من قاعدة البيانات و تحديد نوع البيانات التى تم حفظها وهى من نوع Binary
السطر السابع ...تحميل بيانات الصورة الثانية binary image المخزنة فى الحقل Photo الى الكائن stram object
السطر الثامن و التاسع ...جملة شرطية للتحقق من وجودة بيانات ثنائية فى هذا الحقل فإن تم التحقق من ذلك نجل البرنامج يقوم بتحويل تلك البيانات أو الصورة الى صورة مؤقته فى المجلد temp الموجود فى مجلد مشروعنا
السطر العاشر .... تحميل و استخدام تلك الصورة فى مربع الصورة imgPhoto
و اخيرا أغلاق الكائن stram object ومن ثم إنهاء الاجراء ....بعد ذلك يمكنك أستخدام هذا الاجراء فى حدث التنقل بين السجلات و ستجد أن لك صورة تم حفظها لموظف سيتم عرضها فى مربع الصورة imgPhoto على النحو التالى :
و اليكم المشروع فى المرفقات