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

نسخة كاملة : وين الخطأ في هذا الكود (إستعلام)
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

معي هذا الكود للتعديل على بيانات المستخدم في القاعدة أريد أعرف وين الخطأ فيه ؟ أم أن بيانات المستخدم لا يمكن تعديلها في وضع runtime

أريد كود مشابه أو حل لتعديل بيانات المستخدم

كود :
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
       Try
           Dim dbsource As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\database\Database112.mdb"
           Dim conn = New OleDbConnection(dbsource)
           Dim updatee As String = "Update Users set username ='" & TextBox1.Text & "', password = '" & TextBox2.Text & "', gender ='" & ComboBox1.SelectedItem.ToString & "', birthday ='" & DateTimePicker1.Value & "', Address ='" & TextBox3.Text & "', Health_Status ='" & TextBox4.Text & "', password_open_case ='" & TextBox5.Text & "' where user_id=" & My.Settings.deleted.ToString() & ";"
           Dim cmd As New OleDbCommand(updatee, conn)


           conn.Open()
           cmd.ExecuteNonQuery()
           MsgBox("save success")
           My.Settings.edit = "yess"
           conn.Close()
       Catch ex As Exception
           MsgBox("error")
       End Try
       Main.Update()

       Main.Show()
       Main.Update()
       Main.Refresh()

       Me.Close()
   End Sub
لماذا لا ترفع قاعدة البيانات

شرط هذا غريب 

كود :
My.Settings.deleted.ToString()
وانت اعطيته قيمة بعد عملة طلب التحديث
لا بالعكس الشرط على حد علمي صحيح, وهذا في فورم أخر لتحديد الرو في الداتا قريد فيو

كود :
Private Sub DataGridView5_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView5.CellClick
       Dim index As Integer
       index = e.RowIndex
       Dim selectedRow = DataGridView5.Rows(index)

       My.Settings.deleted = selectedRow.Cells(0).Value
       My.Settings.editFlag = selectedRow.Cells(0).Value.ToString()

       My.Settings.uusername = selectedRow.Cells(1).Value.ToString()
       My.Settings.password = selectedRow.Cells(2).Value.ToString()
       My.Settings.gender = selectedRow.Cells(3).Value.ToString()
       My.Settings.birthday = selectedRow.Cells(4).Value.ToString()
       My.Settings.Address = selectedRow.Cells(5).Value.ToString()
       My.Settings.Health_Status = selectedRow.Cells(6).Value.ToString()
       My.Settings.password_open_case = selectedRow.Cells(7).Value.ToString()

   End Sub
جرب واتأكد من كلمة (yes) (الي المفروض انها بقت شرط علي مافهمت من الطريقه  ) مكتوبه غلط - والا قاصد تكون كده ؟

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

وده الكود بعد التعديل (شوف مضمون رساله الخطأ الي هتظهر من جملة تراي يعد تعديلها  
كود :
      Try
           Dim dbsource As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\database\Database112.mdb"
           Dim conn = New OleDbConnection(dbsource)
           Dim updatee As String = "update Users SET username=@1,password=@2,gender=@3,birthday=@4,Address=@5,Health_Status=@6,password_open_case=@7" &
           " where user_id=@8"
           Dim cmd As New OleDbCommand(updatee, conn)
           cmd.Parameters.AddWithValue("@1", TextBox1.Text) 'كود الصنف
           cmd.Parameters.AddWithValue("@2", TextBox2.Text)
           cmd.Parameters.AddWithValue("@3", ComboBox1.text)
           cmd.Parameters.AddWithValue("@4", DateTimePicker1.Value)
           cmd.Parameters.AddWithValue("@5", TextBox3.Text)
           cmd.Parameters.AddWithValue("@6", TextBox4.Text)
           cmd.Parameters.AddWithValue("@7", TextBox5.Text)
           cmd.Parameters.AddWithValue("@8", My.Settings.deleted.ToString)
           conn.Open()
           cmd.ExecuteNonQuery()
           MsgBox("save success")
           My.Settings.edit = "yess"
           conn.Close()
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try
       Main.Update()

       Main.Show()
       Main.Update()
       Main.Refresh()

       Me.Close()
(وداءما خلي جملة تراي بالشكل ده علشان تظهرلك رساله بالخطأ - اذا كان فيه خطأ))

كود :
       Try

       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try
(14-06-19, 04:36 AM)zinom كتب : [ -> ]
جرب واتأكد من كلمة (yes) (الي المفروض انها بقت شرط علي مافهمت من الطريقه  ) مكتوبه غلط - والا قاصد تكون كده ؟

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

وده الكود بعد التعديل (شوف مضمون رساله الخطأ الي هتظهر من جملة تراي يعد تعديلها  



ودي رسالة الخطأ في الكود لي رسلته لي:




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

تم إرفاق القاعدة
انت فى الكود تستخدم كود لتنفيذ التحديث
من ثم ياليه هذا الكود
كود :
       Main.Update()

       Main.Show()
       Main.Update()
       Main.Refresh()

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

تحياتى لك
وتمنياتى لك التوفيق
مرحبا اخي

في البداية لدي كم ملاحظة
اولا قم بالعادة باعاده تسمية ال textboxs فمثلا بدل Textbox1
اجعل اسمة txt_username لكي تسهل على نفسك تتبع الكود و اسهل في التعديل.
ثانيا يجب استخدام Parameters في التعديل او الاضافة ليش ؟؟
نتخلص من مشاكل ال injection. شو يعني ؟؟

انت لديك في الاتي :
كود :
username ='" & TextBox1.Text & "'
 
لماذا استخدمنا ' text ' لانه نص، فالنفرض احد المستخدمين اسمة : Baraá 
فقد استخدم 'في الاسم هكذا سيحدث خطاء في الكود الخاص بك.
الفائدة الاخرى ان الكود مرتب بشكل افضل و اسهل للتهديل والاضافة.

الملاحظة الثالثة : قم بالاتصال بالسيرفر مرة واحدة فقط ليس عليك كل مرة تطلب الاتصال بقاعدة البيانات تكتب جملة الاتصال،
قم بعمل class واضف اليه جمله الاتصال و استدعي الاتصال في بداية ال form و استخدم الاتصال، او على الاقل ضع الاتصال في اول ال form
وقم باستدعائة.

اخيرا هذا الكود الخاص فيك باستخدام ال Parameters
كود :
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

Dim dbsource As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\database\Database112.mdb"
im conn = New OleDbConnection(dbsource)

  If conn.State Is ConnectionState.Closed Then
   conn.Open()
 End If

   Dim query As String = "Update Users set username=@username, password=@password, gender=@gender, birthday=@birthday, Address=@Address,  Health_Status=@Health_Status, password_open_case=@password_open_case where user_id=@user_id"

   Dim cmd As OleDbCommand = New OleDbCommand(query, conn)
   cmd.Parameters.AddWithValue("@username", TextBox1.Text)
   cmd.Parameters.AddWithValue("@password", TextBox2.Text)
   cmd.Parameters.AddWithValue("@gender", ComboBox1.SelectedItem.ToString())
   cmd.Parameters.AddWithValue("@birthday", DateTimePicker1.Value)
   cmd.Parameters.AddWithValue("@Address", TextBox3.Text)
   cmd.Parameters.AddWithValue("@Health_Status", TextBox4.Text)
   cmd.Parameters.AddWithValue("@Health_Status", TextBox5.Text)
   cmd.Parameters.AddWithValue("@user_id", My.Settings.deleted.ToString())

   cmd.ExecuteScalar()
   _con.con.Close()
   MsgBox("save success")
   My.Settings.edit = "yess"
End Sub
لكن لم افهم لماذا تاخذ رقم المستخدم من النصوص المحفوظه في الاعدادات ؟؟
إقتباس :
كود :
My.Settings.deleted.ToString

اذا احتجت استفسار لا تتردد في السؤال.
الخطأ في الكود الخاص بك هو أن كلمة Password كلمة محجوزة في لغة الاستعلام ولو وضعتها بين معكوفتين [] لازال الاشكال

كود :
Try
            Dim dbsource As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\database\Database112.mdb"
            Dim conn = New OleDbConnection(dbsource)
            Dim updatee As String = "Update Users set username ='" & TextBox1.Text & "', [password] = '" & TextBox2.Text & "', gender ='" & ComboBox1.SelectedItem.ToString & "', birthday ='" & DateTimePicker1.Value & "', Address ='" & TextBox3.Text & "', Health_Status ='" & TextBox4.Text & "', password_open_case ='" & TextBox5.Text & "' where user_id=" & My.Settings.deleted.ToString() & ";"
            Dim cmd As New OleDbCommand(updatee, conn)


            conn.Open()
            cmd.ExecuteNonQuery()
            MsgBox("save success")
            conn.Close()
        Catch ex As Exception
            MsgBox("error")
       
End Try
(15-06-19, 08:03 AM)سامي محمد كتب : [ -> ]الخطأ في الكود الخاص بك هو أن كلمة Password كلمة محجوزة في لغة الاستعلام ولو وضعتها بين معكوفتين [] لازال الاشكال
شكراً على المشاركة،، بس للأسف لا. Sad

تم إرفاق مثال بسيط:
المثال شغل بدون اي مشاكل بعد اضافة [] وجربة بنفسة اجريت عملية تعديل عليه فقبلها بدون خطأ
الصفحات : 1 2