Страница 1 из 1

Lazarus и тип TINYINT(1) в MySQL

СообщениеДобавлено: 22.06.2010 16:25:43
Alexus
Lazarus не хочет пoнимать тип TINYINT(1) в MySQL:
в строке:
dba_frm.SQLQuery1.FieldByName('obl_dah_bud').AsBoolean := dahBud_rbtn.Checked;

выдает ошибку-

"invalid type conversion to Boolean in field obl_dah_bud"

где obl_dah_bud - поле в таблице MySQL 5.04 типа TINYINT(1) (которое по документации является аналогом Boolean).

Мне в голову ничего не приходит.
Кто может чем помочь?

Re: Lazarus и тип TINYINT(1) в MySQL

СообщениеДобавлено: 22.06.2010 23:36:58
Nik
Если там обычный флаг, то можно получать значение поля AsInteger и использовать сравнение с единицей/нулём.

Re: Lazarus и тип TINYINT(1) в MySQL

СообщениеДобавлено: 23.06.2010 11:55:03
Alexus
Nik писал(а):Если там обычный флаг, то можно получать значение поля AsInteger и использовать сравнение с единицей/нулём.


Вроде бы оно и так, но я присваиваю полю базы данных булевское значение (свойство checked - возвращает не 0 или 1 тип integer, а true или false типа boolean)
можно и обойти это, но программа будет похожа на калеку с костылями, хотя вижу, что так и придется поступать.

Спасибо за помощь.

Добавлено спустя 1 час 59 минут 31 секунду:
Нашел решение, может кому-нибудь еще пригодиться:
Создал функцию по преобразованию boolean в integer

function Tmisk_table.BoolToInt(b: boolean): Integer;
begin
if b then BoolToInt:= 1 else BoolToInt:= 0;
end;

и поредактировал строки присваивания полям MySQL из dba_frm.SQLQuery1.FieldByName('obl_dah_bud').AsBoolean := dahBud_rbtn.Checked;
на dba_frm.SQLQuery1.FieldByName('obl_dah_bud').AsInteger := BoolToInt(dahBud_rbtn.Checked);

Получается довольно красиво, хоть и не важно это. :-)

Получается, что MySQL не работает с "чистым" boolean, а заменяет его на tinyint(1), где значение 0 - принимается за false, а любое отличное от нуля - true;

Re: Lazarus и тип TINYINT(1) в MySQL

СообщениеДобавлено: 23.06.2010 15:02:27
Brainenjii
А нельзя просто Integer(dahBud_rbtn.Checked); ?

Re: Lazarus и тип TINYINT(1) в MySQL

СообщениеДобавлено: 24.06.2010 13:08:59
Alexus
Brainenjii писал(а):А нельзя просто Integer(dahBud_rbtn.Checked); ?


Не знал, что так можно, попробую, спасибо!!!