就像每年我作为 SA 所有者都会收到一个新的 Delphi 版本,这就是我所做的:
- 安装delphi版本XX。
- 运行delphi版本XX
- 插入一个 TSQLConnection 组件。
- 将它连接到 Microsoft SQL Server 2000,它至少会与我们一起工作六年。
- 插入一个带有“select top 1 * from myTable”的 TSQLQuery,这是一个带有一些货币字段的表。
- 插入更多组件 TDatasetProvider、TClientdataset、TDatasource、TDBGrid 和一个 TButton。
- 链接一切。
- 在带有引发异常的 DatasetProvider.OnUpdateError 中创建一个事件处理程序。
- 一个clientdataset1.applyupdates(0); 在按钮1click。
- 对当前记录进行一些更改。
- 按 button1 并得到 delphi 2005 及更高版本提供的相同异常。
- 为 MsSQLServer 更新我的 corelab 或 devArt dbx 驱动程序。
现在是认真的。几年前我发现 TDatasetprovider 正在生成一个非常简单的错误: TFMTBCDField(Delphi 中货币字段的表示)为 SQL Server 2000 和以前的版本生成不兼容的插入/更新 sql 命令。问题很简单,数据集提供程序为那些 sql 服务器不接受的货币字段生成引用值。
示例:具有 varchar 字段和 money 字段的表。您可以使用这样的更新:
更新测试表设置 MYMONEYFIELD = '1' 其中 MYVARCHARFIELD = 'A'
对于以前版本的 SQLServer,您需要使用:
更新测试表设置 MYMONEYFIELD = 1 其中 MYVARCHARFIELD = 'A'
有人对此问题有任何解决方法吗?