Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno DateTimePicker - údajový typ

Práve som narazil na takýto problém. V Delphi z komponenty DateTimePicker ukladám do tabuľky v Accese dátum pomocou príkazu ADOTable1.['Datum']:=DateTimePicker.Date. Komponenta DateTimePicker má nastavenú vlastnosť kind na dtkdate a format dd.MM.yyyy . Keď som chcel ale s týmto údajovým typom pracovať (porovnávať SQL príkazom) tak mi vyhodil hlásenie že mám nekompatibilné údajové typy string a Tdate. Pričom komponenta DateTimePicker posiela údajové typy TDateTime a ak som dal uložiť len dátum tak by to mal byť údajový typ Tdate.Alebo sa mýlim? V Accese mám pre toto pole nastavený typ Dátum a čas - krátky dátum. Kde je chyba? Ďakujem za radu.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Abys mohl na SQL pracovat s datumem, musis je mit ulozeno v poli DateTime nebo DateStamp apod. Nemuz…
Jan Fiala 08.04.2009 09:55
Jan Fiala
Ale to je prave ten problem. Ja ten datum posielam do databazy v accesse ako TDateTime dokonca som s…
Rado 08.04.2009 10:15
Rado
Pričom aby som ešte spomenul, v inej časti programu porovnávam ten istý údaj z accesu so systémovým…
Rado 08.04.2009 10:37
Rado
Kde konkrétně máš problém s formátem datumu? Zapisuje ti to, načítá to...
Jan Fiala 08.04.2009 12:49
Jan Fiala
Pri selekte udajov (cize pri vybere z accesu) pomocou SQL alebo aj ADOTable.Filter. Vzdy mi vyhodi ž…
Rado 08.04.2009 13:23
Rado
dej sem prikaz, na kterem ti to vyhodi neshodu String a DateTime v kompilatoru
Jan Fiala 08.04.2009 14:14
Jan Fiala
with ADOQuery1 do begin Active:= false; SQL.Clear; SQL.Add('SELECT * FROM Udalosti WHERE DatumPom >'…
Rado 08.04.2009 14:22
Rado
Tak to nejde. Jednak kombinuješ TDateTime se stringem. Ale hlavně tady bude kolidovat různé zobrazen…
Rce 08.04.2009 15:11
Rce
Vyskusal som ale nepozna ParamByName a ani Prepare... Treba v ADOQuery nastavit nejake parametre? Le…
Rado 08.04.2009 15:27
Rado
with ADOQuery1 do begin SQL.Clear; SQL.Add('select * from Udalosti where DatumPom > :Dat'); Paramete… poslední
Rado 08.04.2009 19:15
Rado

Ale to je prave ten problem. Ja ten datum posielam do databazy v accesse ako TDateTime dokonca som skusal aj ako integer ale neustale mi sql hlasi ze je typu string, to znaci ze z accesu ho query vytiahne ako string. Aj ked je tam ulozene ako integer. skusil som to filtrovat aj pomocou table.filter ale aj ten mi ten udaj detekuje ako string. Neviem ako mam ulozit ten datum do accessu aby som ho odtial netahal ako string...

Pričom aby som ešte spomenul, v inej časti programu porovnávam ten istý údaj z accesu so systémovým dátumom výrazom:
ADOTable1.first;
while not ADOTable1.Eof do begin
ADOTable1.Edit;
if ADOTable1['Datum']< Date then ADOTable['Stav']:='ukonceny';
ADOTable1.Post;
ADOTable1.Next;
end;
a žiadne chybové hlásenie mi nevyhodí a ten stav mi samozrejme zmení.

Pri selekte udajov (cize pri vybere z accesu) pomocou SQL alebo aj ADOTable.Filter. Vzdy mi vyhodi že porovnavam string a extended- oynaci mi riadok v Delphi kde je SQL prikaz.
Momentalny stav je taky ze som si vytvoril v tabulke v accesse este jedno pomocne pole nastavene ako "datum a cas" a vkladam do neho hodnotu s datetimepicker.datetime. A chcem pomocou SQL prikazu vybrat z tabulky len tie riadky kde hodnota pomocneho pola v riadku je povedzme > ako hodnota nastaveneho datumu na dalsom datetimepicker2.datetime. Ale ako som vyssie uviedol v inej casti programu porovnavam v podmienke if hodnotu datumu v accesse s hodnotou date (Tdate) a tam mi to v pohode ide. Ciye ako ste napisali SQL prikay berie tuto hodnotu ako string aj ked nechapem preco lebo ine hodnoty typu integer napr. nepreraba na string a pekne ich porovnava ako integer. Neviem ci som to dostatocne popisal, pripadne ak mozem, mozme podrobnejsie cez icq.

Tak to nejde. Jednak kombinuješ TDateTime se stringem. Ale hlavně tady bude kolidovat různé zobrazení datumů. Musíš třeba přes parametry (IMHO je to jednodušší, než uschovat nastavení zobrazení datumu, nastavit US, vrátit):

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'select * from Udalosti where DatumPom > :Dat';
ADOQuery1.SQL.ParamByName ('Dat').AsDateTime := DateTimePicker1.DateTime;
ADOQuery1.Prepare;
ADOQuery1.Open;

Zpět do poradny Odpovědět na původní otázku Nahoru