在我的系统上,从 Firebird 2.5 迁移到 3.0 后,许多报告和其他功能开始出现问题,说明预期的是 Integer 而当前的是LargeInt
. 我看了一下,发现一些在 3.0 中使用 count 的搜索返回 abigInt
列,而在 2.5 中它返回一个整数列。
为了解决我所知道的方法,我必须对所有产生错误、经过测试和工作的东西进行强制转换,但这是一个很大的系统,它会做很多工作。
有谁知道在 Firebird 本身中解决这个问题的任何方法?一些配置,还是什么?
在我的系统上,从 Firebird 2.5 迁移到 3.0 后,许多报告和其他功能开始出现问题,说明预期的是 Integer 而当前的是LargeInt
. 我看了一下,发现一些在 3.0 中使用 count 的搜索返回 abigInt
列,而在 2.5 中它返回一个整数列。
为了解决我所知道的方法,我必须对所有产生错误、经过测试和工作的东西进行强制转换,但这是一个很大的系统,它会做很多工作。
有谁知道在 Firebird 本身中解决这个问题的任何方法?一些配置,还是什么?
它没有配置;Firebird 3 发行说明只说:
聚合器现在返回其
COUNT()
结果BIGINT
而不是INTEGER
.
您要么需要在查询或代码中显式应用强制转换,要么查看您的数据访问库是否可以显式请求整数而不仅仅是动态类型。例如,在 Java 世界中,JDBC API 有一个显式的,只要值适合 32 位整数,它就getInt
可以工作。BIGINT
在任何 delphi 组件中使用 SQL 中的 TYPECAST 就可以了。例如写:
选择 cast(count(*) as integer) BR 从 ...
代替
选择 计数(*) BR 从 ...
我使用 Unidac,对于解决方案,我使用了 Map Rules(数据类型映射)。