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? nový
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… nový
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… nový
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… nový
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… nový
Rado 08.04.2009 10:37
Rado
Kde konkrétně máš problém s formátem datumu? Zapisuje ti to, načítá to... nový
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 ž… nový
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… nový
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.… nový
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é… nový
Rce 08.04.2009 14:09
Rce
Este otazka ak priradujem napr label.caption hodnotu cez table tak potom to bude ako vyzerat? Label1… nový
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… nový
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… nový
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ť… nový
Rado 08.04.2009 16:11
Rado
dej sem prikaz, na kterem ti to vyhodi neshodu String a DateTime v kompilatoru nový
Jan Fiala 08.04.2009 14:14
Jan Fiala
with ADOQuery1 do begin Active:= false; SQL.Clear; SQL.Add('SELECT * FROM Udalosti WHERE DatumPom >'… nový
Rado 08.04.2009 14:22
Rado
Tak to nejde. Jednak kombinuješ TDateTime se stringem. Ale hlavně tady bude kolidovat různé zobrazen… nový
Rce 08.04.2009 15:11
Rce
Vyskusal som ale nepozna ParamByName a ani Prepare... Treba v ADOQuery nastavit nejake parametre? Le… nový
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