首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi -加载FDMEMTable

Delphi -加载FDMEMTable
EN

Stack Overflow用户
提问于 2016-05-04 02:41:53
回答 2查看 1.9K关注 0票数 0

对不起,对于一个新的Delphi‘’er来说并不简单

在下面的代码中,如何将结果移动到fdmemtable?

·我是否必须循环添加每条记录,或者是否可以使用函数/过程将memtable设置为等于记录集?

·或者,是否可以将结果直接发送到fdmemtable?

我在这段代码中遇到的问题是,cmd.execute返回了一个记录集,但这不是memTable要查找的类型。需要协助。

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

发布于 2016-05-04 05:47:42

如果改用TADODataSet,这会更简单

代码语言:javascript
复制
  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;
票数 0
EN

Stack Overflow用户

发布于 2016-05-04 21:48:26

您可以使用CloneCursor

代码语言:javascript
复制
procedure CloneCursor(ASource: TFDDataSet; AReset: Boolean = False;  AKeepSettings: Boolean = False); 

您从MemTable发出调用并将其传递给查询。这将在两个对象之间共享数据,而无需逐行/逐字段地复制数据。

代码语言:javascript
复制
MemTable.CloneCursor(QueryDataSet, false, false);

您没有说明为什么要将数据放在MemTable而不是TFDQuery对象中。有时这很有用,但如果您的唯一原因是要返回查询结果,则只需使用返回的TFDQuery对象即可。这两个对象在使用上几乎相同。TFDQuery对象可以保持与数据库的连接,以便可以将您所做的更改推回到数据库中。

根据您对页面大小的评论,您还应该查看FetchOptions、CursorKind和Mode属性。这有助于控制一次返回到QueryObject的数据量。可以在connection或FireDAC query对象上设置这些属性。我通常使用静态游标来处理所有返回的结果。如果您的查询可以返回数百万行,这不是一个好的选择,但我通常只处理几千行。ADO具有类似的属性。

代码语言:javascript
复制
Query.FetchOptions.CursorKind := ckStatic;
Query.FetchOptions.Mode := fmAll;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37011967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档