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:以下のプロパティを設定しLogChanges、FetchOptionsを、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; 終わり;