SQL Abfrage mit Datum liefert kein Ergebnis
-
Hallo,
ich möchte meine MySQL-Datenbank auf bestimmte Datensätze filtern, leider bringt die Abfrage kein Ergebnis.
Verwende ich jedoch den MySQL Query Browser funktioniert die Abfrage ohne Probleme.
Es kommt auch keine Fehlermeldung. Hier mal mein Quelltext:
Zeitpunkt_Datum = FormatDateTime("yyyy-mm-dd", ADOQuery2->FieldByName("Zeitpunkt_Datum")->AsDateTime); TerminalID = ADOQuery2->FieldByName("TerminalID")->AsString; ADOQuery3->SQL->Clear(); ADOQuery3->SQL->Add("SELECT * FROM terminalverwaltung.abrechnung"); ADOQuery3->SQL->Add(" WHERE (Zeitpunkt_Datum = " + AnsiString(Zeitpunkt_Datum) + ")"); ADOQuery3->SQL->Add(" AND (TerminalID = " + AnsiString(TerminalID) + ")"); ADOQuery3->Open();
Ich hoffe mir kann einer Euch helfen,
viele Grüße
Maik
-
versuchs mal so:
ADOQuery3->SQL->Clear(); ADOQuery3->SQL->Add("SELECT * FROM terminalverwaltung.abrechnung"); ADOQuery3->SQL->Add(" WHERE (Zeitpunkt_Datum = :Zeitpunkt_Datum"); ADOQuery3->SQL->Add(" AND (TerminalID = :TerminalID"); ADOQuery3->Parameters->ParamByName("Zeitpunkt_Datum")->Value = ADOQuery2->FieldByName("Zeitpunkt_Datum")->AsDateTime; ADOQuery3->Parameters->ParamByName("TerminalID")->Value = ADOQuery2->FieldByName("TerminalID")->AsInteger; ADOQuery3->Open();
hierbei werden die Wertetypen der Parameter automatisch im entsprechenden Typ gesetzt und man muß nicht erst (sinnlos) in String casten/umwandeln
Falls das noch keine Ergebnisse liefert mußt du mal das Datum in einem anderen Format angeben. Bei meinen Erfahrungen mit MySQL mußte das Datum im Format YYYYMMDD angegeben werden. Hier käme dann allerdings wieder die Funktion FormatDateTime zum Einsatz.
-
Hallo!
Danke für deine schnelle Hilfe, ich hab das jetzt mal geändert, jedoch kommt jetzt eine Fehlermeldung die lautet:
ADOQuery3: Parameter 'Zeitpunkt_Datum' nicht gefunden, obwohl das Feld definitv so heißt, ich komm hier grad nicht weiter.
Wäre über eine weitere Hilfe dankbar,
viele Grüße
Maik
-
Hallo
Da können wir dir auch nicht helfen, die hier gezeigte Syntax ist in Ordnung. Alles was wir dazu sagen können ist das die Fehlermeldung nicht umsonst kommt. Im Kontext der Abfrage gibt es kein Feld 'Zeitpunkt_Datum'. Beachte auch das Groß/Kleinschreibung wichtig ist.
bis bald
akari
-
1. Dein Originalfehler liegt möglicherweise daran, dass der Datumswert in Hochkommatas wie ein Stringliteral einzuschließen ist.
2. Linneas nicht funktionierende Lösung könnte evtl. daran liegen dass MySQL andere Zeichen benötigt um Parameter im SQL-Statement zu markieren. Probiere mal das @-Zeichen oder das Fragezeichen anstelle von : .
-
Hallo!
Ich habe mittlerweile den Fehler Parameter 'Zeitpunkt_Datum' nicht gefunden beheben können, in dem ich der ADOQuery3 unter Paramter die fehlenden Variablen hinzugefügt habe, leider erhalte jetzt eine andere Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versions for the right syntax to use near "at line 3" aufgetreten.
Vielleicht kann mir ja noch mal jemand zur Seite stehen...
viele Grüße
Maik
-
witte schrieb:
2. Linneas nicht funktionierende Lösung könnte evtl. daran liegen dass MySQL andere Zeichen benötigt um Parameter im SQL-Statement zu markieren. Probiere mal das @-Zeichen oder das Fragezeichen anstelle von : .
Der Syntax ist für Parameter der ADO-Komponenten und hat nichts mit dem an MySQL gesendeten String zu tun, dort sind die Variablen dann durch die Werte ersetzt und die Doppelpunkte dienen der Komponente nur zum Zuordnen der Parameter.
@maikmueller
Schau mal ob ADOQuery3 bei ParamCheck true ist, ansonsten werden die Parameter nämlich ignoriert. Du hast den Quelltext wirklich so kopiert wie ich den gepostet habe?
-
Hallo Linea!
Danke für deine Antwort, ich habe das gerade noch mal geprüft,
CheckParam steht bei ADOQuery auf true.