تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
هل جملة التعديل صحيح لدي ارجو المساعده السرريعة
#1
السلام وعليكم ورحمته الله وبركاتة 

لدي جملة تعديل في الداتا جريد  ولكن عند التعديل يقوم ويعدل كل الصفوف باول قيمة في الصف الاول  انا استخدمات طريقة الاستعلام التالية هل هي صحيحة 

PHP كود :
For As Integer 0 To DataGridView1.RowCount 2
            Dim a 
As New OleDb.OleDbCommand
            a
.Connection con
            a
.CommandType CommandType.Text
            a
.CommandText "update QYE set PART_NO='" DataGridView1.Rows(i).Cells(0).Value "', DES='" DataGridView1.Rows(i).Cells(1).Value "', QTY=" Val(DataGridView1.Rows(i).Cells(2).Value) & ",UP=" Val(DataGridView1.Rows(i).Cells(3).Value) & ", TP=" Val(DataGridView1.Rows(i).Cells(4).Value) & " where inv='" TextBox2.Text "'"


 
           If con.State ConnectionState.Open Then con.Close()
 
           con.Open()
 
           a.ExecuteNonQuery()
 
       Next
        MsgBox
(" OK  EDIT IS DONE "MsgBoxStyle.ApplicationModal)
 
       con.Close() 
الرد }}}
تم الشكر بواسطة:
#2
عن تجربة update متنفعش لحلتك
مثلا 
لو الدتا جريد عبارة عن فاتورة وفيها
5 صفوف عبارة عن اصناف
لو حبيت تعدل بالحذف وتخليهم 
4 صفوف او 4 اصناف 
upate مش هتحذف الصف الخامس
مثلا الى انت حذفته لانها ببساطة
بتعدل قيم وصفوف موجودة بالفعل
ومش شغلتها تحذف
ايه الحل ؟
ببساطة هتقوم بالحذف المستند
بشرط رقمه لانه لا يتكرر
وضيفه تاني بعد التعديل كانك بتحفظ
مستند جديد

دي الفكرة الى بستخدمها
 وممكن احد الاخوة يكون عنده فكرة تاني
 هذا ما اعلمه والله اعلم

وكود
PHP كود :
"DELETE FROM QYE WHERE inv like '" TextBox2.Text "'"
 
       For I As Integer 0 To DataGridView1.Rows.Count 2
            
"INSERT INTO QYE (PART_NO,DES,QTY,UP,TP) Values ('" DataGridView1.Rows(i).Cells(0).Value "','" DataGridView1.Rows(i).Cells(1).Value "'," Val(DataGridView1.Rows(i).Cells(2).Value) & "," Val(DataGridView1.Rows(i).Cells(3).Value) & "," Val(DataGridView1.Rows(i).Cells(4).Value) & ")"
 
       Next 
صلى الله على نبينا محمد
اخيكم / محمود صالح
  قال الزهري رحمه الله  
 مــا عُـــبـِد الله بشئ أفضل من العلم 
الرد }}}
تم الشكر بواسطة: مراد بورجي
#3
شكرا اخي جزاك الله الف خير
بس اخي فكرة الحذف والادخال من جديد صعبة ومش عملية انا بقوم باستعراض البيانات بلاول في الجريد فيو ومن تم اقوم بعمل تعديل بحسب الكود المرفق ولكن الكود لو كان عندي خمس اصناف واقوم بعمل التعديل يقوم يعدل جميع الاصناف الخمسة باخر صنف
الرد }}}
تم الشكر بواسطة:
#4
(23-01-18, 11:50 AM)مراد بورجي كتب : شكرا اخي جزاك الله الف خير  
بس اخي فكرة الحذف والادخال من جديد صعبة ومش عملية  انا بقوم باستعراض البيانات بلاول في الجريد فيو ومن تم اقوم بعمل تعديل بحسب الكود المرفق ولكن الكود لو كان عندي خمس اصناف واقوم بعمل التعديل يقوم يعدل جميع الاصناف الخمسة باخر صنف

تمام انا فاهم ولان انت مش واخد بالك من عمل update

ببساطة بعيدا عن الالفاظ العلمية

جملة update هي عبارة عن حلقة تكرار بداخلها 
وكمثال
جرب ان تضع جملة update لوحدها دون حلقة تكرار for تمام (مع تثبيت (rows(0 مثلا)
هتلاقي الى حصل كتالي (خلينا مع مثال الفاتورة)
هتلاقي كل الصفوف (الى هما 5 صفوف )الموجودة في قاعدة البيانات اتغيرت ببيانات الصف الاول datagridview
معنى كده زي ما قلتلك انها حلقة تكرارية داخلية ان صح التعبير

طيب في مثالك انت لما نضيف على جملة update عليها حلقة تكرارية for كمان كيف حكون عملها ركز
الاول اخدت بيانات الصف الاول datagridview وغيرت جميع الصوف الخمسة الى في قاعدة البيانات بنفس بيانات الصف الاول
وبعد كده اخدت الصف الثاني datagridview وغيرت جميع الصوف الخمسة الى في قاعدة البيانات بنفس بيانات الصف الثاني
وهكذا لغاية الصف الاخير هتلاقي معلومات الصف الاخير هي الموجودة في الخمسة صوف في قاعدة البيانات

فهمت شغل  update ازاي في مثالك

علشان كده بقلك متنفعش في حالتك دي
صلى الله على نبينا محمد
اخيكم / محمود صالح
  قال الزهري رحمه الله  
 مــا عُـــبـِد الله بشئ أفضل من العلم 
الرد }}}
تم الشكر بواسطة: مراد بورجي
#5
طيب ايش الحل في رائكم بطريقتك معناه اننا استعلم عن الفاتورة واقوم بحذفها ومن تم اعيد تعديل عليها وحفظها تقصد كذا بدون تنظيف الجريد فيو
الرد }}}
تم الشكر بواسطة:
#6
الخطاء في انك مثبت هذة القيمة في كل حلقة تكرار
where inv='" TextBox2.Text "'"
المفروض ان تضع رقم الــ ID الخاص بالسجل الذي تقوم بعمل Update له
والـ ID المفروض يتغير في كل لفة 



أخطاء أخرى : لا أعرف كيف أصنفها , إعتبرها تحت مسمى الجودة
أولاً : Dim a As New OleDb.OleDbCommand
من المفترض أن تكون خارج الحلقة وليس في كل لفة تقوم بإنشاء أمر جديد
أيضاً : a.Connection = con
ما هو ثابت لماذا تقوم بتعيين القيمة له في كل لفة

ثانياً : If con.State = ConnectionState.Open Then con.Close()
            con.Open()
المفروض أن تسأل عن حالة الإتصال فقط مرة واحدة قبل الدخول إلى الحلقة
وإذا مغلق يتم فتح الإتصال قبل الدخول إلى الحلقة

وبعد الإنتهاء من كامل حلقة التكرار تقوم بإغلاق الإتصال


----------------------------------------
داخل الحلقة المفرتض أن تعين قيمة CommandText
وتنفيذ الإستعلام ExecuteNonQuery

فقط لاغير 
-------------------------------------------------------------


            


الحل :
أولاً  : في كل حلقة
-----------------------------
where inv='" TextBox2.Text "'"
ضع رقم الــ ID ( الـprimary key ) الخاص بالسجل الذي تقوم بعمل Update له
ليصبح :
PHP كود :
where inv Val(DataGridView1.Rows(i).Cells(xxxxxxxxxxxxxxxxx).Value
xxxxxxxxxxxxxxxxx = رقم الــIndex الخاص بالعامود ID في الداتا قريد فيو
إذا كان الــID عبارة عن رقم
قم بإزالة التنصيص المعلم باللون الأحمر , تماماً مثل ما عملت مع الحقل QTY بدون تنصيص
'" & Val(DataGridView1.Rows(i).Cells(xxxxxxxxx).Value) & "'"
-----------------------------






الكود الكامل : بعد التعديل
PHP كود :
       Dim a As New OleDb.OleDbCommand() With {.Connection con, .CommandType CommandType.Text}
 
       If con.State ConnectionState.Open Then con.Close() : con.Open()

 
       Try
            For i 
As Integer 0 To DataGridView1.RowCount 2
                a
.CommandText "update QYE set PART_NO='" DataGridView1.Rows(i).Cells(0).Value "', DES='" DataGridView1.Rows(i).Cells(1).Value "', QTY=" Val(DataGridView1.Rows(i).Cells(2).Value) & ",UP=" Val(DataGridView1.Rows(i).Cells(3).Value) & ", TP=" Val(DataGridView1.Rows(i).Cells(4).Value) & " where inv='" Val(DataGridView1.Rows(i).Cells(xxxxxxxxx).Value) & "'"
 
               a.ExecuteNonQuery()
 
           Next
            MsgBox
(" OK  EDIT IS DONE "MsgBoxStyle.ApplicationModal)
 
       Catch ex As Exception
            MsgBox
(ex.Message)
 
       Finally
            con
.Close()
 
       End Try 

سؤااااااااااااااااااااااااااااااااااااااااااااااال يطرح نفسة ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

لماذا تعتمد على الـDatagridview بينما الجدول الأصل موجود
لماذا لا تتعامل مع الجدول مباشرة الــ DataRow

تابع معي هذا الدرس
مثال بسيط لبرنامج إجازات فقط لأغراض الشرح (الدرس الأول)
الرد }}}
تم الشكر بواسطة: مراد بورجي
#7
بعد اذن صاحب الموضوع

اخي  عبدالله الدوسري
طريقتك انا استخدمتها قبل كده حلت 90% من الموضوع ولكن مع التجربة اكتشفت مشكلة وهي التعديل بالحذف وليس التعديل في القيم مع وجود الصف
مثلا كما قلت سابقا فاتورة 5 صفوف او اصناف اراد ان يحذف صف او صنف فاصبحت الدتا جريد فيو 4 بدل 5 ويريد التعديل

ما الحل بنفس جملة updata

لم اجد الى الطريقة الحذف والاضافة مرة اخرى ولو عنك حل 

تبقى مشكور جدا
صلى الله على نبينا محمد
اخيكم / محمود صالح
  قال الزهري رحمه الله  
 مــا عُـــبـِد الله بشئ أفضل من العلم 
الرد }}}
#8
PHP كود :
where inv Val(DataGridView1.Rows(i).Cells(xxxxxxxxxxxxxxxxx).Value
شكرا اخي عبدالله وجزاك الله الف خير ولكن البريمري كي  ليس موجود داخل الداتا جريد بل هو من التكست بوكس انا استعلم عنم بواسطة الكود التالي 
PHP كود :
  'Else
        Dim DataAdapter As New OleDbDataAdapter("SELECT part_no,des,qty,up,tp from QYE   WHERE inv='" & TextBox2.Text & "'", con)
        con.Open()
        dataset1.Clear()
        DataAdapter.Fill(dataset1, "QYE")
        Me.DataGridView1.Refresh()
        con.Close()



        DataGridView1.DataSource = dataset1
        DataGridView1.DataMember = "QYE"


        DataGridView1.Refresh()

        DataGridView1.RowHeadersWidth = 25


        DataGridView1.Columns(0).Width = 180
        DataGridView1.Columns(1).Width = 200
        DataGridView1.Columns(2).Width = 100
        DataGridView1.Columns(3).Width = 150
        DataGridView1.Columns(4).Width = 150
        DataGridView1.Columns(0).HeaderText = "PART NO"
        DataGridView1.Columns(1).HeaderText = "DESCREPTION"
        DataGridView1.Columns(2).HeaderText = "QTY"
        DataGridView1.Columns(3).HeaderText = "UNIT RATE"
        DataGridView1.Columns(4).HeaderText = "TOTAL" 

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


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#9
(23-01-18, 01:33 PM)محمود صالح كتب : بعد اذن صاحب الموضوع

اخي  عبدالله الدوسري
طريقتك انا استخدمتها قبل كده حلت 90% من الموضوع ولكن مع التجربة اكتشفت مشكلة وهي التعديل بالحذف وليس التعديل في القيم مع وجود الصف
مثلا كما قلت سابقا فاتورة 5 صفوف او اصناف اراد ان يحذف صف او صنف فاصبحت الدتا جريد فيو 4 بدل 5 ويريد التعديل

ما الحل بنفس جملة updata

لم اجد الى الطريقة الحذف والاضافة مرة اخرى ولو عنك حل 

تبقى مشكور جدا





ممكن تذكر لي طريقتك في حذف السجل
المفروض تتعامل مع Datarow
وليس مع الــ Datagridview


ببساطة الجدول يحتوي على صفوف Rows
كل Row له خاصية إسمها RowState تدل على حالة السجل إذا كان محذوف أو جديد أو لم يتم التعديل علية أو غير مرتبط بأي جدول أو تم التعديل علية
PHP كود :
    Added    
The row has been added to a DataRowCollection
, and AcceptChanges has not been called.

Deleted    
The row was deleted using the Delete method of the DataRow
.

Detached    
The row has been created but is not part of any DataRowCollection
A DataRow is in this state immediately after it has been created and before it is added to a collection, or if it has been removed from a collection.

Modified    
The row has been modified 
and AcceptChanges has not been called.

Unchanged    
The row has not changed since AcceptChanges was last called


يأتي الآن دور الـTableadapter


يقوم الـTableadapter عند تنفيذ أمر Update بالإلتفاف على جميل السجلات في الجدول (على سبيل المثال : Update لجدول معين )
ويقوم الـTableadapter بسؤال كل سجل عن حالتة 
إذا 

Added
يقوم الـTableadapter بتنفيذ أمر INSER ضد هذا السجل

إذا 
Deleted
يقوم الـTableadapter بتنفيذ أمر DELETE ضد هذا السجل



إذا 
Detached
لا يقوم الـTableadapter بتنفيذ أي شيء ضد هذا السجل
Detached تعني ان هذا السجل تم إنشائة ولكن لا يرتبط بأي جدول
ممكن أنت جلبتة من قاعدة البيانات لكنك نفذة أمر remove علية لإخراجة من الجدول ,, لاحض هذا لا يعني الحذف بل فقط إخراج من المجموعة
أو ممكن أنت أنشائت سجل جديد ولكنك لم تقم بإضافتة في أي جدول



إذا 
Modified
يقوم الـTableadapter بتنفيذ أمر Update ضد هذا السجل
يعني سيقوم بالتعديل علية حسب البيانات الجديدة



إذا 
Unchanged
لا يقوم الـTableadapter بتنفيذ أي شيء ضد هذا السجل
لأنة وبكل بساطة لا يوجد أي تغيير على هذا السجل




وهكذا دواليك مع جميع الصفوف الموجودة بالجدول حتى ينتهي الـTableadapter 
كلها تحت أمر واحد وهو Update
الرد }}}
تم الشكر بواسطة: مراد بورجي , محمود صالح
#10
جميل جدا اخي عبدالله ولكن هل هناك كود بسيط يوضح عملية Modified في Tableadapter مع جملة التعديل على الداتا جريد بشرط
الرد }}}
تم الشكر بواسطة:



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


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