تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[vb6.0] استفسار حول مكتبة DAO
#1
السلام عليكم 
منذ فترة شهر بدات دراسة فيجوال بيسك 6 
حاليا بدرس التعامل مع مكتبة DAO 
لدي عدة اسئلة الاول الكود التالي : 
كود :
Dim DB As DataBase
Dim RS As RecordSet


حسب الشرح انه DataBase و RecordSet هما كلاسين بداخل المكتبة DAO
لكن عندما نريد نحن اخذ نسخة من كلاس نكتب كلمة new بحيث الاشياء الموجوده بداخل هذا الكلاس تصبح بداخل المتغير او الاوبجكت سميه ماتسميه 
هنا تم تعريف بدون استخدام كلمة new لماذا هذا الامر ؟ 
ماهو الفرق بين استخدام كلمة new  وعدم الاستخدام ؟


السؤال الثاني : 

كود :
Private Sub Form_Load()
'DB.OpenDatabase ("test.mdb")
Set DB = OpenDatabase("test.mdb")
Set RS = DB.OpenRecordset("user", 2)
End Sub

في هذا الكود اول سطر جربت اكتب DB.OpenDatabase ("test.mdb") بما انه DB اصبح نسخه من كلاس OpenDatabase لكن للاسف لم يستطيع الوصول بهذه الطريقة 

لذلك السطر الثاني تم استخدام كلمة Set ولا اعلم ماهو فائدة هذه الكلمة ولماذا نستخدمها ؟ 
لهذا الشيئ سؤال الثاني حول استخدام كلمة Set لماذا استخدمها بالكود وماهي فائدتها 

السؤال الثالث : 

بنفس الكود السابق ماهو فائدة عملية الاسناد = بهذا الكود 
كود :
Set DB = OpenDatabase("test.mdb")

مش المفروض يكون DB اوبجكت من كلاس Database وميثود OpenDatabase بداخل هذا الكلاس ؟ يعني الوصول لها استخدام الدوت . 
لماذا استخدمنا هذه الطريقة للوصول لهذه الميثود ؟ 

السؤال الرابع : 
الكود التالي 
كود :
Set RS = DB.OpenRecordset("user", 2)

طريقة الوصول لميثود OpenRecordset هنا غريبة لانه هذه الميثود كما يقال من ضمن كلاس Recordset صح ؟ 
سؤالي كيف استطاع الاوبجكت DB من الوصول لها وهو اساسا من كلاس اخر .! 
فاهم انه بهذه الطريقة نصل الى قاعدة البيانات التي نريد التعامل معها 

المفروض كنا نقول 
كود :
RS.OpenRecordset("user",2,DB)
عارف انه الكود غلط ولكن كتفكير منطقي المفروض يكون نفس السابق نمرر ميثود ونمرر الاوبجكت الي يوجد فيه اسم قاعدة البيانات DB 


صراحة هذه الاسئلة ماوجدت لها حل 

كتطبيق تعمل بدون مشاكل لكن تطبيق كحفظ فقط وليس كفهم يعني حافظ الكود ولم افهمه طريقة الاستخدام وهذا شي غلط 
اذا ممكن توضيح هذه النقاط لي بكون شاكر لكم
الرد
تم الشكر بواسطة: Mysystem32 , Ahmed_Mansoor
#2
السلام عليكم و رحمة الله 
باختصار شديد .. 
في تقنية الـ DAO  
SET  هي عبارة عن تهيئة الكائن لاستخدامه من جديد إما في استعلام او في نص الاتصال . 
بالتالي ( كأننا نستخدم New لتفريغ المتغير و استخدامه من جديد)  
مع التأكيد بالحجز لهذا المتغير لمهمة الاتصال .
هذا بالنسبة للسؤال الاول و الثاني 

السؤال الثالث و الرابع  : 
Set DB = OpenDatabase("test.mdb")
في هذا السطر 
تم فتح قناة الاتصال بوساطة المتغير DB .

السؤال الثالث هو سؤال بجواب في آن واحد 

لاحظ : OpenDatabase  و OpenRecordest الفرق واضح 
الاول هو قناة الاتصال الى قاعدة البيانات و الثاني للجداول 
تم استخدام الدوت للضرورة لمراعاة الهيكلة التي بنيت عليها المكتبة 
بالتالي ضرورة الدوت في هذا التقنية خاصة في هذا الكود
 Set RS = DB.OpenRecordset("user", 2)
هي عبارة عن dismantling لمحتويات الميثود OpenDatabase 

بالنسبة للسؤال الرابع : 
(23-04-18, 03:06 AM)root7x7 كتب : السؤال الرابع : 
الكود التالي 
كود :
Set RS = DB.OpenRecordset("user", 2)

المفروض كنا نقول 
كود :
RS.OpenRecordset("user",2,DB)
عارف انه الكود غلط ولكن كتفكير منطقي المفروض يكون نفس السابق نمرر ميثود ونمرر الاوبجكت الي يوجد فيه اسم قاعدة البيانات DB 

  يعود ذلك لهيكلة المكتبة حيث انها ممنهجة على اسس ثابتة لا تتغير .


ان كنت تبحث عن مرونة اكثر انصح بإستخدام تقنية الـ ADO .
وَقُل رَّبِّ اغْفِرْ وَارْحَمْ وَأَنتَ خَيْرُ الرَّاحِمِينَ
الرد
تم الشكر بواسطة: root7x7 , Ahmed_Mansoor , السيد الغالي
#3
جزاك الله خير استاذ امير على التوضيح 
عاشت ايدك ماقصرت
الرد



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


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