0

申し訳ありませんが、新しい Delphi'er では簡単ではありません

以下のコードで、結果を fdmemtable に移動するにはどうすればよいですか?

• 各レコードをループ追加する必要がありますか、それとも関数/手順を使用して memtable をレコードセットと同じに設定できますか?

• または、結果を直接 fdmemtable に送信できますか?

このコードに関する私の問題は、cmd.execute がレコードセットを返していることですが、それは memTable が探しているタイプではありません。助けが必要です。

procedure TForm1.btnADReadClick(Sender: TObject);
var // SQLad,DOMAINad,USERad:string;
    t:_recordset;
begin
  DOMAINad:= QuotedStr('LDAP://')+DOMAINad;
  //listbox1.Clear;
  try
    datamodule1.connADOldap.ConnectionString := 'Provider=ADsDSOObject';
    cmd.Connection:=datamodule1.connADOldap;
    datamodule1.connADOldap.Connected:=true;
    SQLad:='select cn,distinguishedname from '+DOMAINad+' where objectClass='
    //+Quotedstr('*');
    +Quotedstr('user');
    //
    cmd.CommandText:=SQLad;
    cmd.Properties.Item['Page Size'].Value:=40;
    //t:=cmd.Execute;
    datamodule1.FDMemTableADResults:=cmd.Execute;
  except
   on exception do showmessage('Error');
  end;

end;
4

2 に答える 2

0

代わりに TADODataSet を使用すると、これはより簡単になります。

  ADODataSet1.ConnectionString := 'Provider=ADsDSOObject';
  ADODataSet1.CommandText := 'select cn, distinguishedname from ''LDAP://HOME'' where objectClass=''*''';
  ADODataSet1.Open;
  ADODataSet1.Recordset.PageSize :=40; // << Edit
  FDMemTable1.CopyDataSet(ADODataSet1, [coStructure, coRestart, coAppend]);
  FDMemTable1.Open;
于 2016-05-03T21:47:41.913 に答える
0

CloneCursorを使用できます

procedure CloneCursor(ASource: TFDDataSet; AReset: Boolean = False;  AKeepSettings: Boolean = False); 

MemTable から呼び出しを行い、クエリを渡します。これにより、行ごと/フィールドごとにデータをコピーする必要なく、2 つのオブジェクト間でデータが共有されます。

MemTable.CloneCursor(QueryDataSet, false, false);

MemTable と TFDQuery オブジェクトのデータが必要な理由について、あなたは言いませんでした。これが役立つ場合もありますが、クエリの結果を取得することが唯一の理由である場合は、単に返された TFDQuery オブジェクトを使用してください。両方のオブジェクトの用途はほとんど同じです。TFDQuery オブジェクトはデータベースへの接続を維持できるため、加えた変更をデータベースにプッシュすることができます。

Page size に関するコメントに基づいて、FetchOptions CursorKind および Mode プロパティも確認する必要があります。これらは、一度に QueryObject に返されるデータの量を制御するのに役立ちます。これらは、接続または FireDAC クエリ オブジェクトのいずれかで設定できます。通常、すべての結果が返される静的カーソルを使用します。クエリが何百万行も返す可能性がある場合、これは適切な選択ではありませんが、通常は数千行しか処理していません。ADO にも同様のプロパティがあります。

Query.FetchOptions.CursorKind := ckStatic;
Query.FetchOptions.Mode := fmAll;
于 2016-05-04T13:48:25.523 に答える