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.

Předmět Autor Datum
A nebude to tym, ze v Accese by bol datum v podstate ako string, len s prislusnym formatovanim? Je t…
lubo 08.04.2009 09:04
lubo
Je to dost mozne.Skusil som vkladat cez table datum pomocou premennej ktora je typu TDate a aj tak m…
Rado 08.04.2009 09:23
Rado
V jakém okamžiku ti to hlasi? Při zapisu z Delphi nebo při práci s SQL dotazem?
Jan Fiala 08.04.2009 09:55
Jan Fiala
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
datum neni ulozen jako integer, ale jako float - cela cast je datum, desetinna cast je cas. Jakou ve…
Jan Fiala 08.04.2009 10:33
Jan Fiala
Access bol súčasťou balíka MS Office 2003 Professional Edition. K tomu dátumu-viem že je typu float…
Rado 08.04.2009 10:41
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
Nevím jako verzi Delphi máš, ale výraz ADOTable1['Datum'] funguje někdy blbě, hlavně když je údaj pr…
Rce 08.04.2009 13:37
Rce
O.K. Delhi mam verziu 7. zatial to fungovalo a momentalne prave ta cast ktoru si citoval ide dobre.…
Rado 08.04.2009 13:47
Rado
Zkus, za to nic nedáš. Též jsem dělal v D7, kde to tutově občas zašvindlovalo, tuším, že při prázdné…
Rce 08.04.2009 14:09
Rce
Este otazka ak priradujem napr label.caption hodnotu cez table tak potom to bude ako vyzerat? Label1…
Rado 08.04.2009 14:13
Rado
Label1.caption:=ADOTable1.FieldByName ('Jméno-fieldu').AsString; A je fuk, v jakém tvaru to ve skute…
Rce 08.04.2009 14:42
Rce
Ni iste. Tiez ma mohlo napadnut to vyskusat napisat na tvrdo. On totiz mi neponukol z vyberu moznost…
Rado 08.04.2009 14:57
Rado
Inak co sa týka tých blbostí čo si spomínal, tak mal som tam nejaké pikošky ktorým som nevedel prísť…
Rado 08.04.2009 16:11
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.

Nevím jako verzi Delphi máš, ale výraz ADOTable1['Datum'] funguje někdy blbě, hlavně když je údaj prázdný dokáže vrátit hovadiny. Je typu variant, musí se to testovat a převádět v run time (za běhu). Zkus použít ADOTable1.FieldByName ('Datum').AsDateTime - je to delší na psaní ale rychlejší na běh a převod do typu DateTime je korektnější. Již jsem narazil, že indexový výraz Table ['Jméno-pole'] fixloval při porovnávání, proto jsem od tohoto zápisu opustil.

Inak co sa týka tých blbostí čo si spomínal, tak mal som tam nejaké pikošky ktorým som nevedel prísť na kore¨a zrazu to funguje. Síce mi zas čosi prestalo šlapať ale na to sa pozriem a dufam ze to rozbeham.Ešte raz vďaka za SUPER tip.:-) Žial to sql stale nejde...

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