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

أرجو تصحيح الاستعلام التالي (( مشكلة غريبة ))

بدأه عاشق للبرمجة في 13 يناير 2012 · 6 رد · 442 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي الكود التالي :

            Dim DataAdapter As New MySql.Data.MySqlClient.MySqlDataAdapter("select * from Users where UserName= '" & UserN & "'  and Description= '" & Udis & "'  ", con)
           con.Open()
            dataset1.Clear()
            DataAdapter.Fill(dataset1, "Users ")

البرنامج مربوط بقاعدة بيانات MySQL ، وكل شئ تمام ...

إلا أني أواجه مشكله في الاستعلام أعلاه :

الاستعلام يقوم بالبحث عن المستخدمين ، حيث :

Users اسم الجدول .

UserName : حقل في الجدول ونوعه Varchar(50)

UserN : متغير في Module .

Description : حقل في الجدول ونوعه VarChar(250) .

Udis : متغير في Module .

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

هل من نصائح ؟؟ وشكرا لكم ...

تم تعديل هذه المشاركة بواسطة عاشق للبرمجة في 13 يناير 2012 في 05:17

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#2

السلام عليكم ...

  1. أنت تستخدم and في الاستعلام , تأكد أن البيانات تحقق الشرطين معا ..
  2. استخدم الطريقة التالية :
    Dim sql As String
        	sql = "select * from Users where UserName= '" & UserN & "'  and Description= '" & Udis & "'  "
        	Console.WriteLine(sql)

    حيث يتم طباعة الاستعلام في نافذة الــ output , انسخه و نفذه في الــ mysql لكي ترى النتيجة ..

  3. يفضل استخدام طريقة البارمترات مثال :
    Dim connection As OleDbConnection = New OleDbConnection("provider=microsoft.ACE.oledb.12.0;data source=" & Application.StartupPath & "/db.accdb")
        	Dim command As OleDbCommand = New OleDbCommand
        	connection.Open()
        	command.Connection = connection
        	command.CommandType = CommandType.Text
        	command.CommandText = "SELECT Name , Cust , C_Date FROM SALES WHERE c_date between @date1 AND @date2 And (cust =@cust)"
        	command.Parameters.Add("@date1", OleDbType.Date).Value = DateTimePicker1.Value
        	command.Parameters.Add("@date2", OleDbType.Date).Value = DateTimePicker2.Value
        	command.Parameters.Add("@cust", OleDbType.VarWChar).Value = TextBox1.Text

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

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

اخي تأكد من نوع البيان للحقل فاذا كان Nvarchar فضع الحرف N قبل علامة التنصيص المفرده

.:: Wish to become better and better ::.

#4
houssam11350_11350 كتب:

السلام عليكم ...

  1. أنت تستخدم and في الاستعلام , تأكد أن البيانات تحقق الشرطين معا ..
  2. استخدم الطريقة التالية :
    Dim sql As String
        	sql = "select * from Users where UserName= '" & UserN & "'  and Description= '" & Udis & "'  "
        	Console.WriteLine(sql)

    حيث يتم طباعة الاستعلام في نافذة الــ output , انسخه و نفذه في الــ mysql لكي ترى النتيجة ..

  3. يفضل استخدام طريقة البارمترات مثال :
    Dim connection As OleDbConnection = New OleDbConnection("provider=microsoft.ACE.oledb.12.0;data source=" & Application.StartupPath & "/db.accdb")
        	Dim command As OleDbCommand = New OleDbCommand
        	connection.Open()
        	command.Connection = connection
        	command.CommandType = CommandType.Text
        	command.CommandText = "SELECT Name , Cust , C_Date FROM SALES WHERE c_date between @date1 AND @date2 And (cust =@cust)"
        	command.Parameters.Add("@date1", OleDbType.Date).Value = DateTimePicker1.Value
        	command.Parameters.Add("@date2", OleDbType.Date).Value = DateTimePicker2.Value
        	command.Parameters.Add("@cust", OleDbType.VarWChar).Value = TextBox1.Text

وعليكم السلام ، أخي الاستعلام يحقق الشرطين ، قمت بتغيير الـ connection string لقاعدة بيانات Access وقام بجلب النتائج ...

بالنسبة لطريقة الباراميترز فجميع الطريق تؤدي إلى روما :) ، وبالنسبة لي فأنا أفضل استخدام dataAdapter ، لا أعلم لماذا ولكني أجدها أسرع وأسهل في التعامل ... ، شكرا أخي العزيز على تفاعلك ...

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#5
VB Helper كتب:

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

اخي تأكد من نوع البيان للحقل فاذا كان Nvarchar فضع الحرف N قبل علامة التنصيص المفرده

وعليكم السلام ورحمة الله وبركاته , أستاذنا الحبيب ...

تأكدت من نوع البيانات ، وهي من نوع VarChar(50) ، وللمعلومية قمت بحذف الحقل بالكامل ، وأنشأت حقل جديد ، وقمت بتعبئة الحقول من جديد إلا أن المشكلة لازالت موجوده ، لا أعلم لماذا يعود بدون قيم ...

طرأ على بالي شئ قد يكون هو السبب ، سأتكد منه وأعود بعد قليل ...

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#6

بالفعل .. وجدت الحل :)

المشكلة كانت في أن الترميز الخاص بالحقل من نوع : utf8_general_ci

أما بالنسبة للحقل الآخر فكانت من نوع : latin7_general_ci

قمت بتغيير كافة الحقل إلى latin7_general_ci وحللت المشكلة ، فقد كان الاستعلام يقارن قيمه من latin7_general_ci بقيمة(مرمزة) من نوع utf8_general_ci وبالتالي لا يوجد Matching في النتائج ...

الحل باختصار : إذا كان الحقل في قاعدة البيانات قد يحتوي على قيم (( عربية )) فيجب تغيير ترميز الحقل إلى latin7_general_ci وتنتهي المشكلة ..

شكرا لكم جميعا ...

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#7

تعقيب ،،،،

في الواقع الترميز latin7 لا ينفع :sad: حيث أن أي نص عربي في قاعدة البيانات سيتحول إلى علامات استفهام ، مثلاً ( السلام عليكم = ؟؟؟؟؟؟ ؟؟؟؟؟ ) ، ولو قمنا بالاستعلام بتحقق شرط ما فسيقوم بجلبها ووضعها في VB form على هيئة علامات استفهام ، والسبب أن الترميز في الجهاز هو Windows-1256 وهو الترميز المصمم للحروف العربية .. وبعد البحث والتحري وجدت أن قواعد البيانات الحديثة تدعم الترميز cp1256 وهو ترميز مصمم لبعادل الترميز Windows-1256 ، وبالتالي يجب تعيين الترميز cp1256 لحقول قاعدة البيانات النصية ...

ويفضل تعيين الترميز عند الاتصال بقاعدة البيانات وفق كود الاتصال التالي :

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; CharSet=cp1256;

أتمنى أن تكون المعلومة مفيدة ... مع شكري وتقديري للأخوين : houssam11350_11350 و VB Helper ....

تم تعديل هذه المشاركة بواسطة عاشق للبرمجة في 14 يناير 2012 في 01:47

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

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