# MySql Selectanweisung von vb6



## Merlin01 (20. April 2012)

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


```
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
```


----------



## Zvoni (20. April 2012)

Der Aufbau deines Querys ist Murks.


```
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")


----------



## Merlin01 (20. April 2012)

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


----------



## Zvoni (20. April 2012)

steht doch da.....


----------



## Merlin01 (20. April 2012)

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


----------



## Zvoni (20. April 2012)

und wo genau?


----------



## Merlin01 (20. April 2012)

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)"


----------



## Merlin01 (20. April 2012)

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


----------



## Zvoni (21. April 2012)

Was isn "ToSQL" eine Funktion?


----------



## VScan (23. April 2012)

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, ...


----------



## DrMueller (3. Mai 2012)

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


----------

