Hallo,
ich probiere Heute schon den ganzen Tag einen Transfer neuer Datensätze von einer AccessDB zur anderen hinzubekommen.
Die Datensätze die setadded sind werden problemlos in die 2. db gechrieben.
Das Problem taucht dann bei den setmodified Datensätzen auf. Sie werden vom Dataadapter erkannt und angezeigt aber die Änderungen werden dann in der 2. db nicht übernommen.
Es kommt auch keine Fehlermeldung. Die Daten sind absolut gleich geblieben.
Die beiden Datenbanken haben fast die gleiche Struktur.
db1 : ID als Autowert, Name als Text, Vorname als Text
db2 : ID als Integer, Name als Text, Vorname als Text
Ich bin jedenfalls absolut ratlos. Vielleicht habt Ihr ja eine Idee.
MFG
DizkoStu
Public Sub Vergleich()
Dim DB_A As DataSet = New DataSet()
Dim DB_B As DataSet = New DataSet()
Dim connectstring_A As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data" & _
"Source=table_A.mdb;"
Dim connectstring_B As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data" & _
"Source=table_B.mdb;"
Dim SelectCust_A As String = "SELECT ID,Name,Vorname FROM Customer_A"
Dim SelectCust_B As String = "SELECT ID,Name,Vorname FROM Customer_B"
Dim KundeAdapter_A As OleDbDataAdapter = New OleDbDataAdapter( _
SelectCust_A, GetAccess(connectstring_A))
Dim Kunde_ACB As OleDb.OleDbCommandBuilder = New _
OleDb.OleDbCommandBuilder(KundeAdapter_A)
KundeAdapter_A.Fill(DB_A, "Customer_A")
Dim KundeAdapter_B As OleDbDataAdapter = New OleDbDataAdapter( _
SelectCust_B, GetAccess(connectstring_B))
Dim Kunde_BCB As OleDb.OleDbCommandBuilder = New _
OleDb.OleDbCommandBuilder(KundeAdapter_B)
KundeAdapter_B.Fill(DB_B, "Customer_B")
Dim row As DataRow
Dim row2 As DataRow
Dim modify As DataRow()
KundeAdapter_B.UpdateCommand = Kunde_BCB.GetUpdateCommand
'KundeAdapter_B.UpdateCommand.Parameters.AddWithValue("@ID",
' SqlDbType.Int)
'KundeAdapter_B.UpdateCommand.Parameters.AddWithValue("@Name",
' SqlDbType.NText)
'KundeAdapter_B.UpdateCommand.Parameters.AddWithValue("@Vorname",
' SqlDbType.NText)
For Each row In DB_A.Tables("Customer_A").Select()
modify = DB_B.Tables("Customer_B").Select("ID = " & row("ID"))
If modify.Length > 0 Then
For Each row2 In modify
If Not compareRow(row, row2) Then
row.SetModified()
End If
Next
Else
row.SetAdded()
End If
Next
MsgBox(KundeAdapter_B.Update(DB_A, "Customer_A").ToString)
End Sub
Function GetAccess(ByVal cs As String) As System.Data.OleDb.OleDbConnection
Dim cnn As New System.Data.OleDb.OleDbConnection()
With cnn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = cs
End With
Return (cnn)
End Function
Public Function compareRow(ByVal rowA As DataRow, ByVal rowB As DataRow) As _
Boolean
' Vergleich der beiden Datarow Objekte
compareRow = True
Dim i As Integer
For i = 0 To rowA.ItemArray.Length - 1
If Not rowA(i).ToString = rowB(i).ToString Then Return False
Next
End Function[u] |