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

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

هذا الكود سليم 100% ولكن اثناء استخدامه التفت لشغلة بسيطة وهي :

اثناء عملية التعديل يقوم بتعديل كل من في كومبو بكس الى نفس البيانات التي قمت بالتعديل عليها .


كود :
Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=False;")
       Dim sql As String =
           " update [Customer] set " &
           " Cus_Name=@Cus_Name, Cus_Address=@Cus_Address, Cus_Region=@Cus_Region, Cus_Telephone_Number=@Cus_Telephone_Number "

       Dim cmd As New OleDbCommand(sql, conn)
       cmd.Parameters.AddWithValue("@Cus_Name", TextBox1.Text)
       cmd.Parameters.AddWithValue("@Cus_Address", TextBox3.Text)
       cmd.Parameters.AddWithValue("@Cus_Region", TextBox4.Text)
       cmd.Parameters.AddWithValue("@Cus_Telephone_Number", TextBox5.Text)

       conn.Open()
       cmd.ExecuteNonQuery()
       conn.Close()

       MessageBox.Show("We have been successfully Update", "Congratulations", MessageBoxButtons.OK, MessageBoxIcon.Information)
       Form2_Load(e, e)
واذا سمحتم اريد كود اذا اقوم اضيف او احذف او اعدل يقوم بعميلية قراءة البيانات الجديدة بدل استخدامي لكود
كود :
Form2_Load(e, e)
او كود افضل منه
مع UPDATE يجب في sql أن تضيف WHERE مع تحديد ID الذي تريد تطبيق التعديل في بياناته
الا إذا قصدت فعلا تحديث جميع البيانات
اذا اضفت where

كود :
System.Data.OleDb.OleDbException occurred
 HResult=0x80040E14
 Message=Syntax error in UPDATE statement.
 Source=Microsoft Access Database Engine
 StackTrace:
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
  at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
  at Rent_Schedule.Form2.Button3_Click(Object sender, EventArgs e) in D:\my project\Complete Project\Rent Schedule\Rent Schedule\Form2.vb:line 77
  at System.Windows.Forms.Control.OnClick(EventArgs e)
  at System.Windows.Forms.Button.OnClick(EventArgs e)
  at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
  at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
  at System.Windows.Forms.Control.WndProc(Message& m)
  at System.Windows.Forms.ButtonBase.WndProc(Message& m)
  at System.Windows.Forms.Button.WndProc(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
  at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
  at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
  at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
  at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
  at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
  at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
  at Rent_Schedule.My.MyApplication.Main(String[] Args) in :line 81

الكود
كود :
Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=False;")
       Dim sql As String =
           " update [Customer] set " &
           " ( Cus_Name=@Cus_Name, Cus_Address=@Cus_Address, Cus_Region=@Cus_Region, Cus_Telephone_Number=@Cus_Telephone_Number )" &
           " where " &
           "( Cus_ID=@Cus_ID )"

       Dim cmd As New OleDbCommand(sql, conn)
       cmd.Parameters.AddWithValue("@Cus_Name", TextBox1.Text)
       cmd.Parameters.AddWithValue("@Cus_Address", TextBox3.Text)
       cmd.Parameters.AddWithValue("@Cus_Region", TextBox4.Text)
       cmd.Parameters.AddWithValue("@Cus_Telephone_Number", TextBox5.Text)

       conn.Open()
       cmd.ExecuteNonQuery()
       conn.Close()

       MessageBox.Show("We have been successfully Update", "Congratulations", MessageBoxButtons.OK, MessageBoxIcon.Information)
       Form2_Load(e, e)
وجربت اضيف بدل :
كود :
Cus_ID

كود :
Cus_Private_Number

ومثل الشيء
لازم تضيف Parameters الخاص به مثل ما فعلت في كل Parameters الاخرى
مثل الخطأ

كود :
System.Data.OleDb.OleDbException occurred
 HResult=0x80040E14
 Message=Syntax error in UPDATE statement.
 Source=Microsoft Access Database Engine
 StackTrace:
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
  at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
  at Rent_Schedule.Form2.Button3_Click(Object sender, EventArgs e) in D:\my project\Complete Project\Rent Schedule\Rent Schedule\Form2.vb:line 78
  at System.Windows.Forms.Control.OnClick(EventArgs e)
  at System.Windows.Forms.Button.OnClick(EventArgs e)
  at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
  at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
  at System.Windows.Forms.Control.WndProc(Message& m)
  at System.Windows.Forms.ButtonBase.WndProc(Message& m)
  at System.Windows.Forms.Button.WndProc(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
  at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
  at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
  at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
  at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
  at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
  at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
  at Rent_Schedule.My.MyApplication.Main(String[] Args) in :line 81
الكود
كود :
Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=False;")
       Dim sql As String =
           " update [Customer] set " &
           " ( Cus_Name=@Cus_Name, Cus_Address=@Cus_Address, Cus_Region=@Cus_Region, Cus_Telephone_Number=@Cus_Telephone_Number )" &
           " where " &
           "( Cus_ID=@Cus_ID )"

       Dim cmd As New OleDbCommand(sql, conn)
       cmd.Parameters.AddWithValue("@Cus_ID", Label7.Text)
       cmd.Parameters.AddWithValue("@Cus_Name", TextBox1.Text)
       cmd.Parameters.AddWithValue("@Cus_Address", TextBox3.Text)
       cmd.Parameters.AddWithValue("@Cus_Region", TextBox4.Text)
       cmd.Parameters.AddWithValue("@Cus_Telephone_Number", TextBox5.Text)

       conn.Open()
       cmd.ExecuteNonQuery()
       conn.Close()

       MessageBox.Show("We have been successfully Update", "Congratulations", MessageBoxButtons.OK, MessageBoxIcon.Information)
       Form2_Load(e, e)

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

واشكر الاخ الغالي الى قام بإرسال لي الكود الصحيح على ايميلي الخاص

وهذا ماقام بإرساله لي :

والنتيجة سليمة والحمدالله


كود :
Try

           Dim n As String = ComboBox1.Text
           Dim Savecommand As New OleDb.OleDbCommand
           'الاتصال بمزود البيانات
           Dim Connectionstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=False;"
           Dim newconnection As New OleDbConnection(Connectionstring)
           Savecommand.Connection = newconnection
           Savecommand.CommandType = CommandType.Text
           'التعديل هنا ويكون ما تكتبه فى التكست بوكس
           Savecommand.CommandText = "UPDATE Customer SET  Cus_Name = '" & Trim(TextBox1.Text) & "' , Cus_Address = '" & Trim(TextBox3.Text) _
           & "' , Cus_Region = '" & Trim(TextBox4.Text) & "' , Cus_Telephone_Number = '" & Trim(TextBox5.Text) & "' WHERE Cus_Private_Number  like '" & n & "'"
           'فتح الاتصال وعمل التعديل الذى قمت به وبعد ذلك اغلاق الاتصال وتظهر رساله للمستخدم بنجاح التعديل الذى قام به
           newconnection.Open()
           Savecommand.ExecuteNonQuery()
           newconnection.Close()

           MsgBox("تم التعديل", 64, "نجاح")
           '   Me.Close()
           'اظهار الفورم الرئيسى بعد نجاح التعديل واغلاق فورم التعديل
           ' main.Show()
           'اصطياد الاخطاء
       Catch ex As Exception
           'عرض الخطا فى رساله
           MsgBox(ex.Message, 16, "خطأ")

       End Try
       Form2_Load(e, e)
قمت بوضعه لكم ليستفيد كل من يريده
اوك اذا ستسبب اخطاء او اشخاء اخرى فهل تستطيع التعديل او اعطائي كود شغال بدون مشاكل ؟؟
انت كنت ماشي صح باستخدام Parameters لكن عندك خطأ في ترتيب اسطرها
الصفحات : 1 2