標準のデータベース対応コンポーネントと dbExpress を使用して、Delphi 6 + MySQL データベースでアプリを作成しています。このアプリを使用すると、ユーザーはグリッド内のレコードを表示し、クライアント側でデータを編集 (レコードの挿入および/または削除) できます。これらのデータ編集は、送信ボタンをクリックしたときにのみデータベースに書き込まれます。これはすべて正常に機能し、次の設定があります。
コントロール: 1. データを視覚的に表示するために DataSource1 にリンクされた DBGrid1。2. DataSource1 は ClientDataSet1 にリンクされ、DBGrid が表示するデータを提供します。3. ClientDataSet1 は DataSetProvider1 にリンクされ、編集用のクライアント側データを提供します。4. DataSetProvider1 は、単一の DB テーブルからレコードを選択する SQLDataSet1 にリンクされています。5. SQLDataSet1 は SQLConnection にリンクされ、MySQL データベースへの接続を提供します。
アクション: 1. ユーザーがレコードを挿入します。ClientDataSet1.InsertRecord を使用します。2. ユーザーがレコードを削除します。私は ClientDataSet.Delete を使用します。3. ユーザーがデータを送信します。私は ClientDataSet1.ApplyUpdates(-1) を使用します。
これはすべて、データの処理とデータの投稿に関してうまく機能します (レコードを削除するための DataSetProvider1BeforeUpdateRecord の小さなハックが含まれています)。
今、私の問題: ユーザーが最初にフォームをロードすると、DBGrid1 はすべての元のレコードを表示し、削除されたすべてのレコードを削除します。しかし、ユーザーが ClientDataSet1 に新しいレコードを挿入すると、空白のレコードが DBGrid1 に表示されます。ClientDataSet1.ApplyUpdates の場合のように、実際のデータが失われたり NULLS として設定されたりすることはありません。このレコードは DB に正しく書き込まれます。
TClientDataSet には、元のデータ用の data プロパティと編集済みデータ用の Delta プロパティがあることを知っています。一度に 1 つの DBGrid に表示され、ユーザーがデータを編集できるようにすることで、データを含むこれら 2 つのプロパティを使用できますか?
私は 30 以上のリソースとデモ アプリを見てきましたが、すべてこの問題を回避しています。これはできますか?