Forums Neueste Beiträge
 

Tableadapter und verknüpfte Tabellen

01/06/2009 - 12:35 von Sven Thierfelder | Report spam
Hi all

ich arbeite mit VS2008. Wenn ich ein typisiertes Dataset anlege, werden
hier ja auch die Tableadapter erstellt, über die es möglich sein soll die
Daten aus der Datenbank (*.mdb) auszulesen und zu aktualisieren.
Auch gibt es Beispiele für verknüpfte Tabellen. Hier soll man die
Updatereihenfolge beachten, damit man keine inkonsistenten Daten erhàlt.
Nun habe ich in einer *.mdb 2 Tabellen eine Übergeordnete (A) mit einem
Primàrschlüssel "ID" und eine untergeordnete Tabelle (B) die in einer 1:n
Beziehung zu diesem "ID" steht.

Wenn ich nun das Dataset fülle und danach im Programm eine neue Zeile in
Tabelle A eintrage und danach mehrere Zeilen in Tabelle B die auf die neue
Zeile in A verweist, dann geht alles so lange gut, bis die Daten in die
Datenbank geschrieben werden. Dann werden die neuen ID's aus Tabelle A
richtigerweise in gültige ID's in der Datenbank getauscht, doch die ID's in
der untergeordneten Tabelle B bleiben unberührt. So wie ich das in den
Beispielen verstanden habe, sollte dies eben nicht passieren. Die Beziehung
der Tabellen ist ordnungsgemàß angelegt. Zuerst hatte ich für beide
Tableadapter und ein Update ausgeführt (erst Tabelle A dann Tabelle B) habe
es dann auch schon mal in anderer Reihenfolge probiert und habe dann sogar
nach dem Beispiel für verknüpfte Tabellen erst die gelöschten Datensàtze
aus B entfernt, dann A.Update und dann erst die neue Eintràge in B
eingefügt. Bringt aber alles nicht ... ich habe nach den Updates eine
inkonsistente Datenbank.
Was mache ich denn falsch?

Gruß Sven
 

Lesen sie die antworten

#1 Ralf Schmidt
01/06/2009 - 13:01 | Warnen spam
Sven Thierfelder schrieb:

Wenn ich nun das Dataset fülle und danach im Programm eine neue Zeile in
Tabelle A eintrage und danach mehrere Zeilen in Tabelle B die auf die neue
Zeile in A verweist, dann geht alles so lange gut, bis die Daten in die
Datenbank geschrieben werden. Dann werden die neuen ID's aus Tabelle A
richtigerweise in gültige ID's in der Datenbank getauscht, doch die ID's in
der untergeordneten Tabelle B bleiben unberührt. So wie ich das in den
Beispielen verstanden habe, sollte dies eben nicht passieren. Die Beziehung
der Tabellen ist ordnungsgemàß angelegt.



So wie ich das sind die ID's Autowerte.

Dann must du beim Updaten der Tabelle A diese Neuen ID's abfragen und in deine Datatable_A
übernehmen.
Das macht man am besten im RowUpdate Event des DataAdapters.

Private Sub dataAdapterA_RowUpdated(ByVal sender As Object, ByVal e As _
System.Data.OleDb.OleDbRowUpdatedEventArgs) Handles dataAdapterA.RowUpdated

If e.StatementType = StatementType.Insert Then
Dim cmdNewID As New OleDb.OleDbCommand("SELECT @@IDENTITY",Con)
e.Row("A_ID") = CInt(cmdNewID.ExecuteScalar)
End If

End Sub

Dabei sollte die neue ID wenn du die Verknüpfungen richtig zu den Datatables A & B gesetzt hast
automatisch
übernommen werden.

Wenn du jetzt Table B Updatest sollten diese die richtigen ID's mit in die Tabelle mitnehmen.

Ähnliche fragen