منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : حل مشكلة الإستعلام مع وجود الفواصل أو العلامات
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
إقتباس :وعموما شي جميل أخ سعود ربي يحفظك 
واياك 
لكن لم افهم هل حللت المشكلة؟
هل المشكلة الاساسية بالبحث فقط؟


هل تقصد ان الطريقة اللي انت اتبعتها هي السبب؟
الاصدار اللي عندي sql 2014
vs2019
شوف دالة Isfound اللي بالصورة

عفوا قصدي هذه الصورة


والصورة السابقة الدالة للبحث
(06-04-20, 06:10 PM)سعود كتب : [ -> ]
إقتباس :وعموما شي جميل أخ سعود ربي يحفظك 
واياك 
لكن لم افهم هل حللت المشكلة؟
هل المشكلة الاساسية بالبحث فقط؟


هل تقصد ان الطريقة اللي انت اتبعتها هي السبب؟
الاصدار اللي عندي sql 2014
vs2019
شوف دالة Isfound اللي بالصورة

عفوا قصدي هذه الصورة


والصورة السابقة الدالة للبحث

لا يا عزيزي المشكلة لم تحل حتى الأن 
بحاول أبسط لك مقصدي ربما يبسط الأمر

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

وكمثال مباشر الكود التالي للإستعلام وهو يعمل بشكل جيد على جميع الجمل طالت أو قصرت ولكن ينتج عنه رسالة الخطأ فقط عند الحركه (') وما شابهها
فهو لا ينفذ الأمر ويتوقف على رساله الخطأ
والحل الذي أبحث عنه هو الخطأ الذي تقصدة رسالة الخطأ بكلمة خطأ في بناء الجملة بالقرب من حرف إس 
 'Incorrect syntax near 's حيث إس تمثل الحرف الذي جاء بعد الحركه المقصوده 



كود :
      da = New SqlDataAdapter("select NameOfMov From MovTable where NameOfMov = '" & Trim(NameSearchTB.Text) & "'", sqlcon)
      da.Fill(MovieSearchdt)

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

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

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

PHP كود :
       da.SelectCommand.CommandText "insert into tb(title,body) values(@title,@body)"

 
       da.SelectCommand.Parameters.AddWithValue("@title"TextBox1.Text)
 
       da.SelectCommand.Parameters.AddWithValue("@body"TextBox2.Text
بعد كذا لا اظن اني ساتمكن من مساعدتك هذا كل مالدي.
السلام عليكم ورحمة الله وبركاته
اعتقد الحل بسيط يمكنك استخدام sql parameters  مثال على ذلك

كود :
Public Sub Insert_Customer(ByVal Cus_ID As Int32, ByVal CusName As String, ByVal CusPhone As String, ByVal CusAddress As String)
       Dim Cmd As New SqlCommand
       With Cmd
           .Connection = Con
           .CommandType = CommandType.Text
           .CommandText = "Insert Into Customer_Tbl ( Cus_ID,CusName,CusPhone,CusAddress)values(@Cus_ID,@CusName,@CusPhone,@CusAddress)"
           .Parameters.Clear()
           .Parameters.AddWithValue("@Cus_ID", SqlDbType.Int).Value = Cus_ID
           .Parameters.AddWithValue("@CusName", SqlDbType.VarChar).Value = CusName
           .Parameters.AddWithValue("@CusPhone", SqlDbType.VarChar).Value = CusPhone
           .Parameters.AddWithValue("@CusAddress", SqlDbType.VarChar).Value = CusAddress
           
         
       End With
       If Con.State = 1 Then Con.Close()
       Con.Open()
       Cmd.ExecuteNonQuery()
       Con.Close()
       MsgBox("تم إضافة بيانات العميل بنجاح", MsgBoxStyle.Information, "حفظ")
       Cmd = Nothing
   End Sub
وفي زر الحفظ تضع الصب وتمرر له اسماء الاداوت

كود :
Insert_Customer_Tbl(Cus_ID.Text, CusName.Text, CusPhone.Text, CusAddress.Text)

استخدم الكود التالي لجملة الحفظ
 Public con As New SqlConnection("server = GAZA-PC; database=books; integrated security =true")




If con.State = ConnectionState.Closed = False Then con.Close()
            con.Open()

            Dim cmd As New SqlCommand
            cmd.Connection = con

            cmd.CommandType = CommandType.Text
           
            cmd.CommandText = "insert into  hedar (name,phone,jawwal,fax,email,adress) values( @name,@phone,@jawwal,@fax,@email,@adress)"
           
            cmd.Parameters.AddWithValue("@name", tb1.Text)
            cmd.Parameters.AddWithValue("@phone", TextBox5.Text)
            cmd.Parameters.AddWithValue("@jawwal", TextBox2.Text)
            cmd.Parameters.AddWithValue("@fax", TextBox3.Text)
            cmd.Parameters.AddWithValue("@adress", TextBox1.Text)
            cmd.Parameters.AddWithValue("@email", TextBox4.Text)
            cmd.ExecuteNonQuery()
            con.Close()
            MsgBox("تمت الاضافه بنجاح", MsgBoxStyle.Information, "اضافه بيانات المكتبه")
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try


الكود بالمرفق
بلغني في حال زبط أو ما زبط وشكرا
(06-04-20, 10:59 PM)hashemb1978 كتب : [ -> ]استخدم الكود التالي لجملة الحفظ
 Public con As New SqlConnection("server = GAZA-PC; database=books; integrated security =true")




If con.State = ConnectionState.Closed = False Then con.Close()
            con.Open()

            Dim cmd As New SqlCommand
            cmd.Connection = con

            cmd.CommandType = CommandType.Text
           
            cmd.CommandText = "insert into  hedar (name,phone,jawwal,fax,email,adress) values( @name,@phone,@jawwal,@fax,@email,@adress)"
           
            cmd.Parameters.AddWithValue("@name", tb1.Text)
            cmd.Parameters.AddWithValue("@phone", TextBox5.Text)
            cmd.Parameters.AddWithValue("@jawwal", TextBox2.Text)
            cmd.Parameters.AddWithValue("@fax", TextBox3.Text)
            cmd.Parameters.AddWithValue("@adress", TextBox1.Text)
            cmd.Parameters.AddWithValue("@email", TextBox4.Text)
            cmd.ExecuteNonQuery()
            con.Close()
            MsgBox("تمت الاضافه بنجاح", MsgBoxStyle.Information, "اضافه بيانات المكتبه")
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try


الكود بالمرفق
بلغني في حال زبط أو ما زبط وشكرا

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

والجملة التي أستخدمها هي التالية 

كود :
       da = New SqlDataAdapter("select NameOfMov From MovTable where NameOfMov = '" & Trim(NameSearchTB.Text) & "'", sqlcon)
       da.Fill(MovieSearchdt)


وهي تنجح في الإستعلام عن جميع الأسماء ما عدا الأسماء التي تحمل علامة الفاصلة فالأمر يتوقف عن التنفيذ وتنتج رسالة الخطأ !
فلو جرب أحدكم تركيب جملة إستعلام وليست حفظ إستعلام فقط ونجحت ياليت ينزلها هنا للفائدة
PHP كود :
"select NameOfMov From MovTable where NameOfMov = '" Trim(NameSearchTB.Text) & "'" 
عسى يكون خير اخي الكريم
هل تدري ان استخدام هذا النمط يعتبر ثغرة؟
وهي ماتسمى sql injection
اعتذر ان كنت قد سببت لك اي ازعاج.
لكن جرب حقن كلمة or عند تسجيل الدخول.
(07-04-20, 04:17 PM)سعود كتب : [ -> ]
PHP كود :
"select NameOfMov From MovTable where NameOfMov = '" Trim(NameSearchTB.Text) & "'" 
عسى يكون خير اخي الكريم
هل تدري ان استخدام هذا النمط يعتبر ثغرة؟
وهي ماتسمى sql injection
اعتذر ان كنت قد سببت لك اي ازعاج.
لكن جرب حقن كلمة or عند تسجيل الدخول.

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

في علوم البرمجه الوقوع في الخطأ هو أجمل طريق للصواب 
عموما لازالت المشكلة قائمة في الإستعلام 
وحقن or الذي اشرت إليه لست ملماً به بشكل كامل 
فأنا عن البرمجه أبتعد فصولا وأعود 
وهذه مشكلتي !
فعلا جربتها وحدثت المشكلة .
لكن لماذا انت مصر(من الاصرار يعني لاتريد اي بديل؟) على تلك الطريقة؟
(07-04-20, 05:52 PM)سعود كتب : [ -> ]فعلا جربتها وحدثت المشكلة .
لكن لماذا انت مصر(من الاصرار يعني لاتريد اي بديل؟) على تلك الطريقة؟

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

عموما أعتذر إني أشغلتكم معاي وسيبقى البحث قائم عندي وفي حال وصلت لحل سأضعه هنا للفائده !
الصفحات : 1 2 3