السلام عليكم
معي هذا الكود للتعديل على بيانات المستخدم في القاعدة أريد أعرف وين الخطأ فيه ؟ أم أن بيانات المستخدم لا يمكن تعديلها في وضع 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 كلمة محجوزة في لغة الاستعلام ولو وضعتها بين معكوفتين [] لازال الاشكال
شكراً على المشاركة،، بس للأسف لا.
تم إرفاق مثال بسيط:
المثال شغل بدون اي مشاكل بعد اضافة [] وجربة بنفسة اجريت عملية تعديل عليه فقبلها بدون خطأ