是否可以将adoquery结果用作字符串?

时间:2009-11-02 14:58:46

标签: database delphi

我使用ado组件连接到ms sql数据库。我知道如何在db grid中显示查询结果。但我想将结果存储为数组中的字符串,例如。 这是可能的还是有另一种方法来使用查询结果?

4 个答案:

答案 0 :(得分: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 :(得分: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;

答案 2 :(得分:1)

您可以使用ADORecordSet.GetRows将数据导入数组。这是ASP中加速页面加载的常见做法 - 而不是通过记录集循环,将数据放入数组,关闭记录集,然后循环数组以显示内容。我认为也可以在Delphi中应用,并取得成功。

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

  ...

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

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

  someText := TableContents[1,1];

  ...

end;

希望它有所帮助。

答案 3 :(得分:0)

我认为您必须自己编写代码来解析记录集并将值放入数组中。