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

ارجو المساعدة - ما هو الخطأ فى هذا الكود؟

مغلق
بدأه abduljawaad saad في 21 ديسمبر 2002 · 14 رد · 1,143 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ما هو الخطأ فى هذا الكود؟

الغرض من الكود : ملأ List Box ببيانات (حقل) محدد يحتوى على أسماء (من كل الجدول) فى قاعدة بيانات Access بحيث تظهر

كل الأسماء طبقا لأول حرف يتم إدخاله عن طريق Text Box

طريقة عمل الكود : تمرير الحرف المراد إظهار الأسماء التى تبدأ به إلى إستعلام من نوع Parameter Query

وجملة الإستعلام قمت بتخزينها داخل قاعدة البيانات بإسم LetterLookUp

جملة الإستعلام ;'*'+SELECT ItemName FROM Items WHERE ItemName Like Letter

ولقد تأكدت أن جملة الإستعلام تعمل جيدا من داخل البرنامج VisData بعد تنفيذها بالأمر Execte

والمشكلة : بعد تنفيذ الكود لا يتم ملأ الليست بوكس بأى بيانات بالرغم من عدم ظهور أى رسالة خطأ فى

أى مرحله من مراحل الكود وكأن الجدول الذى كونته جملة الإستعلام فارغ

Option Explicit

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim PramTemp As ADODB.Parameter
    Dim Letter As String 

Private Sub Text_Change()

    ' Open connection.
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= (App.Path & "" & "jawaad.MDB")

    ' Open command object with one parameter.
    Set cmd = New ADODB.Command
    cmd.CommandText = "LetterLookUp"
    cmd.CommandType = adCmdStoredProc

    ' Get parameter value and append parameter.
    Letter = Text

    Set PramTemp = cmd.CreateParameter("Letter", adChar, adParamInput, 1)
    cmd.Parameters.Append PramTemp
    PramTemp.Value = Letter

    ' Create recordset by executing the command.
    Set cmd.ActiveConnection = cn
    Set rs = cmd.Execute

            Do While Not rs.EOF 
               List.AddItem rs.Fields("ItemName")
               rs.MoveNext
            Loop
    rs.Close
    cn.Close


End Sub

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#2

جرب بدل ان تعمل

rs.fields("ggg"(

ان تعملها

rs!item_name

او اذا اردت ابعث لي فقط الجدول الخاص بهذه الفورم و الشاشه الخاصه بها و انا اعملها لك

#3

الأخ / العائد

سابقا 0000قمت بتجربة ما إقترحت والنتيجه لم تتغير

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

شكرا لك

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#4

جربت أيضا الكود

     If Not rs.BOF And Not rs.EOF Then
      For i = 0 To rs.Fields.Count - 1
          List.AddItem rs.Fields("ItemName")
      Next i
End If

حصلت على رسالة الخطأ

run-time 3021

either EOF OR BOF is true, or the current record has been deleted

Requested opertion requies a current record

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#5

الإخوة الأفاضل أرجو المساعدة.. الأمر هام

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#6

إخوانى .. أنتظر ردكم

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#7

أنا غير متأكد ولكن ممكن تكتب الكود الخاص بLetterLookUp stored procedure

ممكن يكون فيه Parameter ولم تقم بتمريره لها...

تعديل:

وممكن أيضا يكون هذا الكوماند لا يرجع أي Records.

#8

تحياتى BAZRAMIT باشا

ماذا تقصد بـ الكود الخاص بLetterLookUp stored procedure

جملة الإستعلام تعمل جيدا بدون إستخدام الكود بمعنى لو أدخلت حرف مثلا ترجع كل الأسماء التى تبدأ بهذا الحرف

ولكن الكود لا يرجع أى Records

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#9

أخي العزيز - كيف تفتح ال connection التي تشير الى قاعدة بيانات Access ثم تطلب تنفيذ Stored Procedure الذي هو خاص بـ sql server ؟؟

إن Access لاتحتوي على Stored Procedure وبذلك فإنها سوف تتجاهل جملة الإستعلام وتعامله على أنه view أو table.

رجاءا أبلغني إذا كنت فهمت خطأ !!!

وأرجوا من الله الإفاده ... وشكرا

#10

أخى KHALED-AFIFI

شكرا لك لقد فهمتك .. ولكن دلنى على الكود الصح الذى عن طريقه أستطيع التعامل مع جملة الإستعلام المخزنة فى قاعدة Access حتى أصل إلى ملأ List Box بالأسماء التى تبدأ بحرف معين طبقا لمدخلات Text Box ثم إنتقال المؤشر المضئ إلى المكان الذى تبدأ به هذه الأسماء فى List Box

لك تحياتى وتقديرى

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#11

أخي العزيز

فقط غير الجزء التالي :

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

cmd.CommandText = "LetterLookUp"

cmd.CommandType = adCmdStoredProc

' Get parameter value and append parameter.

Letter = Text

Set PramTemp = cmd.CreateParameter("Letter", adChar, adParamInput, 1)

cmd.Parameters.Append PramTemp

PramTemp.Value = Letter

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

الى

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

cmd.CommandText = "select * from LetterLookUp where letter='" & text & "'"

cmd.CommandType = adCmdtext

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

#12

لك بالغ شكرى وأتمنى لك مزيدا من التقدم والنجاح

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#13

عدلت الكود كما وضحت لى وأصبح كالآتي:

Option Explicit

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Letter As String
Dim cmd As New ADODB.Command
Dim PramTemp As ADODB.Parameter

Private Sub Text_Change()

Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= (App.Path & "" & "jawaad.MDB")

 Set cmd = New ADODB.Command
cmd.CommandText = "select * from LetterLookUp where letter='" & Text & "'"
cmd.CommandType = adCmdText
Set cmd.ActiveConnection = cn
Set rs = cmd.Execute

Do While Not rs.EOF 
    List.AddItem rs.Fields("ItemName")
    rs.MoveNext
Loop
rs.Close
cn.Close

End Sub

حصلت على رسالة الخطأ التاليه عند تنفيذ السطر: Set rs = cmd.Execute

Run-time error '247217904(80040e10):

No vale given for one or more requied parameters.

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#14

أخي العزيز :

قبل السطر التالي :

cmd.CommandText = "select * from LetterLookUp where letter='" & Text & "'"

يجب اعطاء قيمة لـ text

افترض أنك تبحث عن السجلات التي تحتوي على "محمد"

فيجب ان تنفذ هذا السطر أولا

text="محمد"

وعمليا يجب أن تضع text Box على ال Form ليقوم المستخدم بكتابة مايريد البحث عنه وليكن textbox1

وداخل حدث تغير ال textbox1 الذي سيكون textbox1_change

ضع اسم الداله التي ستقوم بالبحث والتي ستحتوي على الكود الذي ذكرته سابقا مع وضع السطر الآتي في مقدمته

text=textbox1.text

على العموم حاول وإذا لم تصل الى نتيجة ابعث الي قاعدة البيانات كي اصمم لك ال Form كاملة ثم ارجعها لك

khaledafifi2000@hotmail.com

وتمنياتي لك بالتوفيق

#15

شكرا لك مع خالص تقديرى وإحترامى . سأحاول تصحيح أخطائى.

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا

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

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