Daten aus DB Access mit ExecuteReader Textfelder im Formular übergeben

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von LEOGOLD.

    Daten aus DB Access mit ExecuteReader Textfelder im Formular übergeben

    Hallo,
    ich habe folgenden SQL Statement mit VB.NET erstellt:

    VB.NET-Quellcode

    1. Dim Parm1 AS String ="0000122814"
    2. Dim Parm2 AS String ="Z1"
    3. Dim Parm3 AS String ="Z2"
    4. cmdLocal.CommandText = "Select [tblKNVP.Debitor], [tblKNVP.Rolle], [tblKNA1_ZSAL.Name1], [tblKNA1_ZSAL.Telefon1], [tblADR6_ZSAL.E-Mail]
    5. From tblADR6_ZSAL INNER Join (tblKNA1_ZSAL INNER Join tblKNVP
    6. On tblKNA1_ZSAL.Debitor = tblKNVP.AdresseAL) ON tblADR6_ZSAL.Adressnummer = tblKNA1_ZSAL.Adresse
    7. Where (tblKNVP.Debitor) Like '" & Parm1 & "' AND (tblKNVP.Rolle) Like '" & Parm2 & "'Or (tblKNVP.Rolle) LIKE '" & Parm3 & "'"
    8. readerLocal = cmdLocal.ExecuteReader
    9. Do While readerLocal.Read = True
    10. lblTXTNameVPM.Text = readerLocal("tblKNA1_ZSAL.Name1")
    11. lblTXTNameVPB.Text = readerLocal("tblKNA1_ZSAL.Name1")
    12. Loop
    13. readerLocal.Close()

    Im Textfeld lblTXTNameVPM.Text soll der Name vom Wert Parm2 stehen
    und im Textfeld lblTXTNameVPB.Text soll der Name vom Wert Parm3 stehen

    Unter der Auswertung von Parm1 gibt es 2 Datensätze mit Parm2 und Parm3
    Bis jetzt habe ich den SQL String zweimal durchlaufen lassen.
    Einmal mit Parm2 und einmal mit Parm3

    Gibt es da eine Lösung mit nur einen durchlauf?
    Danke

    *Topic verschoben, BBCode eingefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich versteh malwieder nix:

    LEOGOLD schrieb:

    Im Textfeld lblTXTNameVPM.Text soll der Name vom Wert Parm2 stehen
    und im Textfeld lblTXTNameVPB.Text soll der Name vom Wert Parm3 stehen
    Was ist denn der Name vom Wert von Parm3?
    Der Name von Parm3 ist Parm3 - steht da ja: zeile#3. Der Wert von Parm3 ist "Z2".
    Was aber soll der Name vom Wert von Parm3 sein?
    erstmal gesundes neues Jahr :thumbup:

    also Parm = Parameter
    Parm1 ist eine Verkaufsstelle mit der Nummer "0000122814"
    Parm2 ist der zuständige Außendienstmitarbeiter für diese Verkaufsstelle (AM) mit der Partnerrolle Z1
    Parm3 ist der zuständige Innendienstmitarbeiter für diese Verkaufsstelle (IM) mit der Partnerrolle Z2

    Jede Verkaufsstelle hat einen AM und einen IM
    Jetzt möchte ich über Parm1 den AM und IM der Verkaufsstelle sehen. ;)
    Das geht vermutlich mit einem Union-Konstrukt.
    Mit Union kannst du zwei Teil-Selects zusammenwerfen, sofern sie dieselbe Ergebnismenge liefern (tatsächlich gehts sogar mit verschiedenen Ergebnismengen, aber tät ich nicht empfehlen).
    Guck dir Sql-Doku an - Union hat verschiedene Optionen (Union, Union All, weitere?)
    ohne deine Daten kann mann je kaum Testen
    schau ob das klappt

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim sDB As String = "E:\deineDB.mdb"
    3. Dim sCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    4. "Data Source=" & sDB & ";"
    5. Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCon)
    6. Cn.Open()
    7. TextBox1.Text = "0000122814"
    8. TextBox2.Text = "Z1"
    9. TextBox3.Text = "Z2"
    10. Dim sSql As String = "Select [tblKNVP.Debitor], [tblKNVP.Rolle], [tblKNA1_ZSAL.Name1], [tblKNA1_ZSAL.Telefon1], [tblADR6_ZSAL.E-Mail]"
    11. sSql &= " From tblADR6_ZSAL INNER Join (tblKNA1_ZSAL INNER Join tblKNVP "
    12. sSql &= " On tblKNA1_ZSAL.Debitor = tblKNVP.AdresseAL) "
    13. sSql &= " ON tblADR6_ZSAL.Adressnummer = tblKNA1_ZSAL.Adresse"
    14. Dim sWhere As String = Nothing
    15. If TextBox1.Text <> Nothing Then
    16. sWhere &= " And tblKNVP.Debitor Like '" & TextBox1.Text & "'"
    17. End If
    18. If TextBox2.Text <> Nothing Then
    19. sWhere &= " AND tblKNVP.Rolle Like '" & TextBox2.Text & "'"
    20. End If
    21. If TextBox3.Text <> Nothing Then
    22. sWhere &= " Or tblKNVP.Rolle LIKE '" & TextBox3.Text & "'"
    23. End If
    24. If sWhere <> Nothing Then
    25. sWhere = " Where " & sWhere.Substring(4)
    26. End If
    27. sSql &= sWhere & " Order by tblKNA1_ZSAL.Name1"
    28. MsgBox(sSql)
    29. Dim Cmd As New OleDb.OleDbCommand(sSql, Cn)
    30. Dim Dr As OleDb.OleDbDataReader
    31. Dr = Cmd.ExecuteReader
    32. Do While Dr.Read = True
    33. 'etc.... in Datagridview Laden ??
    34. 'lblTXTNameVPM.Text = Dr("tblKNA1_ZSAL.Name1").ToString
    35. 'lblTXTNameVPB.Text = Dr("tblKNA1_ZSAL.Name1").ToString
    36. Loop
    37. Dr.Close()
    38. End Sub

    Hat leider nicht funktioniert
    In beiden TextBoxen (lblTXTNameVPM.Text und lblTXTNameVPB.Text) erscheint der Name von der Rolle Z2

    Bis jetzt habe ich es über 2 SQL Befehle gelöst.
    Ich weis aber nicht ob dadurch die Performens darunter leidet.

    'hier die Partnerrolle Z1
    cmdLocal.CommandText = "Select [tblKNVP.Debitor], [tblKNVP.Rolle], [tblKNA1_ZSAL.Name1], [tblKNA1_ZSAL.Telefon1], [tblADR6_ZSAL.E-Mail]
    From tblADR6_ZSAL INNER Join (tblKNA1_ZSAL INNER Join tblKNVP
    On tblKNA1_ZSAL.Debitor = tblKNVP.AdresseAL) ON tblADR6_ZSAL.Adressnummer = tblKNA1_ZSAL.Adresse
    Where (tblKNVP.Debitor) Like '" & Parm1 & "' AND (tblKNVP.Rolle) Like '" & Parm2 & "'"

    readerLocal = cmdLocal.ExecuteReader
    Do While readerLocal.Read = True
    lblTXTNameVPM.Text = readerLocal("tblKNA1_ZSAL.Name1").ToString
    lblTXTFonVPM.Text = readerLocal("tblKNA1_ZSAL.Telefon1").ToString
    lblTXTMailVPM.Text = readerLocal("tblADR6_ZSAL.E-Mail").ToString
    Loop

    readerLocal.Close()

    ''hier die Partnerrolle Z2
    cmdLocal.CommandText = "Select [tblKNVP.Debitor], [tblKNVP.Rolle], [tblKNA1_ZSAL.Name1], [tblKNA1_ZSAL.Telefon1], [tblADR6_ZSAL.E-Mail]
    From tblADR6_ZSAL INNER Join (tblKNA1_ZSAL INNER Join tblKNVP
    On tblKNA1_ZSAL.Debitor = tblKNVP.AdresseAL) ON tblADR6_ZSAL.Adressnummer = tblKNA1_ZSAL.Adresse
    Where (tblKNVP.Debitor) Like '" & Parm1 & "' AND (tblKNVP.Rolle) Like '" & Parm3 & "'"

    readerLocal = cmdLocal.ExecuteReader
    Do While readerLocal.Read
    lblTXTNameVPB.Text = readerLocal("tblKNA1_ZSAL.Name1")
    lblTXTFonVPB.Text = readerLocal("tblKNA1_ZSAL.Telefon1")
    lblTXTMailVPB.Text = readerLocal("tblADR6_ZSAL.E-Mail")
    Loop
    readerLocal.Close()

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LEOGOLD“ ()