在Delphi 2010或Delphi 2009中解决TDatasetProvider中的错误(困难的方法)

时间:2009-09-02 10:54:40

标签: sql-server delphi sql-server-2000 dbexpress

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

  1. 安装delphi版本XX。
  2. 运行delphi版本XX
  3. 插入TSQLConnection组件。
  4. 将其连接到将至少再与我们合作六年的Microsoft SQL Server 2000.
  5. 使用'myTable'选择顶部1 *插入TSQLQuery,这是一个带有一些货币字段的表。
  6. 插入更多组件TDatasetProvider,TClientdataset,TDatasource,TDBGrid和TButton。
  7. 链接一切。
  8. 使用Raise异常在DatasetProvider.OnUpdateError中创建一个事件处理程序。
  9. clientdataset1.applyupdates(0);在button1click。
  10. 对当前记录进行一些更改。
  11. 按下按钮1,获得delphi 2005及以上版本提供的相同例外。
  12. 为MsSQLServer续订我的corelab或devArt dbx驱动程序。
  13. 现在认真。几年前我发现TDatasetprovider产生了一个非常简单的错误:TFMTBCDField(Delphi中的money字段表示)为SQL Server 2000和以前的版本生成了不兼容的insert / update sql命令。问题很简单,数据集提供程序为这些sql服务器不接受的货币字段产生报价值。

    实施例: 带有varchar字段和money字段的表。 您可以使用以下更新:

      

    UPDATE testtable set MYMONEYFIELD ='1',其中MYVARCHARFIELD ='A'

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

      

    UPDATE testtable set MYMONEYFIELD = 1其中MYVARCHARFIELD ='A'

    有人为此问题找到了解决方法吗?

1 个答案:

答案 0 :(得分:0)

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

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