Hallo FZelle,
vielen Dank noch mal für deine Hilfe. Der Tipp war super. Allerdings funktioniert das nicht so, wie ich es gern hätte. Könntest du dir bitte meinen Beispielcode anschauen:
Autovermietung mit Tabelle Customer: {id (AutoID), vName, nName}, Cars: {id autoID, model, owner (Fremdschlüssel zu CustomerId)}
Private Sub Button28_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button28.Click
Dim DS As New DataSet
Dim Customers As DataTable = GetCustomerTable()
Dim Cars As DataTable = GetCarsTable()
DS.Tables.Add(Customers)
DS.Tables.Add(Cars)
'Relation der beiden Tabellen einstellen
Dim Rel As New DataRelation("CustomerCars", Customers.Columns("id"), _
Cars.Columns("owner"))
DS.Relations.Add(Rel)
'Neue Zeilen erstellen
Dim R As DataRow = Customers.NewRow
Customers.Rows.Add(R)
R("vName") = "neuer VName"
R("nName") = "neuer nName"
Dim CR As DataRow = Cars.NewRow
Cars.Rows.Add(CR)
CR("model") = "Lamburgini"
CR.SetParentRow(R, Rel)
'Alles abspeichern
Dim A As New OleDb.OleDbDataAdapter
AddHandler A.RowUpdated, AddressOf CustomerRowInsert 'Handler anmelden
Dim CMD As New OleDb.OleDbCommand("INSERT INTO Customer (vName, nName)" & _
"VALUES (?,?);", DBConnection)
CMD.Parameters.Add("vName", OleDb.OleDbType.VarChar, 100, "vName")
CMD.Parameters.Add("nName", OleDb.OleDbType.VarChar, 100, "nName")
A.InsertCommand = CMD
A.Update(Customers)
RemoveHandler A.RowUpdated, AddressOf CustomerRowInsert
CMD = New OleDb.OleDbCommand("INSERT INTO Cars (model, owner) VALUES (" & _
"?,?);", DBConnection)
CMD.Parameters.Add("model", OleDb.OleDbType.VarChar, 100, "model")
CMD.Parameters.Add("owner", OleDb.OleDbType.Integer, 4, "owner")
A.InsertCommand = CMD
A.Update(Cars)
End Sub
Private Function GetCustomerTable() As DataTable
Dim T As New DataTable
Using CMD As New OleDb.OleDbCommand("SELECT * FROM Customer", _
DBConnection)
Using A As New OleDb.OleDbDataAdapter(CMD)
A.Fill(T)
End Using
End Using
Return T
End Function
Private Function GetCarsTable() As DataTable
Dim T As New DataTable
Using CMD As New OleDb.OleDbCommand("SELECT * FROM Cars", DBConnection)
Using A As New OleDb.OleDbDataAdapter(CMD)
A.Fill(T)
End Using
End Using
Return T
End Function
Private Sub CustomerRowInsert(ByVal sender As Object, ByVal e As _
System.Data.OleDb.OleDbRowUpdatedEventArgs)
'Aktuelle ID holen
Using cmd As New OleDb.OleDbCommand("SELECT @@IDENTITY;", DBConnection)
Dim o As Object = cmd.ExecuteScalar()
Dim ID As Integer = Convert.ToInt32(o)
End Using
For Each R As DataRow In e.Row.GetChildRows("CustomerCars")
R("owner") = ID
Next
End Sub Im Handler CustomerRowInsert erhalte ich für die ChildRows einer Row aus der Tabelle Customer keine Elemente... OBWOHL ich eine neue Zeile mit SetParentRow beim Hinzufügen der neuen Zeile aus Cars auf die neue Zeile aus Customers verwiesen habe.
Falls das, was ich hier als Beispiel angebracht habe, ein schlechter Stil ist und/oder man es so nicht/ machen sollte, wäre ich für Verbesserungsvorschläge sehr dankbar!
Vielen Dank noch mal,
Chris |