毎年のように、私は SA 所有者として新しい Delphi バージョンを受け取り、これが私がしていることです:
- Delphi バージョン XX をインストールします。
- Delphi バージョン XX を実行する
- TSQLConnection コンポーネントを挿入します。
- 少なくともあと 6 年間は Microsoft SQL Server 2000 に接続してください。
- いくつかの金額フィールドを持つテーブルである「select top 1 * from myTable」を使用して TSQLQuery を挿入します。
- さらにコンポーネント TDatasetProvider、TClientdataset、TDatasource、TDBGrid、および TButton を挿入します。
- すべてをリンクします。
- Raise 例外を使用して DatasetProvider.OnUpdateError にイベント ハンドラーを作成します。
- clientdataset1.applyupdates(0); ボタン1クリックで。
- 現在のレコードにいくつかの変更を加えます。
- button1 を押すと、delphi 2005 以降で提供されているものと同じ例外が発生します。
- 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'
誰かがこの問題の回避策を持っていますか?