Eli ongelma ois seuraava, eli miten saada tietokannasta tulemaan myös NULL arvoiset tulokset. Selventääkseni asiaa teen tähän nyt esimerkki haun...
SELECT *
FROM taulu
WHERE (tila >= :tila1 AND tila <= :tila2)
ORDER BY joku
Elikkästä parametrinä koodista tulee sql komponenttiin nuo tila1 ja tila2 arvot. Haku toimii hienosti jos haetaan esim. vaikka välillä 4 ja 6. Mutta entä kun halutaan arvot 1 ja tyhjät!! Tietokannassa on tyhjiä ja NULL arvoja, jotka ei luonnollisestikaan ole samoja.
Tuolla esimerkki haulla saadaan tulemaan vain ne tyhjät. Parametri '' eli siis tyhjä ei tuo muuta kun ne tyhjät. Nil:kään ei tunnu toimivan. :(
Yks ratkasu on tietty lisätä SQL:n where lausekkeeseen OR tila IS NULL, mutta sitten NULLit tulee aina mukaan oli haku väli vaikka sitten se 4 - 6.
Jos sulla on jonkin sortin ratkasu tai ajatus, niin kerro... mä kokeilen.. :)
P.S Tietokanta komponentillakin voi kyl olla väliä, kyseessä siis INAP komponentti joka on hommailtu Delphi 5:n ja kanta on informix.
Tiedän, että muutama ylimääräinen koodirivi tuntuu kauhealta, mutta sillä pääsee helpoimmalla. Lisäät siis if-lauseen, jossa tarkistat, pitääkö NULL olla mukana, ja teet tarvittaessa erilaisen haun. Kyllähän siinä hieman ylimääräistä koodia tulee, mutta ei tuolle oikein muutakaan voi. Tietysti voit koota haun Stringiin pätkittäin:
Haku := 'SELECT * FROM taulu WHERE ('; Haku := Haku + '(tila >= :tila1 AND tila <= :tila2)'; (* Lisätään tarpeen mukaan NULL-ehto. *) if (tila1 = '') or (tila2 = '') then Haku := Haku + ' OR tila IS NULL'; (* Lisätään loput tekstit. *) Haku := Haku + ') ORDER BY joku'; (* Ja sitten haetaan. *)
Aihe on jo aika vanha, joten et voi enää vastata siihen.