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).
Мне в голову ничего не приходит.
Кто может чем помочь?
Lazarus и тип TINYINT(1) в MySQL
Модератор: Модераторы
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;
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
А нельзя просто Integer(dahBud_rbtn.Checked); ?
Brainenjii писал(а):А нельзя просто Integer(dahBud_rbtn.Checked); ?
Не знал, что так можно, попробую, спасибо!!!
