uniGUI 动态创建TUniQuery,浮点类型的坑

在使用uniGUI开发过程中,动态创建TUniQuery对象,是比较常见的操作,但是里面有些可能会忽略的问题,今天在此记录一下(我自己是被坑了的);

动态创建TUniQuery对象

UniQry_ProfitRecs := TUniQuery.Create(nil);

UniQry_ProfitRecs.Connection := UniConnectionSync;

按照使用ADOQuery的习惯,这样就可以了,直接使用;但是当遇到数据表Tabl_A中有金额类型的数据,而且金额的小数位数非常长,类似如下图:

在查询的过程中,如果使用常规的SQL,如下:
with UniQry_ProfitRecs do

begin

    Close;
    Sql.Clear;
    Sql.Add('select * from Tabl_A');  

    Open

end;

就会执行查询失败,异常:floating point overflow

原因就是,动态创建的 TUniQuery 的属性EnableBCD值,默认是False;此时需要在创建TUniQuery的时候,增加上开始EnableBCD属性:

UniQry_ProfitRecs := TUniQuery.Create(nil);
UniQry_ProfitRecs.Connection := UniConnectionSync;
UniQry_ProfitRecs.Options.EnableBCD := True;

这样就可以了;

当然还可以动态添加上需要查询的字段,设置字段类型,这样也是可行的;

在此还说一个问题,如果在查询的数据里面有日期类型,例如:

如果在使用的过程中,进行赋值操作,如下:

StartDate := UniQry_Update.FieldByName('start_date').AsString;

StartDate的值可能会是'24-4-1',这样在后续使用的时候,也会出问题;解决方式和上面金额的类似,也可以通过设置字段属性处理;但是我没有深入去找具体是哪一个属性;可以在赋值的时候,做一个转换处理,如下:
StartDate := FormatDateTime('yyyy-MM-dd', UniQry_Update.FieldByName('start_date').AsDateTime);

这样,StartDate值就是'2024-04-24',在后续使用到StartDate的时候就不会出问题;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值