delphi xe3连接sqlite3时,如何使用布尔类型?

时间:2022-12-28 05:25:48
我用unidac5连接 sqlite3

分别尝试用 integer 和 text类型储存原boolean类型的字段isimg。
在DELPHI XE3中这样读取

uniquery1.FieldByName('isimg').AsBoolean;

但报错'Cannot access field 'istrimrule' as type Boolean'

查看data.db单元中的asboolean的源码为

property AsBoolean: Boolean read GetAsBoolean write SetAsBoolean;
function TField.GetAsBoolean: Boolean;
begin
  raise AccessError('Boolean'); { Do not localize }
end;


而tfield的子类如tstringfiled等才有GetAsBoolean的实现函数,因此用text存储时尝试这样写
 tstringfiled(uniquery1.FieldByName('isimg')).asboolean; 

但仍然报同样错误。

请教该如何操作,asboolean在使用sqlite3时确实无法使用吗?


2 个解决方案

#1


弄明白了,sqlite 的TEXT存储类型无论是否设长度,在unidac下都会被转为ftwidememo,即tblobfiled,它没有asbloolean方法。

用integer存储类型时,可以用在open之前datatypemap指定字段为boolean类型。

最后发现,sqlite里,居然可以用integer\text\blob\real之外的其他类型,被navicat for sqlite误导了,它设计表/导入表时默认不提供其他类型选择,但可以自行输入。

#2


最喜欢设问贴了 delphi xe3连接sqlite3时,如何使用布尔类型?

#1


弄明白了,sqlite 的TEXT存储类型无论是否设长度,在unidac下都会被转为ftwidememo,即tblobfiled,它没有asbloolean方法。

用integer存储类型时,可以用在open之前datatypemap指定字段为boolean类型。

最后发现,sqlite里,居然可以用integer\text\blob\real之外的其他类型,被navicat for sqlite误导了,它设计表/导入表时默认不提供其他类型选择,但可以自行输入。

#2


最喜欢设问贴了 delphi xe3连接sqlite3时,如何使用布尔类型?