الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أريد عملية البحث في Ado

مغلق
بدأه yasserstars في 3 يناير 2008 · 6 رد · 2,117 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني أعضاء النتدي الكرام

أريد أن أحول الأكواد الموجودة بهذا البرنامج الي أكواد تعمل مع ADo وهي كلها أكواد بحث سواء بالرقم أو التاريخ أو اسم وهي معكولة بطريقة الربط DAO واريد تحويلها الي ADO

والمثال المرفق به الأكواد ولكن كما قلت معمولة DAO

وارجو من لديه معرفة جيدة بطرق البحث في ADO أن يحول المثال كاملا لكي نتعرف جميعا علي طرق البحث في ADO

find__in_dao.rar

تم تعديل هذه المشاركة بواسطة yasserstars في 3 يناير 2008 في 01:44

#2

اخى اعهزرنى علشان انا معرفتش ارفعه على الموقع علشان مشاكل فى الجهاز واخيرا اسأل الله التوفيق ليا وليك ولجميع ان شاء الله

http://www.tntup.com/file.php?file=6f28b21...b28c204a187c076

00
 

فاضى 

 

00

#3

أشكرك أخي وائل علي مساعدتك الفعالة

بس أرجو منك أن تشرح لي الأكواد لاني مش فاهمها وانا بحاول انتقل من DAO إلي ADO

وارجو منك تصحيح كود البحث بالرقم هذا لانه ما يشتغل معي ولا أعرف ما المشكلة

فانا بقالي أكثر من ثلاث ساعات وانا أحاول فيه ولكني لم أصل لشيئ علما بان كود البحث بالتاريخ نجح تماما والبحث بالاسم

فارجو منك تصحيح الكود وشرحة كي استفيد منه بعد ذلك في برامج أخري من خلال فهمة

واشكرك مرة أخري

Private Sub Command1_Click()
Dim l As String
	l = InputBox("أدخل الرقم")
	'If l = "" Then Exit Sub
	Text1 = l

If Items.State = 1 Then Items.Close
ee = "select * from items where no=" & Val(l) & ""
Items.Open ee, mydb, adOpenDynamic, adLockPessimistic
If Items.EOF Then MsgBox "هذا الرقم غير موجود" : MSF_no_DATA : Exit Sub
MSF_DATA

End Sub
#4

Private Sub Command1_Click()

Dim l As String تعريف متغير من نوع نصي

l = InputBox("أدخل الرقم")

If l = "" Then Exit Sub

If Items.State = 1 Then Items.Close اذا كان الاتصال مفتوح يتم اغلاقه

ee = "select * from items where no=" & Val(l)جملة اسكيو ال

Items.Open ee, mydb, adOpenDynamic, adLockPessimistic الاتصال

If Items.EOF Then

MsgBox "هذا الرقم غير موجود"

else

text1.text=Items("no")

end if

End Sub

#5

أخي اريد تصحيح الكود

لان الكود به مشكلة لا يبحث عن الأرقام فقط بل ينقل كل الأرقام البيانات اللي في الجدول وانا اريد ان ينقل كل السجلات التي تحتوي علي نفس الرقم

[u]للتوضيح ان في الجدول حقل للرقم به أكثر من سجل يحمل نفس الرقم أريد عندما أبحث عن رقم معين ينقل بيانات الأرقام الموجودة والمطابقة للبحث للفليكس جريد

#6

شكر خاص الى الاخ جلال يوسف

___________________________________مكتبة ADO_____________________________________

اول حاجه ان DAO انشئة خصيصا للتعامل مع اكسيس ولكن ادو صنعة للتعامل مع كل قواعد البيانات

اولا :-

قد تم الاعلان عن CN على انه CONNECTION و RS على انه RECORDSET

هنا انا بحدد فورمات مكتبة الادو على ان القاعده التى سيتم التوصيل بها من نوع اكسيس وبعرف قاعدة البيانات التى سوف يتصل بها

"CN.OPEN"PROVIDER= MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=DB1.MDB

اما هنا انا ببتدى اعرف اسم الجدول

الربط:- يوجد طرق للربط الجداول

منها :

RS.SOURCE="TABEL.NAME"
RS.ACTIVATE CONNCTION=CN
RS.CURSOR TYPE=ADOPENKAYSET
RS.LOCKTYPE=ADLOCKOPTIMISTIC
RS.OPEN

واليك الشرح

RS.SOURCE="TABEL.NAME"- لتحديداسم الجدول المطلوب الربط عليه

RS.ACTIVATE CONNCTION=CN - لتحديد الCONNCTION

RS.CURSOR TYPE=ADOPENKAYSET - اما هنا طريقة فتح الجدول

RS.LOCKTYPE=ADLOCKOPTIMISTIC - لتعدد المستخدمين على جدول واحد

RS.OPEN - افتح الجدول

ومن طرق فتح الجدول ايضا

rs.Open "TABEL.NAME", cn, adOpenKeyset, adLockPessimistic

طريقه اخرى

rs.Open "TABEL.NAME", cn, 3, 3

اما 3 و 3 فهىvalue

-------------------------------------------------------------------------------- (راجع الى شرح فتح الجداول)

_______________________________________طريقة فتح الجدول __________________________________

يوجد اربع طرق لفتح الجدول ولكل طريقه منهم value

1) لتمرير المستخدم مره واحده فقط لاخر سجل فى الجدول من اجل الاستعلام

value(2) adOpenForwardOnly (1

2) يمر المستعلم لاعلى ولاسفل لكنه غير قادر على ان يرى التعديلات او المحذوفات او الاضافات التى حدثت فى وقت وجوده على الجدول

value(3) adOpenKeyset (2

3) يمر المستعلم لاعلى ولاسفل ولكن يستطيع ان يرى كل جديد حدث من اضافه حذف تعديل

value(1) adOpenDynamic (3

4) يُأخذ نسخه من الجدول للمستعلم وقد ادى ذالك الى عدم رؤية اى تجديدات او تحديثات من الاضافه والحذف والتعديل

4)value(4) adOpenStatic

----------------------------------------------------------------------------------------------------------------------------------------

____________________________________لتعدد المستخديمن______________________________________

ويوجد اربع طرق ايضا

1) لفتح الجدول للمستخدم استعلام \ قراءه فقط ولايمكن ان يقوم بالحذف او بالاضافه او التعديلات

1) value(4) adLockReadOnly

2) يستطيع المستخدم ان يقوم بالقراءه والكتابه واذا كان على الشبكة اكثر من مستخدم ومستخدم منهم يقوم بالتعديل فلا يصلح لمستخدم اخر ان يقوم بفتح الجدول الا بعد الانتهاء من التعديل على الجدول

2) value(3) adLockPessimistic

3) الكل يستطيع ان يرى البيانات وبالفرض يوجد ثلاثه على الجدول واحد يعد والاخر يستعلم والثالث يعدل ايضا اما فى حالة ضغط المستخدم الاول على update فلا يصلح للمستخدم الثالث التعديل الا بعد انتهاء المستخدم الاول والعكس

3) value(2) adLockOptimistic

4) مثلها مثل adLockOptimistic ولكن الفرق انه تحتاج الى بـupdate bath لكنها مش موضوعنا

4) value(1) adLockBatchOptimistic

----------------------------------------------------------------------------------------------------------------------------------------

اما فى التعديل dao يجد بها edit تستطيع ان تعدل من خلالها اما هنا فى ado فلا ويكفيك فى التعديل هذا الكود

rs("item1") = Text1

rs("item2") = Text2

rs.Update

من غير rs.addnew

----------------------------------------------------------------------------------------------------------------------------------------

اما فى الاستعلامات فأن dao تسطيع ان تأتى بالجدول من اوله الى اخره اما ado فلا

dao) rs.findfirst

ado )rs.movefirst

rs.find

----------------------------------------------------------------------------------------------------------------------------------------

ملحوظه هامه :من الاخطاء التى حدثت معايا(عند فتح الجدول بالطريقه التانيه والثالثه يعطيك قيمه الجدول عند حذف جميع محتوياته -1 لتفادى هذا الخطأ وضح CursorLocation )

بمعنى عندما الجدول لايوجد فيه ولا سجل القيمه تقول بأن القيمه -1 فهذا طبعا تشتيت عقل

ولكن الكود اذا اردته ان يتم كما تريد اليك

 
rs.CursorLocation = adUseClient 'موقع القاعده على الجهاز 
rs.Open "tabel.name", cn, adOpenDynamic, adLockPessimistic

ولكن استخدام جمل select جميل جميل لدرجه كبيره جدا

لفتح الجدول

if rs.state=1 then rs.close ' تأكد من ان الجدول مغلق اما اذا كان مفتوح فعليك بأغلاقه  
wael="select * from tabel.name "
rs.open wael,cn,1,3

اما الاستعلام

abed = "select * from tabel.name where item1='" & Text1.Text & "'"
rs.Open abed, cn, adOpenDynamic, adLockPessimistic
If rs.EOF Then ' اما هنا انا بشرط عليه اذا كان قد طاف به المطاف الى اخر سجل اذاً فإن هذا الاستعلام غير موجود 
MsgBox "لايوجد هذا الاستعلام  "
Exit Sub
Else
MsgBox "تم ايجاد الاستدعاء "
End If

اخوانى اى اخطاء ارجو التوضيح والافاده ان شاء الله

________________________________________________________________________________

_____

- واعزرونى ياأخوانى معايا شوية مشاكل مع النسخه بخلصها فى المحكمه وذالك أدى الى عدم استخدامى للادوات الموجوده على الموقع

- واخيرا وليس اخرا ارجوا من الله عزوجل ان يوفقنى ويوفقكم ويوفق جميع المسلمين الى كل خير

اقتباس
امين

شكر خاص الى الاخ جلال يوسف

___________________________________مكتبة ADO_____________________________________

اول حاجه ان DAO انشئة خصيصا للتعامل مع اكسيس ولكن ادو صنعة للتعامل مع كل قواعد البيانات

اولا :-

قد تم الاعلان عن CN على انه CONNECTION و RS على انه RECORDSET

هنا انا بحدد فورمات مكتبة الادو على ان القاعده التى سيتم التوصيل بها من نوع اكسيس وبعرف قاعدة البيانات التى سوف يتصل بها

"CN.OPEN"PROVIDER= MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=DB1.MDB

اما هنا انا ببتدى اعرف اسم الجدول

الربط:- يوجد طرق للربط الجداول

منها :

RS.SOURCE="TABEL.NAME"
RS.ACTIVATE CONNCTION=CN
RS.CURSOR TYPE=ADOPENKAYSET
RS.LOCKTYPE=ADLOCKOPTIMISTIC
RS.OPEN

واليك الشرح

RS.SOURCE="TABEL.NAME"- لتحديداسم الجدول المطلوب الربط عليه

RS.ACTIVATE CONNCTION=CN - لتحديد الCONNCTION

RS.CURSOR TYPE=ADOPENKAYSET - اما هنا طريقة فتح الجدول

RS.LOCKTYPE=ADLOCKOPTIMISTIC - لتعدد المستخدمين على جدول واحد

RS.OPEN - افتح الجدول

ومن طرق فتح الجدول ايضا

rs.Open "TABEL.NAME", cn, adOpenKeyset, adLockPessimistic

طريقه اخرى

rs.Open "TABEL.NAME", cn, 3, 3

اما 3 و 3 فهىvalue

-------------------------------------------------------------------------------- (راجع الى شرح فتح الجداول)

_______________________________________طريقة فتح الجدول __________________________________

يوجد اربع طرق لفتح الجدول ولكل طريقه منهم value

1) لتمرير المستخدم مره واحده فقط لاخر سجل فى الجدول من اجل الاستعلام

value(2) adOpenForwardOnly (1

2) يمر المستعلم لاعلى ولاسفل لكنه غير قادر على ان يرى التعديلات او المحذوفات او الاضافات التى حدثت فى وقت وجوده على الجدول

value(3) adOpenKeyset (2

3) يمر المستعلم لاعلى ولاسفل ولكن يستطيع ان يرى كل جديد حدث من اضافه حذف تعديل

value(1) adOpenDynamic (3

4) يُأخذ نسخه من الجدول للمستعلم وقد ادى ذالك الى عدم رؤية اى تجديدات او تحديثات من الاضافه والحذف والتعديل

4)value(4) adOpenStatic

----------------------------------------------------------------------------------------------------------------------------------------

____________________________________لتعدد المستخديمن______________________________________

ويوجد اربع طرق ايضا

1) لفتح الجدول للمستخدم استعلام \ قراءه فقط ولايمكن ان يقوم بالحذف او بالاضافه او التعديلات

1) value(4) adLockReadOnly

2) يستطيع المستخدم ان يقوم بالقراءه والكتابه واذا كان على الشبكة اكثر من مستخدم ومستخدم منهم يقوم بالتعديل فلا يصلح لمستخدم اخر ان يقوم بفتح الجدول الا بعد الانتهاء من التعديل على الجدول

2) value(3) adLockPessimistic

3) الكل يستطيع ان يرى البيانات وبالفرض يوجد ثلاثه على الجدول واحد يعد والاخر يستعلم والثالث يعدل ايضا اما فى حالة ضغط المستخدم الاول على update فلا يصلح للمستخدم الثالث التعديل الا بعد انتهاء المستخدم الاول والعكس

3) value(2) adLockOptimistic

4) مثلها مثل adLockOptimistic ولكن الفرق انه تحتاج الى بـupdate bath لكنها مش موضوعنا

4) value(1) adLockBatchOptimistic

----------------------------------------------------------------------------------------------------------------------------------------

اما فى التعديل dao يجد بها edit تستطيع ان تعدل من خلالها اما هنا فى ado فلا ويكفيك فى التعديل هذا الكود

rs("item1") = Text1

rs("item2") = Text2

rs.Update

من غير rs.addnew

----------------------------------------------------------------------------------------------------------------------------------------

اما فى الاستعلامات فأن dao تسطيع ان تأتى بالجدول من اوله الى اخره اما ado فلا

dao) rs.findfirst

ado )rs.movefirst

rs.find

----------------------------------------------------------------------------------------------------------------------------------------

ملحوظه هامه :من الاخطاء التى حدثت معايا(عند فتح الجدول بالطريقه التانيه والثالثه يعطيك قيمه الجدول عند حذف جميع محتوياته -1 لتفادى هذا الخطأ وضح CursorLocation )

بمعنى عندما الجدول لايوجد فيه ولا سجل القيمه تقول بأن القيمه -1 فهذا طبعا تشتيت عقل

ولكن الكود اذا اردته ان يتم كما تريد اليك

 
rs.CursorLocation = adUseClient 'موقع القاعده على الجهاز 
rs.Open "tabel.name", cn, adOpenDynamic, adLockPessimistic

ولكن استخدام جمل select جميل جميل لدرجه كبيره جدا

لفتح الجدول

if rs.state=1 then rs.close ' تأكد من ان الجدول مغلق اما اذا كا

00
 

فاضى 

 

00

#7

جميل جدا أخي وائل الشرح

بس جمل الاستعلام عن الرقم لا تعمل بشكل صحيح فانا حاولت فيها بشكل كبير ولكن لا تبحث معي بشكل كما اريد

فانا اريد ان ابحث في قاعدة البيانات علي رقم معين وهو مكرر في الحقل ذاته (الرقم) ولكن عندما تعرض تعرض كل تعرض كل سجلات القاعدة وليس السجلات المحتوية علي هذا الرقم فقط

واليك الكود اللي انا كتبته فارجو ان تجربة من خلال البرنامج الذي انت ارفقته لي لمعرفة اين الخلل في الكود

Private Sub Command1_Click()
Dim l As String
	l = InputBox("أدخل الرقم")
	'If l = "" Then Exit Sub
	Text1 = l

If Items.State = 1 Then Items.Close
ee = "select * from items where no=" & Val(l) & ""
Items.Open ee, mydb, adOpenDynamic, adLockPessimistic
If Items.EOF Then MsgBox "هذا الرقم غير موجود" : MSF_no_DATA : Exit Sub
MSF_DATA

End Sub

هذا الموضوع مغلق.

مواضيع مشابهة