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

اين الخطأ بهذا الكود البسيط ؟؟؟؟

بدأه shadi77 في 26 مايو 2010 · 10 رد · 1,016 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

If rs.State = 1 Then rs.Close

rs.ActiveConnection = db

rs.CursorType = adOpenDynamic

rs.Source = "select * from info where rec_1 like '%" & txt1 & "%' and rec_2 like '%" & txt2 & "%' and rec_3 like '%" & txt3 & "%' '"

rs.LockType = adLockOptimistic

rs.CursorLocation = adUseClient

rs.Open

Set Dg1.DataSource = rs

الكود السابق استخدمته لاظهار نتائج بحث بموجب عدة حقول تكست , اي ان البحث ستم بالحقول التي يتم تعبئتها ليتم اظهار نتائج البحث بداتا قريد !!!

مثال للتوضيح

لو اردنا استخراج نتائج من خلال تكست1 فانه سيتم اظهار النتائج بالداتا قريد

وعند اعادة البحث بادخال قيمة اضافية للتكست2 فانه يتم فلترة نتائج البحث بموجب حقلين تكست1 و تكست2

وكذلك الامر عند اضافة قيمة لتكست3 فانه ايضا سيتم فلترة النتائج السابقة وظهار نتائج جديدة بموجب الحقول جميعا ....

المشكلة::::::::::::::::::::::::::::

نتائج البحث الناتجة لا تظهر قيمة حقيقية كما هو مطلوب وبمثال يتضح الامر

لو قمنا باجراء بحث باحد الحقول كما يلي

txt1=100

اي قم بالبحث بكافة الحقول التابعة للجدول واظهر بداتا قريد كافة الحقول التي تحمل القيمة 100

يتم اظهار النتائج ولكن يقوم باظهار كافة الحقول التي تحتوي هذا الرقم فيقوم باظهار الرقم 10000 وكذلك 10020 وايضا 5420100 ....وهكذ1............

فكما تلاحظ يقوم باظهار اي حقل يحتوي جزء من الرقم والمطلوب العكس تمام وهو اظهار النتائج التي تطابق الرقم المدخل اي 100 فقط ان وجد ولا فلا !!!!

وهذا هو المطلوب

اتمنى ان اكون قد وفقت بالشرح المطول واتمنى ان اجد الحل لديكم اساتذتي الكرام

ودمتم سالمين

فأنت اخي المبرمج ..لا تبخل بعلمك عمن يطلبه فقد كنت يوما تبحث كما نبحث نحن.. واعلم لو حجب العلم عنك لما وصلت الى ما انت عليه الان.. فاتق الله في طالب العلم وتذكر ما منه الله عليك ولا تبخل بعلمك وما اوتيت من معرفة ليبارك الله علمك وينفعك به.

#2

السلام عليكم

استخدم

like '" & Text3 & "%' "
#3
AHMAD KALIL كتب:

السلام عليكم

استخدم

like '" & Text3 & "%' "

شكرا لردك اخي احمد

للاسف المشكلة كما هي

):

فأنت اخي المبرمج ..لا تبخل بعلمك عمن يطلبه فقد كنت يوما تبحث كما نبحث نحن.. واعلم لو حجب العلم عنك لما وصلت الى ما انت عليه الان.. فاتق الله في طالب العلم وتذكر ما منه الله عليك ولا تبخل بعلمك وما اوتيت من معرفة ليبارك الله علمك وينفعك به.

#4

إذا كنت تريد القيمة المطابقة تماماً فلماذا تستخدم LIKE؟ أزلها وضع بدلاً منها = وأزل علامات %.

لأن LIKE تقوم بالبحث بالقيم المشابهة وليس فقط بالقيم المطابقة.

أو وضح سؤالك أكثر إن لم يكن هذا ما تريده.

بالتوفيق :)

هذه الجملة خاطئة  :wacko: 


#5
Abboodd كتب:

إذا كنت تريد القيمة المطابقة تماماً فلماذا تستخدم LIKE؟ أزلها وضع بدلاً منها = وأزل علامات %.

لأن LIKE تقوم بالبحث بالقيم المشابهة وليس فقط بالقيم المطابقة.

أو وضح سؤالك أكثر إن لم يكن هذا ما تريده.

بالتوفيق :)

شكرا لك اخي عبوووود

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

اذ المطلوب البحث بالحقول التي يتم ملئها وتجاهل الحقول الفارغة اثناء البحث

والله الموفق

فأنت اخي المبرمج ..لا تبخل بعلمك عمن يطلبه فقد كنت يوما تبحث كما نبحث نحن.. واعلم لو حجب العلم عنك لما وصلت الى ما انت عليه الان.. فاتق الله في طالب العلم وتذكر ما منه الله عليك ولا تبخل بعلمك وما اوتيت من معرفة ليبارك الله علمك وينفعك به.

#6

ممكن ترفع المشروع

#7

اخواني.......

لعلي لم اشرح المشكلة بشكل افضل واني واثق بكم جميعا لو اتضحت المشكلة لاستطعتم مساعدتي .... على العموم سابسط المشكلة قدر الامكان وساختصر مطلبي بعدة كلمات :

ليكن الفورم يحتوي خمس حقول تكست وزر كومند واحد وداتا قريد واحدة

المطلوب

اظهار نتائج بحث بداتا قريد من خلال كلمات يتم ادخالها بتلك الحقول !!! بشرط ان يتم البحث بالحقول التي نقوم بملئها وتجاهل الحقول الفارغة !!! فلو قمنا بملئ كلمة محمد باحد الحقول يتم استخراج كافة السجلات التي تحمل اسم محمد وعرضها بداتاقريد .... وبعد اظهار النتائج قمنا بملئ حقل اخر بالعمر 24 سنة ليقوم بفلترة النتائج السابقة وعرض محمد ذو ال 24 سنة بداخل الداتا قريد نفسها .... وهكذا

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

ودمتم سالمين

فأنت اخي المبرمج ..لا تبخل بعلمك عمن يطلبه فقد كنت يوما تبحث كما نبحث نحن.. واعلم لو حجب العلم عنك لما وصلت الى ما انت عليه الان.. فاتق الله في طالب العلم وتذكر ما منه الله عليك ولا تبخل بعلمك وما اوتيت من معرفة ليبارك الله علمك وينفعك به.

#8

حسناً يا أخ شادي :)

ما رأيك بأن تضع متغيراً نصياً، ثم تضيف إليه قليلاً قليلاً اعتماداً على كون مربع النص فارغاً أو لا، وفي النهاية نسند النص إلى خاصية Source للكائن rs:

strSQL = "SELECT *FROM info WHERE "

If Text1.Text <> "" Then
    strSQL = strSQL & "rec_1 = '" & Text1.Text & "'"
End If

If Text2.Text <> "" Then
    If Text1.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_2 = '" & Text2.Text & "'"
End If

If Text3.Text <> "" Then
    If Text1.Text <> "" Or Text2.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_3 = '" & Text3.Text & "'"
End If

If Text4.Text <> "" Then
    If Text1.Text <> "" Or Text2.Text <> "" Or Text3.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_4 = '" & Text4.Text & "'"
End If

If Text5.Text <> "" Then
    If Text1.Text <> "" Or Text2.Text <> "" Or Text3.Text <> "" Or Text4.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_5 = '" & Text5.Text & "'"
End If
...
...
...
rs.Source = strSQL
...
...
...

أرجو أن يكون هذا ما تريده.

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

ملاحظة أخرى: ألم يئن الأوان لتوديع VB6 بعد؟

بالتوفيق :)

هذه الجملة خاطئة  :wacko: 


#9
Abboodd كتب:

حسناً يا أخ شادي :)

ما رأيك بأن تضع متغيراً نصياً، ثم تضيف إليه قليلاً قليلاً اعتماداً على كون مربع النص فارغاً أو لا، وفي النهاية نسند النص إلى خاصية Source للكائن rs:

strSQL = "SELECT *FROM info WHERE "

If Text1.Text <> "" Then
    strSQL = strSQL & "rec_1 = '" & Text1.Text & "'"
End If

If Text2.Text <> "" Then
    If Text1.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_2 = '" & Text2.Text & "'"
End If

If Text3.Text <> "" Then
    If Text1.Text <> "" Or Text2.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_3 = '" & Text3.Text & "'"
End If

If Text4.Text <> "" Then
    If Text1.Text <> "" Or Text2.Text <> "" Or Text3.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_4 = '" & Text4.Text & "'"
End If

If Text5.Text <> "" Then
    If Text1.Text <> "" Or Text2.Text <> "" Or Text3.Text <> "" Or Text4.Text <> "" Then strSQL = strSQL & "AND "
    strSQL = strSQL & "rec_5 = '" & Text5.Text & "'"
End If
...
...
...
rs.Source = strSQL
...
...
...

أرجو أن يكون هذا ما تريده.

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

ملاحظة أخرى: ألم يئن الأوان لتوديع VB6 بعد؟

بالتوفيق :)

شكرا ليك يا كابتن ...........

طريقة جميلة بدأت بتطبيقها لكن هي معقدة نوعا ما وخاصة ان الفورم لدي يحتوي 16 حقل للبحث فانظر مدى العناء المتوقع والجهد الذهني !!!

الاا يوجد طريقة اسهل !!!!

جزاك الله خير

فأنت اخي المبرمج ..لا تبخل بعلمك عمن يطلبه فقد كنت يوما تبحث كما نبحث نحن.. واعلم لو حجب العلم عنك لما وصلت الى ما انت عليه الان.. فاتق الله في طالب العلم وتذكر ما منه الله عليك ولا تبخل بعلمك وما اوتيت من معرفة ليبارك الله علمك وينفعك به.

#10

لعيونك أخ شادي، بشرط أن تترك VB6، نصيحة لمصلحتك.

1- اجعل مربعات النصوص مصفوفة من الأدوات وسمها txtSearch.

2- يجب أن تكون أسماء الحقول في قاعدة البيانات rec ثم _ ثم رقم الحقل (ابتداء من الواحد).

3- اكتب الشفرة التالية في زر البحث:

    Dim strSQL As String
    Dim i As Integer

    strSQL = "SELECT *FROM info WHERE "

    For i = txtSearch.LBound To txtSearch.UBound
        If Right(strSQL, 6) <> "WHERE " Then strSQL = strSQL & "AND "   
        If txtSearch(i).Text <> "" Then
            strSQL = strSQL & "rec_" & i + 1 & " = '" & txtSearch(i).Text & "' "
        End If
    Next
    ...
...
...
    rs.Source = strSQL
...
...
...

أرجو أن يكون هذا ما تريده :)

بالتوفيق

تم تعديل هذه المشاركة بواسطة Abboodd في 29 مايو 2010 في 22:34

هذه الجملة خاطئة  :wacko: 


#11
Abboodd كتب:

لعيونك أخ شادي، بشرط أن تترك VB6، نصيحة لمصلحتك.

1- اجعل مربعات النصوص مصفوفة من الأدوات وسمها txtSearch.

2- يجب أن تكون أسماء الحقول في قاعدة البيانات rec ثم _ ثم رقم الحقل (ابتداء من الواحد).

3- اكتب الشفرة التالية في زر البحث:

    Dim strSQL As String
    Dim i As Integer

    strSQL = "SELECT *FROM info WHERE "

    For i = txtSearch.LBound To txtSearch.UBound
        If Right(strSQL, 6) <> "WHERE " Then strSQL = strSQL & "AND "   
        If txtSearch(i).Text <> "" Then
            strSQL = strSQL & "rec_" & i + 1 & " = '" & txtSearch(i).Text & "' "
        End If
    Next
    ...
...
...
    rs.Source = strSQL
...
...
...

أرجو أن يكون هذا ما تريده :)

بالتوفيق

شكرا ليك اخي عبود على محاولاتك الرائعة

بخصوص الكود السابق جاري التطبيق وساقوم باخبارك بالنتيجة

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

بقي القول اني اتمنى ان اجد اساتذة ذوي اخلاق وسعة صدر ليقومو باحتضان امثالي ومساعدتنا على البدء بلغة الدوت نت امثالك اخي عبود وانت الاستاذ لي منذ بدئت الفجوال 6 ومن الصفر ....

جزاكم الله خيرا وكثر الله من امثالكم

والله الموفق

فأنت اخي المبرمج ..لا تبخل بعلمك عمن يطلبه فقد كنت يوما تبحث كما نبحث نحن.. واعلم لو حجب العلم عنك لما وصلت الى ما انت عليه الان.. فاتق الله في طالب العلم وتذكر ما منه الله عليك ولا تبخل بعلمك وما اوتيت من معرفة ليبارك الله علمك وينفعك به.

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