تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
استخدام DataControl للربط مع قواعد البيانات في فيجوال بيسك - الجزء الثاني
#2
والآن سوف تظهر لدينا بعض المشاكل :
* كيف ستستدعي الاجراء

Call Sub الخاص بالعدد عند تشغيل البرنامج ، جرب كتابة الأمر في حدث Form_Load ولاحظ ظهور رسالة الخطأ .

* إذا اهتديت إلى الطريقة ... لاحظ أنه في المرة الأولى - فقط - سوف يعطيك


Record 1 Of 1 .

* لو حذفت سجل 3 مثلاً فهذا يعني أن الأرقام ستصبح 1 2 4 5 6 7 8 ، وسيعطيك الفورم في آخر سجل


Record 8 Of 7 .

لماذا ؟ لانه يقرأ القيم الموجودة في قاعدة البيانات بغض النظر عن مكانها الفعلي .


بالنسبة لمشكلة عدم عمل الكود الخاص بعرض عدد السجلات في حدث Form_Load فهذا طبيعي ، ذلك أننا سوف نضع الكود بمجرد تحميل الفورم وقبل انشاء كائن Data1 ... لذا سوف نستعيض عنه بحدث Form_Initialize ... ليصبح الكود بالشكل التالي :


Private Sub Form_Initialize


()

State
End Sub


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


Private Sub Form_Initialize


()

Data1.Recordset.MoveLast
Data1.Recordset.MoveFirst
State
End Sub


أما المشكلة الأخيرة فسوف نتعرف على حل لها لاحقاً .


والآن لننتقل إلى الاضافة ، وتعديل محتويات سجل ، اضافة إلى حذف سجل .

إن من عيوب أداة


DataControl هو أنها - على الرغم من سهولتها - إلا أنها أقل في التحكم الذي تمنحه لمبرمج البرنامج .


إذا كنت قد تصفحت وظائف وخصائص RecordSet في أداة DataControl لكنت قد وجدت وظيفة واضحة جداً هي AddNew .
كل ما عليك هو كتابة أمر بهذا الشكل :

Data1.Recordset.AddNew


جرب عمل زر بهذا الشكل ، سوف ينتهي الأمر مباشرة .

بعد الضغط على زر ( New ) سوف تفرغ لك الحقول ، اضف ما تريد ثم انقر أي من أزرار التنقل ... انتقل إلى السجل الأخير وستجد سجلك موجوداً .
هذه الطريقة ليست عملية ، ولكنها أسهل طريقة للاضافة .
وتذكر أن هناك العديد من الحلول لتحسين عمل DataControl أسهل هذه الحلول وأقواها هو عدم استخدامها ، وتركها إلى غيرها من الطرق الأخرى .
ولقد أحببت أن أبدأ بها لأنها بسيطة جداً وجيدة لتوضيح بعض المفاهيم .


التعديل :
كل ما عليك هو التعديل في السجل الحالي ، ومن ثم الضغط على زر ( Update ) والذي سوف تضع فيه الأمر التالي :

Data1.Recordset.Update



الحذف :
نضع أولاً في زر الحذف الأمر التالي :

Data1.Recordset.Delete


لا تنس بعد عملية الحذف أن تتنقل إلى السجل التالي كيلا تبقى في سجل فارغ

Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then Data1.Recordset.MoveLast
State


*** والآن إلى حل مشكلة الترقيم .
من المفضل غالباً اعطاء خاصية الترقيم حقلاً من نوع - ترقيم تلقائي - حيث لا يتعبك هذا الأمر في عمليات الاضافة والحذف . ولكنها فرصة للتعرف على حلقات التكرار من خلال الفيجوال بيسك على السجلات . ولهذا سوف نترك الحقل كما هو ونحاول ايجاد طريقة اخرى للحل .

لحل مثل هذا الأمر سوف نقوم بعمل اجراء يقوم باعطاء الجميع ارقاماً مميزة بعد كل عملية حذف أو اضافه وكذا تعديل ، كذا الأمر مع تشغيل البرنامج .

*** لاحظ أننا نعمل على أساس أنه ليس لدينا سوى الجدول الأول ، ولكن إذا كنا نعمل مع علاقات مع الجداول الأخرى فلن يكون هذا الأمر صحيحاً ، بل سيؤدي فعلياً إلى حدوث كارثة !


لنعد الآن إلى مكونات هذا الإجراء :
سوف نقوم بالدوران على كافة السجلات لاعطائها رقماً تسلسلياً صحيحاً ... تذكر ما يلي :
recordcount


: تعطينا عدد السجلات .

Fields("index


") : خاصية تحتوي على قيمة الحقل في السجل الحالي .


والآن لنر هذا الأمر :





كود :
[align=left]Sub Order()
If Data1.Recordset.RecordCount <> 0 Then Data1.Recordset.MoveFirst
For I = 0 To Data1.Recordset.RecordCount - 1
Data1.Recordset.Edit
Data1.Recordset.Fields("NUMBER") = I + 1
Data1.Recordset.Update
Data1.Recordset.MoveNext
Next I
If Data1.Recordset.RecordCount <> 0 Then Data1.Recordset.MoveFirst
End Sub[/align]
1- يتأكد الأجراء من وجود بيانات في قاعدة البيانات ، ومن ثم ينتقل إلى السجل الأول .
2 - 7 : حلقة تكرارية تقوم بما يلي :
* تحرير السجل الحالي .
* تغيير الرقم الخاص به إلى الرقم الحالي في


i .

* تحديث السجل .
* الانتقال للسجل التالي .
8 - الانتقال مرة أخرى إلى السجل الأول .


سوف نضيف هذا الكود بعد عملية الحذف . ومع كل تشغيل للبرنامج ، اضافة إلى أننا سوف نقوم باغلاق التحكم في مربع الترقيم التلقائي عند الاضافة والتعديل .

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

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


والملف موجود في المرفقات ...


والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .



الملفات المرفقة
.zip   our prog.zip (الحجم : 10.55 ك ب / التحميلات : 134)
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
استخدام DataControl للربط مع قواعد البيانات في فيجوال بيسك - الجزء الثاني - بواسطة Raggi Tech - 14-10-12, 02:29 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  برنامج فيجوال 6 لايفتح قاعدة بيانات بالاكسس جبران جابر 3 434 15-07-24, 03:49 PM
آخر رد: جبران جابر
  طريقة لمعرفة عدد السجلات في قاعدة البيانات princeofislam 2 3,318 18-01-24, 11:34 AM
آخر رد: علي جابر
  طريقة تشغيل فيجوال بيسك6 على وندوز7 ahmed3d 6 6,115 05-12-22, 06:49 AM
آخر رد: Ergheegh2022
  كيفية التعامل مع دوال الوقت و التاريخ و كيفية تنسيقهما فى الفجوال بيسك 6 the viper 9 12,243 22-11-18, 01:13 PM
آخر رد: next
  طلب شرح اخذ نسخة احتياطية من قاعدة البيانات DIGTAL 2 4,784 31-07-13, 03:14 AM
آخر رد: طارق بيتا
  شرح للمتغيرات و الثوابت و المعاملات في الفيجول بيسك Ahmad Jawad 5 65,616 12-06-13, 01:14 AM
آخر رد: بلحسين الدين
  طريقة استخدام الاداه actskin بالتفصيل Ahmad Jawad 3 4,787 03-12-12, 07:54 PM
آخر رد: الميسري
  استخدام DataControl للربط مع قواعد البيانات في فيجوال بيسك - الجزء الأول RaggiTech 0 4,067 14-10-12, 02:26 PM
آخر رد: RaggiTech
  استخدام أداة التقارير DataReport من خلال الفيجوال بيسك 6.0 RaggiTech 0 8,355 14-10-12, 02:21 PM
آخر رد: RaggiTech
  درس سريع - اللغة العربية في فيجوال بيسك RaggiTech 0 4,889 14-10-12, 02:19 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم