My Delphiプロジェクトには、MS Sql Server 2014サーバー上のTAdoQueryアクセスデータと、TDataSetProvider経由でAdoQueryデータを受け取るTClientDataSetがあります。これは私が設定したプロジェクトテンプレートから作成されます。TClientDataSet.ApplyUpdates()は更新を適用しません
通常、このセットアップは問題なく動作することがわかりましたが、この特定のプロジェクトでは問題があります.AppUpdates()はサイレントモードで失敗し、Sql Serverのデータは更新されません。私のダウン剥奪デバッグプロジェクト、私が持っている唯一のコードでは、離れてそれを呼び出すボタンクリックハンドラから、次のとおりです。
procedure TForm1.ApplyUpdates;
var
Errors : Integer;
begin
Errors := ClientDataSet1.ApplyUpdates(0);
Caption := IntToStr(Errors) + '/' + IntToStr(ClientDataSet1.ChangeCount);
end;
これが実行された後、フォームのキャプションはもちろんの0/0
でなければなりませんが、何それは実際に言います0/1
です。そのため、エラーは発生していませんしかし CDS ChangeCount
はゼロにリセットされていません。私の質問は、どのようにApplyUpdatesがエラーを返すことができますが、サーバーのデータセットは更新されません。
Fwiw、問題をデバッグするための努力の一環としてChangeCountディスプレイを追加しました。しかし、私は、DataSetProviderとそのDataSet間の "会話"の詳細について、サーバー上で更新を適用するために行われていることに従うことができなかったのではないかと心配しています。
エラーハンドラOnReconcileErrorのコードを追加しましたか? – mjn