计入Firebird 3.0 Bigint vs Firebird 2.5整数

时间:2016-12-08 12:00:06

标签: database delphi-7 firebird unidac firebird-3.0

早上好!在我的系统上,从Firebird 2.5迁移到3.0后,许多报告和其他功能开始出现问题,说明预期的是Integer,而当前的是LargeInt。我看一下,看到一些用3.0计数的搜索返回一个Bigint列,而在2.5中它返回一个Integer列。

为了解决我所知道的方式,我必须对所有提供错误,测试和工作的内容进行投射,但这是一个很大的系统,它会带来很多工作。

有没有人知道在Firebird中解决这个问题的方法有哪些?一些配置,还是什么?

3 个答案:

答案 0 :(得分:3)

没有配置; Firebird 3 release notes only say

  

COUNT()聚合器现在将结果返回为BIGINT而不是INTEGER

您需要在查询或代码中显式应用强制转换,或者查看数据访问库是否可以显式请求整数而不仅仅是动态类型。例如,在Java世界中,JDBC API具有显式getInt,只要该值适合32位整数,它就适用于BIGINT

答案 1 :(得分:0)

我使用的是Unidac,对于解决方案,我使用了Map Rules(数据类型映射)。

答案 2 :(得分:0)

在任何 delphi 组件中使用 SQL 中的 TYPECAST 就可以了。例如白:

select
cast(count(*) as integer) BR
from ...

代替

select
count(*) BR
from ...