与 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 问题与索引/单元格更新和删除操作