IBQuery неправильно работает с Boolean?

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Pavel_ch
Сообщения: 24
Зарегистрирован: 09 мар 2006, 15:21

IBQuery неправильно работает с Boolean?

Сообщение Pavel_ch » 30 сен 2006, 14:48

Вопрос по IBX 7.0.8 (IB 7.0.1)
Нужно добавить запись в таблицу, одно из значений которой имеет тип Boolean.
В IBQuery вписал запрос

Код: Выделить всё

insert into usr_names (usr_name, priv, admin) values (:usrname, :priv, :admin)
Поля priv и admin являются полями типа Boolean.
Передаю параметрам значения:

Код: Выделить всё

IBQuery1.Prepare;
....
IBQuery1.Params[2].AsBoolean:=True;
....
При попытке выполнить запрос вылетает исключение Arithmetic exception, string truncation or numeric overflow
Смотрю через SQLMonitor и вижу что вместо True параметру присваевается -1, а вместо False - 0. Это так и должно быть? Как с этим бороться?
Мне нужны именно поля типа Boolean - замена на Char(1) не подходит.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 30 сен 2006, 16:44

В IBX не реализована эмуляция Boolean-полей (но она есть в FIB+).
Для работы с логикой используй числовое присвоение и сравнение:

Код: Выделить всё

IBQuery1.Params[2].AsInteger := 1;
и

Код: Выделить всё

if IBQuery1.FieldByName('SomeName').AsInteger = 1 then
begin
end;

Pavel_ch
Сообщения: 24
Зарегистрирован: 09 мар 2006, 15:21

Сообщение Pavel_ch » 30 сен 2006, 17:12

Не думал что всё так плохо с IBX....
И тем не менее, спасибо за разъяснение ситуации!

Ответить