1

就像每年我作为 SA 所有者都会收到一个新的 Delphi 版本,这就是我所做的:

  1. 安装delphi版本XX。
  2. 运行delphi版本XX
  3. 插入一个 TSQLConnection 组件。
  4. 将它连接到 Microsoft SQL Server 2000,它至少会与我们一起工作六年。
  5. 插入一个带有“select top 1 * from myTable”的 TSQLQuery,这是一个带有一些货币字段的表。
  6. 插入更多组件 TDatasetProvider、TClientdataset、TDatasource、TDBGrid 和一个 TButton。
  7. 链接一切。
  8. 在带有引发异常的 DatasetProvider.OnUpdateError 中创建一个事件处理程序。
  9. 一个clientdataset1.applyupdates(0); 在按钮1click。
  10. 对当前记录进行一些更改。
  11. 按 button1 并得到 delphi 2005 及更高版本提供的相同异常。
  12. 为 MsSQLServer 更新我的 corelab 或 devArt dbx 驱动程序。

现在是认真的。几年前我发现 TDatasetprovider 正在生成一个非常简单的错误: TFMTBCDField(Delphi 中货币字段的表示)为 SQL Server 2000 和以前的版本生成不兼容的插入/更新 sql 命令。问题很简单,数据集提供程序为那些 sql 服务器不接受的货币字段生成引用值。

示例:具有 varchar 字段和 money 字段的表。您可以使用这样的更新:

更新测试表设置 MYMONEYFIELD = '1' 其中 MYVARCHARFIELD = 'A'

对于以前版本的 SQLServer,您需要使用:

更新测试表设置 MYMONEYFIELD = 1 其中 MYVARCHARFIELD = 'A'

有人对此问题有任何解决方法吗?

4

1 回答 1

0

Borland/CodeGear/Embarcadero 对此不以为然,但如果这仅适用于您自己的应用程序,您可以追溯 VCL 源并对源进行必要的更改,以确保生成正确的 SQL。每次获得新版本或修复之前,您都需要进行此更改,但这会解决您的问题。

您可以将更改提交给 codegear,看看他们是否会插入。

于 2009-12-29T11:56:54.743 回答