2009-11-02 3 views
1

메신저 구성 요소를 사용하여 ms SQL 데이터베이스에 연결하는 중입니다. DB 그리드 쿼리의 결과를 표시하는 방법을 알고. 하지만 결과를 배열에 문자열로 저장하고 싶습니다. 이것이 가능합니까 아니면 쿼리 결과를 사용하는 다른 방법이 있습니까?문자열로 adoquery 결과를 사용할 수 있습니까?

답변

0

필자는 레코드 세트를 구문 분석하고 값을 배열에 넣으려면 코드를 직접 작성해야한다고 생각합니다.

+0

레코드 세트를 구문 분석하는 방법에 대한 예제가 있습니까? – Makaku00

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

코드로 결과 필드에 액세스 할 수 있습니다. 데이터 집합의 모든 레코드를 포함,하지만 당신은 코드의 각 하나를 통해 이동해야합니다 : 당신은 배열로 데이터를 얻을 수 ADORecordSet.GetRows을 사용할 수 있습니다

// 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;를 호출하는 것에주의하십시오. before 및 ADODataset1.EnableControls; while 루프를 사용하면 훨씬 빠르게 처리 할 수 ​​있습니다. – jasonpenny

1

. 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; 

희망이 있습니다.

관련 문제