تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة تحديث جدول عن طريق Gridview
#1
السلام عليكم ... لدي برنامج يعمل على عرض بيانات جدول مسمى Store2 في Datagrideveiw ولكن هناك مشكلة عند اجراء عملية حفظ التعديل كود تحميل البيانات
كود :
If Conn.State() Then Conn.Close()
        Conn.Open()
        SQLs = "SELECT Cat,SubCatCode,OldJob,NewJob, OldSalary,NewSalary,GiveDate,OrderNo,OrderDate FROM Store2;"
        ADP = New OleDb.OleDbDataAdapter(SQLs, Conn)
        ADP.TableMappings.Add("Table", "Store2")
        ADP.TableMappings(0).ColumnMappings.Add("Name", "First Name")
        ADP.Fill(DataSet1)
        BindingSource1.DataSource = DataSet1
        BindingSource1.DataMember = "Store2"
        DataGridView1.DataSource = BindingSource1
كود التحديث للبيانات
كود :
BindingSource1.EndEdit()
        ADP.Update(DataSet1)
حيث تم اضافة BindingSource1 و DataSet1 من الTools و النهج conn الخاص بالاتصال يعمل بشكل جيد
رسالة الخطا هي
إقتباس :Update requires a valid UpdateCommand when passed DataRow collection with modified rows.
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم ورحمة الله وبركاته

طريقتك معقدة ... هذه الطريقة التي اعمل بها وهي جيدة :

كود :
Public Class Form1


    Dim DA As OleDb.OleDbDataAdapter
    Dim CMD As OleDb.OleDbCommand
    Dim CB As OleDb.OleDbCommandBuilder
    Dim DS As DataSet
    Dim BS As BindingSource


    Private Sub SaveCommand()

        
        CMD = New OleDb.OleDbCommand("SELECT Cat,SubCatCode,OldJob,NewJob, OldSalary,NewSalary,GiveDate,OrderNo,OrderDate FROM Store2", Conn)
        DA = New OleDb.OleDbDataAdapter(CMD)
        CB = New OleDb.OleDbCommandBuilder(DA)
        DS = New DataSet
        DS.Clear()
        DA.Fill(DS, "Store2")
        BS = New BindingSource(DS, "Store2")


        DataGridView1.DataSource = BS


    End Sub


End Class

وفي زر الحفظ :
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        BS.EndEdit()
        DA.Update(DS, "Store2")
    End Sub


مع ملاحظة أن هذه الطريقة لا تحتاج إلي فتح الإتصال بقاعدة البيانات (بتتصل لوحدها) يعني لا نحتاج للكود التالي عند التعامل معها :

كود :
If Conn.State() Then Conn.Close()
Conn.Open()



****
***
**
*
(وَقُل رَّبِّ زِدْنِي عِلْمًا)

الرد }}}
تم الشكر بواسطة:
#3
بارك الله فيك ... جاري التجريب ... ان شاء الله تكون الامور على ما يرام ... مشكوووووووووووور
الرد }}}
تم الشكر بواسطة:
#4
اخي العزيز ... تمت التجربة ولكني حصلت على رسالة خطأ أخرى وهي

إقتباس :Argument 'Prompt' cannot be converted to type 'String'.

؟؟؟؟ افيدونا افادكم الله ....
الرد }}}
تم الشكر بواسطة:
#5
ممكن ترفقي برنامجك للتعديل ؟
(وَقُل رَّبِّ زِدْنِي عِلْمًا)

الرد }}}
تم الشكر بواسطة:
#6
اخي العزيز قمت بأقتطاع جزء من البرنامج ووضعتة في مشروع جديد لتفادي التعقيدات الاخرى ... جزاك الله خير الجزاء


الملفات المرفقة
.zip   New test.zip (الحجم : 189.56 ك ب / التحميلات : 51)
الرد }}}
تم الشكر بواسطة:
#7
هل تستخدمين فيجوال بيسك 2012 ؟
(وَقُل رَّبِّ زِدْنِي عِلْمًا)

الرد }}}
تم الشكر بواسطة:
#8
نعم ... اكواد البرنامج هي

في الفورم

Public Class Form1

Dim DA As OleDb.OleDbDataAdapter
Dim CMD As OleDb.OleDbCommand
Dim CB As OleDb.OleDbCommandBuilder
Dim DS As DataSet
Dim BS As BindingSource
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim P1 As String
P1 = Application.StartupPath & "\19\"
Call PoolConnection(P1, 19)


CMD = New OleDb.OleDbCommand("SELECT Cat,SubCatCode,OldJob,NewJob, OldSalary,NewSalary,GiveDate,OrderNo,OrderDate FROM Store2", Conn)
DA = New OleDb.OleDbDataAdapter(CMD)
CB = New OleDb.OleDbCommandBuilder(DA)
DS = New DataSet
DS.Clear()
DA.Fill(DS, "Store2")
BS = New BindingSource(DS, "Store2")


DataGridView1.DataSource = BS
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BS.EndEdit()
DA.Update(DS, "Store2")
End Sub
End Class

في الموديل

Imports System.IO
Imports System.Data.OleDb



Module Module1
Public Conn As New OleDb.OleDbConnection
Public Cmd As New OleDb.OleDbCommand
Public DBpass As String = ""
Public DBPath As String = ""
Public USERNAME, PASSWORD, SQLs, ImageName(30) As String
Public FName As String = "لم يتم تحميل اضبارة"
Public Usercode, CAT, SUBCAT, BirthDate, EID, ImageNo, ImageQTY As Integer, UnSearch As Boolean
Public Sub GeneratePath(ByVal P As String)
On Error Resume Next
MkDir(P)
ChDir(P)
End Sub
Public Sub dataconnection()
If Conn.State = ConnectionState.Open Then ' اذا كان الاتصال مفتوح اغلقه
Conn.Close()
End If
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath & ";Jet OLEDBBig Grinatabase Password=" & DBpass
'Application.StartupPath & "\data\PASSWORD.mdb
If Not Conn.State = ConnectionState.Open Then
'افتح الاتصال
Conn.Open()
End If

End Sub
Public Sub PoolConnection(P, F)
Dim FN As String

On Error GoTo MisDB

FN = P & "\" & F & ".mdb"

ret:
If Conn.State = ConnectionState.Open Then ' اذا كان الاتصال مفتوح اغلقه
Conn.Close()
End If
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FN & ";Jet OLEDBBig Grinatabase Password=" & DBpass
If Not Conn.State = ConnectionState.Open Then
'افتح الاتصال
Conn.Open()
End If
GoTo E
MisDB:
Call CopyDB(P, F)
GoTo ret
E:
End Sub

'نسخ قاعدة البيانات
Sub CopyDB(P, F)
Dim FN As String
On Error GoTo E
FN = P & "\" & F & ".mdb"
FileCopy(Application.StartupPath & "\BoxFile.mdb", FN)
E:
End Sub

Public Function Logon() As Boolean
If Conn.State() Then Conn.Close()
Conn.Open()
Dim cmd As New OleDbCommand(SQLs, Conn)
Dim dr As OleDbDataReader
dr = cmd.ExecuteReader()
If dr.Read() = True Then
Usercode = dr.Item(2)
Conn.Close()
Logon = True
Else
Conn.Close()
Logon = False
End If
End Function

Public Sub FILLCOMBOBOX(ByVal TABLE As String, ByVal FIELD As String, ByVal COMBO As Object, ByVal Cond As String)
On Error Resume Next
Dim BS As New BindingSource
Dim DS As New DataSet
Dim str As String = "SELECT " & FIELD & " FROM " & TABLE
If Cond <> "" Then str = str & " " & Cond
Dim ADP As New OleDb.OleDbDataAdapter(str, Conn)
ADP.Fill(DS, "TBL")
BS.DataSource = DS
BS.DataMember = "TBL"
COMBO.Items.Clear()
COMBO.DataSource = BS
COMBO.DisplayMember = FIELD
COMBO.ValueMember = FIELD
ADP.Dispose()
End Sub



End Module
الرد }}}
تم الشكر بواسطة:
#9
علي العموم أنا نسخت الأكواد لبرنامج آخر وجربته ويعمل جيداً ولم يظهر لي ذلك الخطأ اللي ذكرتيه ربما يوجد خطأ في مكان آخر من مشروعك !!
(وَقُل رَّبِّ زِدْنِي عِلْمًا)

الرد }}}
تم الشكر بواسطة:
#10
اخي العزيز هذه نسخة 2008 مع التقدير ....


الملفات المرفقة
.zip   New VB2008.zip (الحجم : 176.63 ك ب / التحميلات : 62)
الرد }}}
تم الشكر بواسطة:



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


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