Lazarus и тип TINYINT(1) в MySQL

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Lazarus и тип TINYINT(1) в MySQL

Сообщение Alexus » 22.06.2010 16:25:43

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).

Мне в голову ничего не приходит.
Кто может чем помочь?
Alexus
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.12.2009 16:08:14

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

Сообщение Nik » 22.06.2010 23:36:58

Если там обычный флаг, то можно получать значение поля AsInteger и использовать сравнение с единицей/нулём.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

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

Сообщение Alexus » 23.06.2010 11:55:03

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;
Alexus
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.12.2009 16:08:14

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

Сообщение Brainenjii » 23.06.2010 15:02:27

А нельзя просто Integer(dahBud_rbtn.Checked); ?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Alexus » 24.06.2010 13:08:59

Brainenjii писал(а):А нельзя просто Integer(dahBud_rbtn.Checked); ?


Не знал, что так можно, попробую, спасибо!!!
Alexus
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.12.2009 16:08:14


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

Рейтинг@Mail.ru