2009-09-02 221 views
1

每年都像一個bug(艱難地)我收到一個新的Delphi版本SA所有者,這是我做的:解決中的TDataSetProvider德爾福2010年或德爾福2009年

  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. 在具有Raise異常的DatasetProvider.OnUpdateError中創建事件處理程序。
  9. clientdataset1.applyupdates(0);在button1點擊。
  10. 對當前記錄進行一些更改。
  11. 按下按鈕1並獲得delphi 2005及更高版本提供的相同例外。
  12. 續訂我爲MsSQLServer的corelab或devArt dbx驅動程序。

認真地現在。我在幾年前發現TDatasetprovider正在生成一個非常簡單的錯誤:TFMTBCDField(Delphi中貨幣字段的表示)會爲SQL Server 2000和以前版本生成不兼容的插入/更新sql命令。問題很簡單,數據集提供程序爲這些sql服務器不接受的貨幣字段生成引用值。

示例: 帶有varchar字段和金錢字段的表。 您可以使用這樣的更新:

UPDATE testtable set MYMONEYFIELD = '1' where MYVARCHARFIELD = 'A'

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

UPDATE testtable set MYMONEYFIELD = 1 where MYVARCHARFIELD = 'A'

有人對這個問題的任何解決方法嗎?

+1

您是否在QC上註冊了此錯誤? – 2009-09-02 18:22:21

+0

我想過提示,但這隻會影響MS SQL 2000的用戶,而供應商已棄用MS SQL 2000。這是一個錯誤? – Argalatyr 2009-09-02 18:30:13

+1

是的,因爲它是一個數字字段,不應該引用該值(因爲該值不是字符串)。 RDBMS的新版本容忍這個事實並不能使它成爲一個功能 - 這是一個錯誤。而SQL Server 2000被廣泛使用,因爲它只是工作,大多數房屋不想遷移到最後一刻。 – 2009-09-02 18:45:56

回答

0

Borland/CodeGear/Embarcadero對此不以爲然,但如果這僅適用於您自己的應用程序,則可以追蹤到VCL源代碼並對源代碼進行必要更改以確保您獲得正確的SQL生成。每次獲得新版本或修復之前,您都需要進行此更改,但這會解決您的問題。

您可以將您的更改提交到codegear,看看他們是否會插入它。