在使用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的时候就不会出问题;