TFDMemTable質問

Q:TClientDataSetのを使用すると、削除、変更レコードを追加し、TClientDataSet.Deltaを処理することができます。それはTFDMemTableで可能ですか?

A: TFDMemTableは、同様の機能を持っていますが、それは次のキャッシュアップデートのモデルを。CachedUpdatesプロパティの値がある場合は、MemTableは、ログのアップデートで変更を記録します。

データベースへの更新を投稿するには、ApplyUpdatesメソッドを使用する必要があります。変更ログをマージするには、CommitUpdatesを呼び出す必要があります。

あなたはFireDAC \サンプル\コンプ層にFireDACヘルプファイルと例では、これらの説明や他の方法を見つけることができます\ TFDMemTableフォルダを。

Q:私は、クライアントデータセットでCloneCursorたくさん使います。どのように私はそれを行うことができTFDQuery

A:次のコードを使用:

FDMemTable1.CloneCursor(FDQuery1、偽、偽);

Q:どのように私はFDMemTableを作成して移入することができますか?

A: 1)、メモリ内のデータセットを作成します。

始まるんFDMemTable1.FieldDefs 
  AddFieldDefでは始まるか
    名前を:=「F1を」; 
    データ型:= ftInteger。
  終わり; 
  AddFieldDefで始まるん
    名:= 'F2を'; 
    データ型:= ftString。
    サイズ:= 50; 
  終わり; 
終わり; 
 
FDMemTable1で始まるやる
  開きます。
  追加; 
  フィールド[0] .AsInteger:= ...; 
  フィールド[1] .AsString:= ...; 
  役職; 
終わり;

それまで2)追加データ、閲覧/編集それ。

Q:(構造を含む)別のデータセットからTFDMemTableをロードするための最速の方法は何ですか?

A: TFDMemTableには、TDataSetからの構造とデータをコピーする最も簡単な方法は、使用することですCopyDataSetの方法を:

FDMemTable1.CopyDataSet(DATASET1、[coStructure、coRestart、coAppend])。

Q:どのように私はFDMemTableにFDMemTableおよび編集それらにFDQueryからすべてのレコードをコピーすることができますか?

A:あなたがそのような何かを行うことができます。

// UniDirectionaはありません場合はfalseでなければなりません
FDQuery1.FetchOptions.Undirectional:= falseは、
 
FDQuery1.Open; 
FDQuery1.FetchAll; 
FDMemTable1.Data:= FDQuery1.Data。
FDMemTable1.First; 
 
FDMemTable1.Eof開始しないながら
  FDMemTable1.Editを。
  ....... 
  FDMemTable1.Post; 
  FDMemTable1.Next; 
終わり;

Q:私はタイプftGUIDの持続フィールドを追加することはできません。私は、フィールドのサイズに関するエラーを取得していますが、フィールドのサイズ制御が無効になっています。なにが問題ですか?

これはDB.pasユニットの既知の問題です:http://qc.embarcadero.com/wc/qcmain.aspx?d=8008この問題を回避するには、実行時にGUIDフィールドを作成することです。

Q:メモリテーブルを使用するのが有利であるときに、一般的なルールがありますか?

A:あなたが唯一のFireDACを使用している場合は、FDMemTableあなたは、メモリ・データのみを持っている場合にのみ使用する必要があります。そしてまた、いくつかの特殊なケースでは、たとえば、あなたがFDMemTableにCSVファイルを読み込むことができ、その後、使用LocalSQLをこのCSVデータを照会します。

他のタスクのために、あなただけ使用することができますTFDQuery / TFDStoredProcを、彼らはTFDMemTableとほぼ同じクライアント側の機能を持っているので、。

Q:どのように私は大規模な版(挿入、編集、削除)にTFDMemTableのパフォーマンスを最適化することができますか?

A:以下のプロパティを設定しLogChangesFetchOptionsをResourceOptions、およびUpdateOptionsを

  FDMemTable1.LogChanges:= falseは、
  FDMemTable1.FetchOptions.RecsMax:= 300000; //サンプル値
  FDMemTable1.ResourceOptions.SilentMode:=真; 
  FDMemTable1.UpdateOptions.LockMode:= lmNone。
  FDMemTable1.UpdateOptions.LockPoint:= lpDeferred。
  FDMemTable1.UpdateOptions.FetchGeneratorsPoint:= gpImmediate。

その後に大規模な版の操作を囲むBeginBatch / EndBatchメソッド呼び出し:

  FDMemTable1.BeginBatch; 
  してみてください
    私のために:1000 = 1が始まるん
      FDMemTable1.Appendを。
      // ... 
      FDMemTable1.Post。
    終わり; 
  最後に
    FDMemTable1.EndBatch; 
  終わり;
公開された30元の記事 ウォンの賞賛2 ビュー50000 +

おすすめ

転載: blog.csdn.net/khzide/article/details/83592677