每年都像一個bug(艱難地)我收到一個新的Delphi版本SA所有者,這是我做的:解決中的TDataSetProvider德爾福2010年或德爾福2009年
- 安裝delphi版XX。
- 運行delphi版本XX
- 插入一個TSQLConnection組件。
- 將它連接到Microsoft SQL Server 2000,他們將與我們在一起至少六年。
- 插入一個帶有'select top 1 * from myTable'的TSQLQuery,這是一個帶有一些貨幣字段的表。
- 插入更多組件TDatasetProvider,TClientdataset,TDatasource,TDBGrid和TButton。
- 鏈接一切。
- 在具有Raise異常的DatasetProvider.OnUpdateError中創建事件處理程序。
- clientdataset1.applyupdates(0);在button1點擊。
- 對當前記錄進行一些更改。
- 按下按鈕1並獲得delphi 2005及更高版本提供的相同例外。
- 續訂我爲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'
有人對這個問題的任何解決方法嗎?
您是否在QC上註冊了此錯誤? – 2009-09-02 18:22:21
我想過提示,但這隻會影響MS SQL 2000的用戶,而供應商已棄用MS SQL 2000。這是一個錯誤? – Argalatyr 2009-09-02 18:30:13
是的,因爲它是一個數字字段,不應該引用該值(因爲該值不是字符串)。 RDBMS的新版本容忍這個事實並不能使它成爲一個功能 - 這是一個錯誤。而SQL Server 2000被廣泛使用,因爲它只是工作,大多數房屋不想遷移到最後一刻。 – 2009-09-02 18:45:56