Forums Neueste Beiträge
 

Tabellen verbinden und im DataGridView anzeigen

20/01/2008 - 23:37 von Jörn Janz | Report spam
Hallo NG,

ich möchte in einem DataGridView Auftragsdaten (Tabelle:
uebertragungsprotokoll) und die passenden Artikeldaten in einem
DataGridView anzeigen. Ein Auftrag enthàlt immer nur einen Artikel.
Die Artikeldaten befinden sich in einer weiteren Tabelle.
Mein Problem ist folgendes:
Die Artikelnummer - "artnr" in der Tabelle "prodorders" hat leider ein
anderes Format wie die Artikelnummer
in der Artikel Tabelle. In der Tabelle "prodorders" hat die
Artikelnummer führende Nullen und in der Tabelle mit den Artikeldaten
fehlen die Nullen.
Beispiel: prodorders: 0004711 / artikel: 4711

Gibt es eine Möglichkeit in einer SQL Abfrage die führenden Nullen zu
"ignorieren"?

Sonst würde ich die Tabelle prodorders einlesen und die führenden
Nullen entfernen und dann mit der
Artikel Tabelle verbinden. Ich habe leider keine große Erfahrung mit
DataSet,DataTable & Co. und würde
mich über Tips sehr freuen.

Gruß - Jörn

Dim conn As New OdbcConnection(strConn) ' strConn = meine ODBC
Verbindung

Try
conn.Open()
Dim selCmd As New OdbcCommand("SELECT
Fertigungsauftrag,mhd,artnr FROM uebertragungsprotokoll.prodorders p
where prodlinie=2 order by mhd desc", conn)
Dim da As New OdbcDataAdapter(selCmd)
Dim ds As New DataSet
Dim dt As New DataTable

da.Fill(dt)
Dim bs As New BindingSource
dv = dt.DefaultView
bs.DataSource = dt

With Me.dgvFertigungsauftrag ' mein DataGridView im
Formular
.MultiSelect = False
.ReadOnly = True
.DataSource = bs
End With

Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler")

Finally
conn.Close()

End Try
 

Lesen sie die antworten

#1 Peter Fleischer
21/01/2008 - 06:09 | Warnen spam
"Jörn Janz" schrieb im Newsbeitrag
news:

Die Artikelnummer - "artnr" in der Tabelle "prodorders" hat leider ein
anderes Format wie die Artikelnummer
in der Artikel Tabelle. In der Tabelle "prodorders" hat die
Artikelnummer führende Nullen und in der Tabelle mit den Artikeldaten
fehlen die Nullen.
Beispiel: prodorders: 0004711 / artikel: 4711

Gibt es eine Möglichkeit in einer SQL Abfrage die führenden Nullen zu
"ignorieren"?



Hi Jörn,
ich vermute mal, dass die Artikelnnumer in "prodorders" eine Zeichenkette
ist und die in "artikel" numerisch ist. Für solchen Fall würde ich als
erstes die Datenbanken konvertieren, so dass die logisch in Beziehung
stehenden Spalten auch physisch in Beziehung gesetzt werden können. Wenn
jedoch die Spalte in "prodorders" als Zeichenkette gewàhlt wurde, weil auch
alphanumerische Zeichen zulàssig sind, gibt es sowieso keine Möglichkeit,
die alphanumerische Spalte mit der numerischen Spalte in Beziehung zu
setzen. Wenn der genutzte Datenbankprovider dies zulàsst, wàre vielleicht
die Nutzung einer Konvertierungsfunktion (z.B. Val) möglich.

Sonst würde ich die Tabelle prodorders einlesen und die führenden
Nullen entfernen und dann mit der
Artikel Tabelle verbinden. Ich habe leider keine große Erfahrung mit
DataSet,DataTable & Co. und würde
mich über Tips sehr freuen.



Ein "sauberes" Datenbank-Design wàre zuerst anzugehen.

Wenn dies unmöglich ist, dann wàre die Nutzung von Konvertierungsfunktionen
im SQL zu prüfen.

Wenn auch dies unmöglich ist, wàre ein separates Einlesen mit nachfolgender
Konvertierung im Client zu prüfen, z.B. zusàtzliche typgerechte Spalte im
Client einfügen und mit einer foreach-Schleife die Daten konvertieren und
ablegen.

Wenn auch dies nicht in Frage kommt, dann beide Tabellen laden und die
Beziehungslogik im Code realisieren.

Dim conn As New OdbcConnection(strConn) ' strConn = meine ODBC
Verbindung

Try
conn.Open()
Dim selCmd As New OdbcCommand("SELECT
Fertigungsauftrag,mhd,artnr FROM uebertragungsprotokoll.prodorders p
where prodlinie=2 order by mhd desc", conn)
Dim da As New OdbcDataAdapter(selCmd)
Dim ds As New DataSet



Ein DataSet ist hie rnicht erforderlich, da weiter nur eine DataTable
genutzt wird. Es bleibt aber die Frage, wohin die zweite Tabelle geladen
werden soll.

Dim dt As New DataTable

da.Fill(dt)
Dim bs As New BindingSource
dv = dt.DefaultView



Eine Sicht ist nicht erforderlich, wenn eine BindingSource genutzt wird.
Eine BindingSource baut intern eine Sicht auf.

bs.DataSource = dt

With Me.dgvFertigungsauftrag ' mein DataGridView im
Formular
...




Viele Gruesse

Peter

Ähnliche fragen