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;
- 1110 megtekintés
Hozzászólások
Datetostr() milyen formába alakítja a dátumot? Mi a select parancs stringkent?
----------------
symbolweb.hu
- A hozzászóláshoz be kell jelentkezni
Beállítottam neki, hogy kötőjellel válassza el. De bármit megadtam neki, az sem tetszett neki.
SELECT * FROM szerszam where datum between '2007-01-01' and '2016-12-29' <- ez a query stringként..
- A hozzászóláshoz be kell jelentkezni
Mysql ilyen formában szereti a dátumot. Ez így ok... Mysql oldalon még kellene nézni hogy mi fut le. Nincs egy warning a logban? Show processlist mit mutat amíg fut az sql (sleep segít)
----------------
symbolweb.hu
- A hozzászóláshoz be kell jelentkezni
es a datum date tipusu?
t
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Esetleg : "SELECT * FROM szerszam where datum between {D'2007-01-01'} AND {D'2016-12-29'};"
- A hozzászóláshoz be kell jelentkezni