与 TBCDField 和 TfmtBCDfield 的类型不匹配以及 oracle 兼容性问题

Posted

技术标签:

【中文标题】与 TBCDField 和 TfmtBCDfield 的类型不匹配以及 oracle 兼容性问题【英文标题】:Trouble with type mismatch with TBCDField and TfmtBCDfield and oracle compatibility 【发布时间】:2012-04-21 09:18:42 【问题描述】:

我正在将一个大型应用程序从 Delphi 6 转换为 Delphi 2009。

它最初是为使用 Oracle 8i 而构建的,但现在需要使用到 Oracle 11g。原始应用程序使用 oracle 11g 非常愉快,如果我使用 Delphi 6 重新构建它,也会这样做。

为了解决过去 11 年开发的应用程序的一些字符集/字符显示问题和其他小问题,我决定在更高版本的 Delphi 中重建它(这也延迟了几个年后使用 2009 年。)这是为此目的而购买的。我现在已经击败了 550 多个关于这个、那个和另一个的编译器警告。

但现在我尝试针对我的测试 oracle 11g 数据库打开的几乎每个表/数据集都报告“字段 'xxxxxx' 的类型不匹配,期望 BCD 实际 FmtBCDField。

有没有办法在不打开所有 80 多个数据模块的情况下保证与客户端数据库安装的兼容性?我不介意全部更改它们,但我无法在没有大量混乱的情况下针对实时数据库对其进行测试,并且不想这样做只是为了在客户的站点上得到相反的错误!

这些几乎都是 TClientDataSet 中连接到 ADO 查询的持久字段,但在(几乎)所有情况下都使用 FieldByName 进行访问。

有什么想法吗?

【问题讨论】:

嗨,我遇到了同样的问题。只是一个建议:首先,尝试运行可执行应用程序并检查问题是否仍然存在。有时它在可执行文件上运行良好,但在调试时会出现一些错误。第二,你说使用ADO。我猜它使用 oracle 11g 的 ODBC 驱动程序。可能问题出在 ODBC 驱动程序或 ADO 本身。 【参考方案1】:

当我需要我的 DBXpress 应用程序同时使用 Oracle 9 和 11 时,我遇到了类似的问题。出于某种原因,DBXpress 会根据 Oracle 数据库版本以不同的方式识别一些 NUMBER 字段。我通过将数字字段转换为更大的数字字段并在我的所有查询中更改 FMTBCD 字段的 BCD 字段来解决它,转换强制 DBXpress 将每个 NUMBER 识别为 FMTBCD,因为 BCD 无法支持如此大的数字,也许它会也可以在 ADO 上工作。

【讨论】:

以上是关于与 TBCDField 和 TfmtBCDfield 的类型不匹配以及 oracle 兼容性问题的主要内容,如果未能解决你的问题,请参考以下文章

“与 Workspace 版本比较”和“与最新版本比较”有啥区别?

NSFetchedResultsController 与 CollectionView 问题与索引/单元格更新和删除操作

类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

关于同步与异步和阻塞与非阻塞的解释

健康能量系统与训练应用和心肺耐力与运动表现

如何与两种用户类型和一种模型与具有和属于轨道中的许多关系进行关联?