1

毎年のように、私は SA 所有者として新しい Delphi バージョンを受け取り、これが私がしていることです:

  1. Delphi バージョン XX をインストールします。
  2. Delphi バージョン XX を実行する
  3. TSQLConnection コンポーネントを挿入します。
  4. 少なくともあと 6 年間は 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); ボタン1クリックで。
  10. 現在のレコードにいくつかの変更を加えます。
  11. button1 を押すと、delphi 2005 以降で提供されているものと同じ例外が発生します。
  12. MSQLServer 用の corelab または devArt dbx ドライバーを更新します。

今真剣に。数年前、TDatasetprovider が非常に単純なエラーを生成していることに気付きました。TFMTBCDField (Delphi での money フィールドの表現) は、SQL Server 2000 およびそれ以前のバージョンに対して互換性のない挿入/更新 SQL コマンドを生成します。問題は単純です。データセット プロバイダーは、これらの SQL サーバーでは受け入れられない金額フィールドの引用符付きの値を生成します。

例: varchar フィールドと money フィールドを持つテーブル。次のような更新を使用できます。

UPDATE テストテーブル セット MYMONEYFIELD = '1' where MYVARCHARFIELD = 'A'

以前のバージョンの SQLServer では、次を使用する必要があります。

UPDATE テストテーブル セット MYMONEYFIELD = 1 where MYVARCHARFIELD = 'A'

誰かがこの問題の回避策を持っていますか?

4

1 に答える 1

0

This is frowned upon by Borland/CodeGear/Embarcadero, but if this is only for your own apps, you can trace down into the VCL source and make the necessary change to the source to ensure you get the correct SQL Generated. You would need to make this change each time you got a new version or until it was fixed, but it would solve your issue.

You could submit your change to codegear and see if they would plug it in.

于 2009-12-29T11:56:54.743 に答える