FireDAC 出现Variable length column[*] overflow. Value length - [80], column maximum length

FireDAC 出现Variable length column[*] overflow. Value length - [80], column maximum length

FireDAC的 TFDQuery组件访问SQLlite数据库,使用insert into语句插入一条数据长度为80的字符串,但是用 select * from 查询的时候却出现异常:[FireDac][DatS]-32. Variable length column[Namee] overflow. Value length - [80], column maximum length - [40].,出现错误的原因我很清楚,数据库中字段长度是40,无法读取80个字节的数据,但是为什么插入的不提示错误,查询的时候才出现异常,这要是万一插入超长的数据,以后就没办法读取了,而且也不知道是那条数据超长了,因为只要表中有一条超长的数据,select * from 语句就会返回这个异常,根本无法读取整个表中的内容。

经过查询资料,多次测试,找到了下面两种解决方法

方法1:

修改TFDConnection下面的两个属性

 

  • FormatOptions.OwnMapRules 设置为 True
  • FormatOptions.MapRules 添加两个子项,第一个子项的两个属性 SourceDataType = dtWideString,TargetDataType = dtWideMemo;第二个子项的两个属性dtAnsiString, TargetDataType = dtWideMemo

 

上述方法是将字符串类型字段映射为Memo类型的字段,Memo类型的字段是不判断长度的,就不会出现这种异常了,使用TFDQuery.FieldByname('name').AsString可以获取完整的80个字符。

这种方法存在一个问题,在使用DBGrid显示这些数据的时候,会显示为TMemo也就是DBGrid不能直接将Memo类型显示出来。

 

方法2:

修改TFDConnection下面的1个属性

 

  • FormatOptions.StrsTrim2Len 设置为True
这个方法是将超长的数据截断,也就是只取得前面40个字符。
posted @ 2017-04-12 09:14  delphi中间件  阅读(1388)  评论(0编辑  收藏  举报