2009-11-02 58 views

回答

0

我想你將不得不親自編寫代碼來解析記錄集並將值放入數組中。

+0

你有一個如何解析記錄集的例子嗎? – Makaku00 2009-11-02 17:10:47

1

有這樣做沒有直接的方法,但是我用AdoQuery.Recordset.GetString獲得創紀錄的字符串,這裏是我用來導出數據到CSV文件的示例。

procedure TForm2.btnExportClick(Sender: TObject); 
var 
    Sl :TStringList; 
    S :string; 
begin 
    if SaveDialog1.Execute then 
    begin 
    try 
     Sl := TStringList.Create; 
     qryExport.First; 
     if chkFields.Checked then 
     Sl.Add(GetFields(qryExport)); 
     Sl.Add(qryExport.Recordset.GetString(2,-1,';' 

      ,#13#10,'(Null)')); 
     Sl.SaveToFile(SaveDialog1.FileName); 
    finally 
     Sl.Free; 
    end; 
    end; 
end; 

function TForm2.GetFields(qry: TADOQuery): string; 
var 
    I : Integer; 
    S : string; 
begin 
    S := ''; 
    for I := 0 to qry.Fields.Count - 1 do 
    S := S + qry.Fields[I].FieldName + ';'; 
    Result := S; 
end 
1

您可以通過代碼訪問任何結果字段。該數據集包含了所有的記錄,但是你必須通過每一個代碼瀏覽:

// navigate to the first record in the set 
ADODataset1.first; 
// while the dataset is NOT empty ... 
while not ADODataset1.eof do 
    begin 
    // process a field 
    sValue := ADODataset1.FieldByName('fieldname').AsString; 
    DoSomething(sValue); 
    // move the cursor to the next record 
    ADODataset1.Next; 
    end; 
+1

注意調用ADODataset1.DisableControls可能會有所幫助;之前和ADODataset1.EnableControls; while循環之後可以使它快很多。 – jasonpenny 2009-11-02 18:07:13

1

您可以使用ADORecordSet.GetRows讓你的數據到一個數組。在ASP中這是一種常見的做法,可以加快頁面加載速度 - 而不是通過循環記錄集,將數據存入數組,關閉記錄集,並循環顯示數組內容。我想也可以在德爾福中應用,並取得成功。

 
var 
    ... 
    TableContents : OleVariant; 
    ... 
begin 

    ... 

    ADORecordSet.Open('select * FROM MyTable', ADOConnection, adOpenForwardOnly, 
    adLockReadOnly, adCmdText); 

    TableContents := ADORecordSet.GetRows(adGetRowsRest,EmptyParam,EmptyParam); 

    someText := TableContents[1,1]; 

    ... 

end; 

希望它有幫助。

相關問題