تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] وين الخطأ في هذا الكود (إستعلام)
#1
السلام عليكم

معي هذا الكود للتعديل على بيانات المستخدم في القاعدة أريد أعرف وين الخطأ فيه ؟ أم أن بيانات المستخدم لا يمكن تعديلها في وضع 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
الرد
تم الشكر بواسطة:
#2
لماذا لا ترفع قاعدة البيانات

شرط هذا غريب 

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

كود :
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
الرد
تم الشكر بواسطة:
#4
جرب واتأكد من كلمة (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
اللهم صلي علي نبي (الرحمه) محمد رسول الله وبارك علي اله وصحابته والتابعين  واحقن دماء امتنا واجعل بأسنا علي اعدائنا يا ارحم الراحمين
[b]امين [/b]



الرد
تم الشكر بواسطة: asadtaif
#5
(14-06-19, 04:36 AM)zinom كتب :
جرب واتأكد من كلمة (yes) (الي المفروض انها بقت شرط علي مافهمت من الطريقه  ) مكتوبه غلط - والا قاصد تكون كده ؟

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

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



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




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

تم إرفاق القاعدة


الملفات المرفقة
.rar   Database112.rar (الحجم : 22.14 ك ب / التحميلات : 6)
الرد
تم الشكر بواسطة:
#6
انت فى الكود تستخدم كود لتنفيذ التحديث
من ثم ياليه هذا الكود
كود :
       Main.Update()

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

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: asadtaif , asadtaif , ابراهيم ايبو , zinom
#7
مرحبا اخي

في البداية لدي كم ملاحظة
اولا قم بالعادة باعاده تسمية ال 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

اذا احتجت استفسار لا تتردد في السؤال.
الرد
تم الشكر بواسطة: asadtaif , asadtaif , ابراهيم ايبو , zinom
#8
الخطأ في الكود الخاص بك هو أن كلمة 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
الرد
تم الشكر بواسطة: asadtaif , elgokr
#9
(15-06-19, 08:03 AM)سامي محمد كتب : الخطأ في الكود الخاص بك هو أن كلمة Password كلمة محجوزة في لغة الاستعلام ولو وضعتها بين معكوفتين [] لازال الاشكال
شكراً على المشاركة،، بس للأسف لا. Sad

تم إرفاق مثال بسيط:


الملفات المرفقة
.rar   example.rar (الحجم : 122.62 ك ب / التحميلات : 3)
الرد
تم الشكر بواسطة:
#10
المثال شغل بدون اي مشاكل بعد اضافة [] وجربة بنفسة اجريت عملية تعديل عليه فقبلها بدون خطأ


الملفات المرفقة
.rar   End.rar (الحجم : 115.44 ك ب / التحميلات : 1)
الرد
تم الشكر بواسطة: asadtaif , elgokr , elgokr



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم