Delphi XE3 + mysql dátumkezelés fail

Fórumok

Sziasztok!

Már többször is kisegített a Hup társadalom a slamasztikából, remélem most is így lesz.

Adva van egy kis adatbázis, egy Delphi XE3-ban fejlesztendő kis program, illetve egy AIX-Linux admin, aki valaha delphizett és nosztalgiázni támadt kedve.

Firedac komponenssel kezeli a mysql adatbázist a kis program, és szeretném egy gombnyomással lekérdezni egy adott időintervallum között felvett szerszámok listáját a 'szerszam' táblából, amit aztán szeretném megjeleníteni egy dbgrid-be, de az istenért nem hajlandó firedac-al lefutni a query, ami nem lenne más mint:

form3.query1.sql.Clear;
form3.Query1.SQL.Add('select * from szerszam where datum BETWEEN '''+datetostr(dtp1.datetime)+''' and '''+datetostr(dtp2.datetime)+''' ' );
form3.Query1.Open;

(a dtp1 és dtp2 DateTimePicker komponensek)

Kiszedtem belőle, hogy mit akar futtatni szövegként, amit ha lefuttatok konzolból, vagy phpmyadminból, akkor megkapom az eredményt, de a dbgridbe csak olyan rekordokat kapok vissza, ahol szándékosan nem lett megadva a datum mezőbe semmi.

"SELECT * FROM szerszam where datum between '2007-01-01' and '2016-12-29'"

Arra jutottam, hogy a firedac semmilyen dátummal kapcsolatos műveletet nem hajlandó végrehajtani, se insert into, se update, se select.
Valaki találkozott hasonlóval? E programnak az elődje Delphi 2007-ben lett megírva, ott minden tökéletesen működik, de itt sehogy sem akar menni.

Köszi előre is!

Megoldva: Köszönöm a válaszokat, végül megtaláltam mi a megoldást, ami FormatDateTime nevű jóság. Hogy nyalnám meg a fülét, amelyik a jól bevált módszerhez hozzányúlt. Na mindegy, végül jó lett.

adate:= now;
fdquery3.sql.Clear;
fdquery3.SQL.Add('select * from szerszam where datum BETWEEN '''+FormatDateTime('yyyy-mm-dd', dtp1.Date)+''' and '''+FormatDateTime('yyyy-mm-dd', dtp2.Date)+''' ' );
fdquery3.open;

Hozzászólások

Datetostr() milyen formába alakítja a dátumot? Mi a select parancs stringkent?

----------------
symbolweb.hu

Próbáld meg paraméterként átadni. XE3-at illetve Firedacot nem használok, de anno korábbi Delphiben működött így is:


form3.query1.sql.Clear;
form3.Query1.SQL.Add('select * from szerszam where datum BETWEEN :datumtol and :datumig' );
form3.Query1.ParamByName('datumtol').AsDate := dtp1.datetime;
form3.Query1.ParamByName('datumig').AsDate := dtp2.datetime;
form3.Query1.Open;

A kódot nem próbáltam. Mostanában Lazarus+ZEOS-t használok.

Szerk:
Az általad felvetett módnál esetleg még próbáld meg "per" karakterrel elválasztani a dátum elemeit:
'12/28/2016'
A hónap és a nap sorrendje lehet, hogy fordítva van.

Árpi

Esetleg : "SELECT * FROM szerszam where datum between {D'2007-01-01'} AND {D'2016-12-29'};"