1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

MySql Selectanweisung von vb6

Dieses Thema im Forum "Visual Basic 6.0, VBA & VBScript" wurde erstellt von Merlin01, 20. April 2012.

  1. Merlin01

    Merlin01 Grünschnabel

    Hallo
    Bin ein Anfänger in Mysql und habe da ein Problem.
    Es soll Eine Access DB in My Sqlumgestrickt werden.
    Dieses ist soweit mittels Dump geschehen.
    Die Verbindung ist hergestellt und kann von VB6 heraus auch schon die MySql DB
    auslesen, Comboboxen füllen ist auch OK.
    Nun möchte ich auch ein Datagrid mit Daten aus der DB füllen. Und da stoße Ich auf Probleme
    Vielleicht weiss von euch jemend Rat. Im folgendem Code ist ein Fehler in der Syntax, kann aber nicht lokalisieren wo, Es Kommt der Syntaxfehler in Line1. Allerdings ist der String recht lang.
    hier der Code

    Code (Text):
    1. Private Sub TEST(Optional ByVal tDate As Date = 0)
    2.  
    3. Dim cn As New ADODB.Connection
    4. Dim rs As New ADODB.Recordset
    5. Dim Query As String
    6. Dim conf_DB_ConnectionString As String
    7.  
    8. Const const_mySQLDriver = "{MySQL ODBC 3.51 Driver}"
    9. Const const_mySQLServer = "localhost"
    10. Const const_mySQLDatabase = "DB"
    11. Const const_mySQLUser = "root"
    12. Const const_mySQLPassword = ""
    13. Const const_mySQLOption = ""
    14.  
    15. conf_DB_ConnectionString = "DRIVER=" & const_mySQLDriver & ";" & _
    16. "SERVER=" & const_mySQLServer & ";" & _
    17. "DATABASE=" & const_mySQLDatabase & ";" & _
    18. "USER=" & const_mySQLUser & ";" & _
    19. "PASSWORD=" & const_mySQLPassword & ";" & _
    20. "OPTION=" & const_mySQLOption & ";"
    21. Set cn = New ADODB.Connection
    22. Set rs = New ADODB.Recordset
    23. cn.Open ([conf_DB_ConnectionString])
    24.  
    25.  
    26.   Query = " SELECT  eintraege.*, bezeichnungen.Text, bezeichnungen.Nummer, schichtname.ShiftName, kategorie.Text as C2Text"
    27.   Query = " FROM eintraege LEFT OUTER JOIN bezeichnungen ON eintraege.KennungID = bezeichnungen.ID) LEFT OUTER JOIN schichtname ON eintraege.ShiftID = Schichtname.ID)"
    28.   Query = " LEFT OUTER JOIN kategorie ON eintraege.Combo2ID = kategorie.ID"
    29.   Query = " ORDER BY eintraege.BereichNr, Date"
    30.  
    31.   If tDate = 0 Then
    32.        Query = " WHERE eintraege.Date > = " & ToSql(ToDate(DateAdd("d", -1, Now)))
    33.          ElseIf cmbSchicht.ListIndex > 0 Then
    34.        Query = " WHERE eintraege.Date > = " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    35.            tDate = DateAdd("d", 1, tDate)
    36.        Query = " AND eintraege.Date < " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    37.        Query = " AND eintraege.ShiftID = " & ToSql(cmbSchicht.ItemData(cmbSchicht.ListIndex))
    38.          Else
    39.        Query = " WHERE eintraege.Date > = " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    40.            tDate = DateAdd("d", 1, tDate)
    41.        Query = " AND eintraege.Date < " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    42.        Query = " ORDER BY eintraege.BereichNr, Date"
    43.   End If
    44.         rs.Open Query, cn
  2. Zvoni

    Zvoni Erfahrenes Mitglied

    Der Aufbau deines Querys ist Murks.

    Code (Visual Basic):
    1.  
    2. Query = " SELECT  eintraege.*, bezeichnungen.Text, bezeichnungen.Nummer, schichtname.ShiftName, kategorie.Text as C2Text"
    3.   Query = Query &  " FROM eintraege LEFT OUTER JOIN bezeichnungen ON eintraege.KennungID = bezeichnungen.ID) LEFT OUTER JOIN schichtname ON eintraege.ShiftID = Schichtname.ID)"
    4.   Query = Query & " LEFT OUTER JOIN kategorie ON eintraege.Combo2ID = kategorie.ID"
    5.   Query = Query & " ORDER BY eintraege.BereichNr, Date"
    6.  
    In deiner Variante enthält Query nur die letzte Zuweisung ("ORDER BY blablaba")
  3. Merlin01

    Merlin01 Grünschnabel

    Danke für die schnelle Antwort.
    wie würde es denn richtig lauten ****
  4. Zvoni

    Zvoni Erfahrenes Mitglied

    steht doch da.....
  5. Merlin01

    Merlin01 Grünschnabel

    Sorry, Habs so eingetragen aber leider immer noch Fehler in der Sytax
  6. Zvoni

    Zvoni Erfahrenes Mitglied

    und wo genau?
  7. Merlin01

    Merlin01 Grünschnabel

    in der zweiten Zeile bei LEFT OUTER JOIN schichtname ON eintraege.ShiftID

    Query = Query & " FROM eintraege LEFT OUTER JOIN bezeichnungen ON eintraege.KennungID = bezeichnungen.ID) LEFT OUTER JOIN schichtname ON eintraege.ShiftID = Schichtname.ID)"
  8. Merlin01

    Merlin01 Grünschnabel

    So der erste abschnitt läuft nun ohne Fehler es war noch eine Klammer offen.
    aber im zweiten abschnitt wird noch über das Datum gemeckert
    eventuell muss es umformatiert werden ****

    in der Access DB stand das Datum im Format dd.mm.yyyy
    in der Mysql DB im Format mm.dd.yyyy

    If tDate = 0 Then
    Query = " WHERE eintraege.Date > = " & ToSql(ToDate(DateAdd("d", -1, Now)))
    ElseIf cmbSchicht.ListIndex > 0 Then
    Query = Query & " WHERE eintraege.Date > = " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    tDate = DateAdd("d", 1, tDate)
    Query =Query & " AND eintraege.Date < " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    Query =Query & " AND eintraege.ShiftID = " & ToSql(cmbSchicht.ItemData(cmbSchicht.ListIndex))
    Else
    Query =Query & " WHERE eintraege.Date > = " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    tDate = DateAdd("d", 1, tDate)
    Query =Query & " AND eintraege.Date < " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
    Query =Query & " ORDER BY eintraege.BereichNr, Date"
    End If
  9. Zvoni

    Zvoni Erfahrenes Mitglied

    Was isn "ToSQL" eine Funktion?
  10. VScan

    VScan Gast

    Hallo:

    Tipp am Rande, ein Debug.Print kann Wunder bewirken, da man die SQL-Anweisung komplett analysieren kann, mit etwaigen Variablen, die eingesetzt/ersetzt werden sollen, daher würde ich empfehlen, diese erst einmal auszugeben, und dann direkt im Sql-Fenster eingeben/bearbeiten und ausführen, anschließend kann man Diskrepanzen im Code ausbessern.

    @Zvoni: Schätze mal, dass in ToSql(...) das Datum in eine für MySql lesbare Form umgewandelt werden soll.

    Viele Grüße, ...
    Zuletzt von einem Moderator bearbeitet: 23. April 2012
  11. DrMueller

    DrMueller Erfahrenes Mitglied

    Einfachstes Vorgehen bei SQL-Fehlern:
    1. Wie VScan agt, den SQL in seiner Gesamtheit mit ausgefüllten Variablen ausgeben. Entweder per Debug.print oder im Direktfenster per debuggen.
    2. Diesen SQL per Management Consolidate im Direktfenster ausführen
    3. Fehlermeldung analysieren
    4. Profit

Diese Seite empfehlen