PDA

Vollständige Version anzeigen : zweite Tabelle in der TableMappings mit Daten füllen


TykaAndreas
17.09.2003, 20:50
ich will einen DataAdapter mit mehreren Tabellen auffüllen
Wie kann ich jetzt aber die zweite Tabelle in der TableMappings mit Daten füllen

Private Sub S_155_TableMapp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S_155_TableMapp.Click

strSql = "SELECT CustomerID,CompanyName FROM Customers"
Dim DaAd As New OleDbDataAdapter(strSql, cn)
Dim ds As New DataSet
Dim tblMapp As DataTableMapping

tblMapp= DaAd.TableMappings.Add("Customers", "tblMappCustomers")

Try

tblMapp = DaAd.TableMappings.Add("Orders", "tblMapp_Orders")

Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try

End Sub

Serge
18.09.2003, 08:15
Ich weiss nicht ob das die optimale Lösung ist aber ich habe dieses Problem so gelöst das ich eine Abfrage/Sicht auf die zwei Tabellen gelegt hab und diese dann in den Dataset hole.Und dann das Tablemappings mit den Werten der Abfrage fülle

TykaAndreas
18.09.2003, 16:32
genau da komm ich nicht weiter , wie hast du es gemacht ?

Wenn ich mir diese 3 Zeilen ansehe aus meinem Codebeispiel :
strSql = "SELECT CustomerID,CompanyName FROM Customers"
Dim DaAd As New OleDbDataAdapter(strSql, cn)
tblMapp= DaAd.TableMappings.Add("Customers", "tblMappCustomers")

der Auflistung wird eine Tablle hinzugefügt "tblMappCustomers" sie ist mit den Daten die der SQL-String zurückgibt gefüllt .
füge ich eine zweite Tabelle der Auflistung hinzu , und will aber dass diese Tablle auch Daten hat - brauch ich einen andern SQL string - dafür seh ich keinen anderen Weg als eine neuen DataAdapter zu deklarieren ?

Serge
22.09.2003, 09:40
Ich hab es selber zwar nicht so gemacht aber es besteht die Möglichkeit die Inhalte zweier Datasets zusammen zuführen und zwar mit der
DS1.merge(DS2)

Hab leider keine Zeit das zu testen aber probiers mal.

TykaAndreas
22.09.2003, 23:09
ich habe jetzt zwei Tabellen in einem Dataset, allerdings kommt man nicht dran vorbei zwei dataadapter zu deklarieren .
Was mir noch fehlt , momentan klappt es nur wenn es einfache SQLStrings sind , sobald ein JOIN dazukommt gehts nicht , also dem ADapter ist e egal aber demm tableMapping nicht
(wollte den Code eigentlich Convertriert einsetzten aber das Teil streikt)

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim tblMapp As DataTableMapping
Dim DaAd As OleDbDataAdapter
Dim DaAd2 As OleDbDataAdapter

strSql = "SELECT Orders.OrderID FROM Orders"
DaAd = New OleDbDataAdapter(strSql, cn)
tblMapp = DaAd.TableMappings.Add(strSql, "tblMapp_Order")

strSql = "SELECT Customers.CustomerID FROM Customers"
DaAd2 = New OleDbDataAdapter(strSql, cn)
tblMapp = DaAd2.TableMappings.Add(strSql, "tblMapp_Customer")

Dim ds As New DataSet
Dim ds2 As New DataSet

Try
DaAd.Fill(ds, "tblMapp_Order")
DaAd2.Fill(ds, "tblMapp_Customer")
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try

Dim dt As DataTable = ds.Tables(1)
Dim custrow As DataRow
For Each custrow In dt.Rows
ListBox1.Items.Add(custrow.Item("OrderID"))
Next

End Sub

TykaAndreas
23.09.2003, 19:10
hab jetzt das was ich wollte , SQL-String mus statt "JOIN", "WHERE" haben, wie es mit LEFTJOIN geht weis ich nicht .
Die Tablemapping Auflistung kann man weglassen , es geht auch damit aber soweit ich es sehe ist die Auflistung nur dafür da im Dataset eventuell andere Spaltenbez. zu setzen. Das ist zwar die häufigste Beschreibung die man dazu findet aber da es sich um eine Auflistung handelt dachte ich es wäre noch für was andres brauchbar.

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim tblMapp As DataTableMapping
Dim DaAd As OleDbDataAdapter
Dim ds As New DataSet
Dim dt As DataTable
Dim custrow As DataRow

strSql = "SELECT Products.ProductID, Products.ProductName, [Order Details].UnitPrice" & _
" FROM [Order Details],Products WHERE" & _
" ([Order Details].ProductID = Products.ProductID)"

<b>DaAd </b> = New OleDbDataAdapter(strSql, cn)

strSql = "SELECT Orders.CustomerID,Orders.Shipname,Customers.ContactName" _
& " FROM Customers,Orders WHERE " & _
"(Customers.CustomerID = Orders.CustomerID)"

<b>DaAd</b> = New OleDbDataAdapter(strSql, cn)

<b>Try</b>
DaAd.Fill(ds, "tblMapp_Order")
DaAd.Fill(ds, "tblMapp_Customer")
Catch ex As Exception
MessageBox.Show(ex.ToString())
<b>End Try</b>

dt = ds.Tables(0)
<b>For</b> Each custrow In dt.Rows
ListBox1.Items.Add(custrow.Item("CustomerID") & " " & custrow.Item("Shipname") & " " & _
custrow.Item("ContactName"))
<b>Next</b>
DataGrid1.DataSource = ds.Tables.Item(1)

End Sub