Forum Delphi.cz

Databáze => Firebird a Interbase => Téma založeno: vandrovnik 13-03-2019, 18:57:48

Název: SELECT ... INTO ...
Přispěvatel: vandrovnik 13-03-2019, 18:57:48
Ahoj,  nemohl byste mě někdo nasměrovat na dokumentaci, kde by bylo napsáno, co přesně se stane u příkazu SELECT ... INTO ..., pokud není vybrán žádný záznam? Nevím proč jsem si myslel, že se do proměnné má zapsat NULL, ale jak jsem dnes zjistil, není tomu tak :-) Firebird 3 a Firebird 2.5.

Něco jako:
Radek=9999;
SELECT FIRST 1 a.Radek
 FROM ... a
 WHERE (1=2)
 INTO :Radek;

Název: Re:SELECT ... INTO ...
Přispěvatel: Stanislav Hruška 13-03-2019, 19:24:12
Asi máš na mysli toto https://firebirdsql.org/refdocs/langrefupd25-psql-forselect.html
Pokiaľ je viem, tak to funguje na spôsob ako
Kód: [Vybrat]
while not Dataset.Eof do

...
a keďže Dataset je prázdny, tak nezbehne žiaden cyklus.
Název: Re:SELECT ... INTO ...
Přispěvatel: vandrovnik 13-03-2019, 19:54:40
U toho FOR SELECT bych očekával, že se nic nestane, ale tohle je použito bez FOR (já tam jen potřebuji najít, na jakém řádku se vyskytuje položka s určitými parametry, a právě že jsem čekal, že nevyskytuje-li se vůbec, dostanu NULL).
Název: Re:SELECT ... INTO ...
Přispěvatel: Stanislav Hruška 13-03-2019, 20:46:30
Už rozumiem. Lenže FB vráti prázdny dataset a podľa mňa tak nemá čo vrátiť. Ani očakávaný null. To je len moja domienka a na internete som k tomu nič nenašiel.
Najprv som to omylom spustil v Access-e a ten vrátil jeden riadok s hodnotou 0 :)
Název: Re:SELECT ... INTO ...
Přispěvatel: chaloup 14-03-2019, 10:50:00
Podle mě je nejlepší v takovém případě testovat:
IF (ROW_COUNT = 1) THEN
Název: Re:SELECT ... INTO ...
Přispěvatel: Palino 21-06-2019, 14:31:46
napis

 Radek = (SELECT FIRST 1 a.Radek  FROM ... a  WHERE (1=2) );

a mas co si chcel, pri prazdnom vysledku je redak = null
Název: Re:SELECT ... INTO ...
Přispěvatel: vandrovnik 21-06-2019, 14:40:07
Radek = (SELECT FIRST 1 a.Radek  FROM ... a  WHERE (1=2) );

Díky za tip!