Проблем с IBSQL

6 отговора 0 прегледа
#1

Проблем с IBSQL

Използвам D5 (UpdatePack 1) и IBSQL (IBX 5.04) с Firebird 1.5 и имам проблем.

Става въпрос за SELECT заявки, които не откриват търсените данни в базата. В такъв случай IBQuery връща един запис с едно поле което е NULL. Ако ползвам IBSQL обаче, той също връща един ред с едно поле, което е 0 за числовите колони или празен низ за символните колони, но не е NULL (IBSQL.Fields[0].IsNull винаги е false).

Някой има ли идея защо е това поведение? Как да разбера, че това, което го търся с IBSQL заявка го няма?

Отговор
в отговор на питaщ #2

Дай да видим заявката

Дай да я видим заявката каква е.

Отговор
в отговор на andrew_nikoloff #3

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. В първичния ключ ли е проблема?

Отговор
в отговор на питaщ #4

Re: Дай да видим заявката

Мда... Пак трябва да споменем на Jeff Overcash майка му
IBQuery не би трябвало да ти греши, но IBSQL наистина и при мен се омаза. Проблемът е, че в ей тая процедурка

function TIBXSQLVAR.GetIsNull: Boolean;
begin
result := IsNullable and (FXSQLVAR^.sqlind^ = -1);
end;

sqlind не е попълнен като хората...
За да разбереш дали имаш върнат запис можеш да ползваш IsEmpty пропъртито на IBQuery или RecordCount пропъртито, което го имат и двата компонента.

Отговор
в отговор на питaщ #5

Re: Дай да видим заявката

В примерите няма, ама все пак да те попитам дали не използваш агрегатни функции като Min, Max или Sum някъде?

п.п. Май сте открили проблема

Редактирано от vido на

Отговор
в отговор на andrew_nikoloff #6

Re: Дай да видим заявката

Също, ако EOF = true веднага след отварянето, резултата е празно множество. Работи и при двете - IBQuery и IBSQL.

Mixy
Отговор
в отговор на питaщ #7

Re: Проблем с IBSQL

Мерси на всички за насоките и идеите :)

Отговор