

Delphi SQL - Chyba pri vyhodnocovaní podmienky alebo zlé zadanie? (where)
V Delphi mám tabuľku, z ktorej potrebujem vydolovať záznamy, ktoré sú v určitom časovom rozmedzí. Časy sú definované takto:
Time - dátum a čas od (vrátane)
TempTime - dátum a čas do (nevrátane)
Po zadaní SQL príkazu do komponenty a jeho selektovaní sa mi zobrazia všetky záznamy vyhovujúce len dátumom. Porovnanie času pri rovnakom dátume je ignorované. Stratil som na tom vyše hodiny a začínam mať pocit, že sa jedná o chybu Delphi. Prioritu operátorov som vylúčil, pretože som tam nasypal zátvoriek, až to zdravé nie je. Funkčný program, ktorý som len "vycucol" z originálu je tu na stiahnutie aj so zdrojovým kódom. Ak vás môžem poprosiť, pozrite sa na to niekto, ponáhľa mi to. Keď prídem z roboty o 22:20, tak sa pozriem, či ste niekto zistili problém.
http://data2.edisk.cz/stahni/84143/SQL.ZIP_409.05kB .html
V zdrojovom kóde sú zapoznámkované dva SQL príkazy. Jeden zobrazí všetko, druhý len vybrané záznamy v určenom časovom intervale. Ale keďže to nefunguje ako má, tak zobrazí dva záznamy. Správne by nemal zobraziť nič.
Už čakám na to, čo mi povie Rce, pretože ten sa s tým musel stretnúť, ak je to chyba v Delphi. Ak nie je, tak potom neviem, kde je chyba. Zatiaľ skúsim to čo poradil MM. Zadať to priamo do SQL príkazu.
Díky za uznání, ale chyba v Delphi (rep. v BDE) není - teda tahle chyba, jiné tam pochopitelně jsou
.
1) Máš nevhodně navrženou tabulku, je lépe mít datum a čas v jednom poli typu DateTime než extra datum a extra čas - pak by se s výhodou použil predikát BETWEEN.
2) Když už to máš, jak to máš, tak je třeba si uvědomit, že čas je podmnožinou datumu. Podmínka by měla vypadat asi takto:
[původně jsi měl ...(Datum >= :Datum_od)... a ...(Datum <= :Datum_do)... Tak jak jsi to měl, byla podmínka splněna už podle data a čas se nikdy nemohl uplatnit]
3) Nacpat datum a čas v Delpháckém tvaru je jediné správné přes parametry, systém si to přešrotí sám a dobře. Jde to taky cpát textově, ale pak je nutno znásilnit funkce aby převedly datum a čas do amerického formátu yyyy/mm/dd.
4) Necpal bych to textově do Query.SQL [0] ale přímo napsal v editoru do vlastnosti SQL. Když už to cpát programem, tak: Query.SQL.Text := 'select....';
Nedávno som vyčítal z helpu, že je to len na čítanie, takže ostanem pri SQL[0].
Co tak pouzit Query.SQL.Add - je to TStringList... SQL[0]


Pokud jsi tohle vyčetl, tak jsi to vyčetl špatně. Je to to samé jako
Memo.Lines.Text := 'nejaký řetězec';