MySql Selectanweisung von vb6

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:
Private Sub TEST(Optional ByVal tDate As Date = 0)

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Query As String
Dim conf_DB_ConnectionString As String

Const const_mySQLDriver = "{MySQL ODBC 3.51 Driver}"
Const const_mySQLServer = "localhost"
Const const_mySQLDatabase = "DB"
Const const_mySQLUser = "root"
Const const_mySQLPassword = ""
Const const_mySQLOption = ""

conf_DB_ConnectionString = "DRIVER=" & const_mySQLDriver & ";" & _
"SERVER=" & const_mySQLServer & ";" & _
"DATABASE=" & const_mySQLDatabase & ";" & _
"USER=" & const_mySQLUser & ";" & _
"PASSWORD=" & const_mySQLPassword & ";" & _
"OPTION=" & const_mySQLOption & ";"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open ([conf_DB_ConnectionString]) 


  Query = " SELECT  eintraege.*, bezeichnungen.Text, bezeichnungen.Nummer, schichtname.ShiftName, kategorie.Text as C2Text"
  Query = " FROM eintraege LEFT OUTER JOIN bezeichnungen ON eintraege.KennungID = bezeichnungen.ID) LEFT OUTER JOIN schichtname ON eintraege.ShiftID = Schichtname.ID)"
  Query = " LEFT OUTER JOIN kategorie ON eintraege.Combo2ID = kategorie.ID"
  Query = " ORDER BY eintraege.BereichNr, Date"
  
  If tDate = 0 Then
       Query = " WHERE eintraege.Date > = " & ToSql(ToDate(DateAdd("d", -1, Now)))
         ElseIf cmbSchicht.ListIndex > 0 Then
       Query = " WHERE eintraege.Date > = " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
           tDate = DateAdd("d", 1, tDate)
       Query = " AND eintraege.Date < " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
       Query = " AND eintraege.ShiftID = " & ToSql(cmbSchicht.ItemData(cmbSchicht.ListIndex))
         Else
       Query = " WHERE eintraege.Date > = " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
           tDate = DateAdd("d", 1, tDate)
       Query = " AND eintraege.Date < " & ToSql(DateSerial(Year(tDate), Month(tDate), Day(tDate)))
       Query = " ORDER BY eintraege.BereichNr, Date"
  End If
        rs.Open Query, cn
 
Der Aufbau deines Querys ist Murks.

Visual Basic:
Query = " SELECT  eintraege.*, bezeichnungen.Text, bezeichnungen.Nummer, schichtname.ShiftName, kategorie.Text as C2Text"
  Query = Query &  " FROM eintraege LEFT OUTER JOIN bezeichnungen ON eintraege.KennungID = bezeichnungen.ID) LEFT OUTER JOIN schichtname ON eintraege.ShiftID = Schichtname.ID)"
  Query = Query & " LEFT OUTER JOIN kategorie ON eintraege.Combo2ID = kategorie.ID"
  Query = Query & " ORDER BY eintraege.BereichNr, Date"

In deiner Variante enthält Query nur die letzte Zuweisung ("ORDER BY blablaba")
 
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)"
 
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
 
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 bearbeitet von einem Moderator:
Zurück