簡體   English   中英

Delphi-加載FDMEMTable

[英]Delphi - Loading FDMEMTable

抱歉,對於新的Delphi'er而言並不簡單

在下面的代碼中,如何將結果移至fdmemtable?

•我是否必須循環添加每條記錄,還是可以使用函數/過程將內存表設置為等於記錄集?

•或者,結果可以直接發送到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;

如果使用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;

您可以使用CloneCursor

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

您從MemTable進行調用,並將查詢傳遞給它。 這將在兩個對象之間共享數據,而無需逐行/逐字段復制數據。

MemTable.CloneCursor(QueryDataSet, false, false);

您沒有說為什么要使用MemTable和TFDQuery對象中的數據。 有時候這很有用,但是如果您唯一的原因是要取回查詢結果,則只需使用返回的TFDQuery對象。 這兩個對象的用法幾乎相同。 TFDQuery對象可以保持與數據庫的連接,以便您所做的更改可以被推回到數據庫中。

根據您對頁面大小的評論,您還應該查看FetchOptions CursorKind和Mode屬性。 這些幫助控制一次將多少數據返回到QueryObject中。 這些可以在連接或FireDAC查詢對象上設置。 我通常使用靜態游標,並返回所有結果。 如果查詢可以返回數百萬行,這不是一個好選擇,但是我通常只處理幾千行。 ADO具有類似的屬性。

Query.FetchOptions.CursorKind := ckStatic;
Query.FetchOptions.Mode := fmAll;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM