Hallo Forum,
da meine Datenquelle keine Relationen mitbringt möchte ich den DbCommandSetDataProvider nutzen, um zwei Tabellen miteinander zu verknüpfen.
Die erste Tabelle “AngPosition” enthält 1 oder mehrere Positionen, die zweite Tabelle “AngPositionElement” enthält 1 oder mehrere Artikel, die in den Positionen angeboten werden, z. B.:
Position 1, bestehend aus:
1 x Artikel A
3 x Artikel B
Position 2, bestehend aus:
2 x Artikel A
4 x Artikel B
Die Eindeutigkeit des Datensatzes erstreckt sich aber über 5 Spalten:
Jahr, lfdNr, Wiederholungsnummer, Alternativkennzeichen und Positionsnummer
z.B. 15|0815|0|A|1
Da ich beim DbCommandSetDataProvider keine Möglichkeit sehe Relationen über mehrere Spalten zu bilden, habe ich in den SQL-Commands Ergebnisspalten gebildet die das Ergebnis der 5 Spalten zusammengesetzt bilden.
Dim Command1 As New SqlCommand("Select ltrim(str(NrJahr,2)) + ltrim(str(NrNummer,5)) + ltrim(str(NrWiederholung,2)) + ltrim(str(Position,5)) + NrAlternative as Angebotsnummer, ...
Dim Command2 As New SqlCommand("Select ltrim(str(NrJahr,2)) + ltrim(str(NrNummer,5)) + ltrim(str(NrWiederholung,2)) + ltrim(str(Position,5)) + NrAlternative as Angebotsnummer, ...
Dim lalProvider As New DbCommandSetDataProvider
lalProvider.AddCommand(Command1, "AngPosition")
lalProvider.AddCommand(Command2, "AngPositionElement")
lalProvider.AddRelation("Position2Element", "AngPosition", "AngPositionElement", "Angebotsnummer", "Angebotsnummer")
lalAngebot.DataSource = lalProvider
Funktioniert prinzipiell, aber leider werden im Ausgabeformular in jeder Position jeweils alle Elemente aller Positionen ausgegeben, z. B.:
Position 1, bestehend aus:
1 x Artikel A
3 x Artikel B
2 x Artikel A
4 x Artikel B
Position 2, bestehend aus:
1 x Artikel A
3 x Artikel B
2 x Artikel A
4 x Artikel B
Welche Möglichkeiten gibt es hier noch die Relationen zu setzen (außer direkt in der Datenbank) oder das Problem anders zu lösen?
Danke und Gruß,
Michael Holder