Проблем с IBSQL
6 отговора
0 прегледа
Проблем с IBSQL
Използвам D5 (UpdatePack 1) и IBSQL (IBX 5.04) с Firebird 1.5 и имам проблем.
Става въпрос за SELECT заявки, които не откриват търсените данни в базата. В такъв случай IBQuery връща един запис с едно поле което е NULL. Ако ползвам IBSQL обаче, той също връща един ред с едно поле, което е 0 за числовите колони или празен низ за символните колони, но не е NULL (IBSQL.Fields[0].IsNull винаги е false).
Някой има ли идея защо е това поведение? Как да разбера, че това, което го търся с IBSQL заявка го няма?
Става въпрос за SELECT заявки, които не откриват търсените данни в базата. В такъв случай IBQuery връща един запис с едно поле което е NULL. Ако ползвам IBSQL обаче, той също връща един ред с едно поле, което е 0 за числовите колони или празен низ за символните колони, но не е NULL (IBSQL.Fields[0].IsNull винаги е false).
Някой има ли идея защо е това поведение? Как да разбера, че това, което го търся с IBSQL заявка го няма?
Re: Дай да видим заявката
select KIND from TABLE1 where ID = -1
Таблицата е с полета ID, PARENT_ID, DEPTH, NAME, KIND. ID e првичен ключ. Запис с ID = -1 няма.
Друга заявка, напр:
select NAME from TABLE1 where ID = 10000
връща празен низ (AsString) или 0 (AsInteger). Запис с ID = 10000 също няма.
И при двете заявки, IsNull дава false. В първичния ключ ли е проблема?
Таблицата е с полета ID, PARENT_ID, DEPTH, NAME, KIND. ID e првичен ключ. Запис с ID = -1 няма.
Друга заявка, напр:
select NAME from TABLE1 where ID = 10000
връща празен низ (AsString) или 0 (AsInteger). Запис с ID = 10000 също няма.
И при двете заявки, IsNull дава false. В първичния ключ ли е проблема?
Re: Дай да видим заявката
Мда... Пак трябва да споменем на Jeff Overcash майка му
IBQuery не би трябвало да ти греши, но IBSQL наистина и при мен се омаза. Проблемът е, че в ей тая процедурка
sqlind не е попълнен като хората...
За да разбереш дали имаш върнат запис можеш да ползваш IsEmpty пропъртито на IBQuery или RecordCount пропъртито, което го имат и двата компонента.
IBQuery не би трябвало да ти греши, но IBSQL наистина и при мен се омаза. Проблемът е, че в ей тая процедурка
function TIBXSQLVAR.GetIsNull: Boolean;
begin
result := IsNullable and (FXSQLVAR^.sqlind^ = -1);
end;
sqlind не е попълнен като хората...
За да разбереш дали имаш върнат запис можеш да ползваш IsEmpty пропъртито на IBQuery или RecordCount пропъртито, което го имат и двата компонента.
Re: Дай да видим заявката
В примерите няма, ама все пак да те попитам дали не използваш агрегатни функции като Min, Max или Sum някъде?
п.п. Май сте открили проблема
п.п. Май сте открили проблема
Редактирано от vido на
Re: Дай да видим заявката
Също, ако EOF = true веднага след отварянето, резултата е празно множество. Работи и при двете - IBQuery и IBSQL.
Mixy
Mixy