1

計算フィールドを含む Delphi TTable オブジェクトを定義し、フォームのグリッドで使用しています。計算フィールドを含む TTable オブジェクトのコピーを作成し、そのコピーを開き、コピーを使用してデータを変更し、コピーを閉じてから、元のコピーを更新してグリッド ビューを更新したいと考えています。そのような方法で使用される TTable オブジェクトのコピーを取得する簡単な方法はありますか?

理想的な答えは、問題を可能な限り一般的に解決するもの、つまり、次のようなものを取得する方法です。

newTable:=getACopyOf(existingTable);
4

4 に答える 4

2

TBatchMoveコンポーネントを使用して、テーブルとその構造をコピーできます。

Mode プロパティを設定して、目的の操作を指定します。Source プロパティと Destination プロパティは、レコードが追加、削除、またはコピーされるデータセットを示します。オンライン ヘルプには、追加の詳細があります。

(TClientDataSet アプローチを調査する必要があると思いますが、確かによりスケーラブルで高速です)。

于 2008-09-23T01:39:29.887 に答える
1

いくつか提案させてください。

プログラムで変更を加えたいとしましょう。次に、TTableのDisableControlsメソッドとEnableControlsメソッドを使用して、その時間中の画面の更新を禁止できます。

同じデータを持つ2つの画面が必要な場合(オンライン変更中にデータを比較するためにfe)、実際には同じ画面を2回作成し、TTableオブジェクトを画面自体に配置することができます。まったく同じ構成になります(ただし、最初の画面で以前に行った変更は引き継がれませんが、データベースからデータが読み取られます)。一方の画面で行われた変更は、もう一方の画面では自動的に更新されません。

別の方法:TClientDataSetにフィードするデータセット(ソース)としてTTableでTDataSetProviderを使用してみてください。ApplyUpdatesは、変更をTTableにフィードバックします。計算フィールドは読み取り専用であるため、影響を受けません。(テストされていませんが、動作するはずです)

于 2008-09-22T13:45:12.847 に答える
0

Ctrlフォームでテーブルを選択し、 -を使用してコピーしC、任意のテキスト エディターに貼り付けることができるはずです。オブジェクトのプロパティのテキスト バージョンが取得され、必要に応じて編集できます。完了したら、すべてのテキストをもう一度選択すると、クリップボードにコピーしてフォームに貼り付けることができます。

于 2008-09-22T13:18:10.353 に答える
0

2 番目のアプローチ (TClientDataset) は、おそらくこのシナリオで使用する最良の方法だと思います。別の方法として、メモリ テーブル ( kbmMemTableなど) を使用することもできます。どちらの方法でも、元のテーブルを複製し、変更を行った後、データセットのメモリ バージョンをループして元のテーブルを更新します。

于 2008-09-22T14:15:56.253 に答える