Delphi:从数据集中读取列数+名称?

时间:2009-07-11 14:52:25

标签: delphi dataset

由于Embarcadero的NNTP服务器自昨天起停止响应,我想我可以在这里问:我使用非数据库感知网格,我需要遍历数据集以提取列数,名称,数量行和每行中每个字段的值。

我知道要读取每行中所有字段的值,但我不知道如何提取与列相关的信息。有人有一些方便的代码吗?

procedure TForm1.FormCreate(Sender: TObject);
var
  index : Integer;
begin
  With ASQLite3DB1 do begin
      DefaultDir := ExtractFileDir(Application.ExeName);
      Database := 'test.sqlite';
      CharacterEncoding := 'STANDARD';
      Open;
  end;

  With ASQLite3Query1 do begin
    ASQLite3Query1.Connection := ASQLite3DB1;

    SQL.Text := 'CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, label VARCHAR)';
    ExecSQL;

    SQL.Text := 'INSERT INTO mytable (label) VALUES ("dummy label")';
    ExecSQL;

    SQL.Text := 'SELECT id AS Identification, label AS Label FROM mytable';
    Open;

    //How to get column numbers + names to initialized grid object?
    for index := 0 to ASQLite3Query1. - 1 do begin

    end;

    for index := 0 to FieldCount - 1 do begin
      ShowMessage(Fields[index].AsString);
    end;
  end;
end;

谢谢。

2 个答案:

答案 0 :(得分:3)

可以按如下方式获取字段数及其名称:

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Query1 do
  begin
    ShowMessage(IntToStr(FieldCount));
    ShowMessage(Fields[0].FieldName);
  end;
end;

您可以结帐TFieldDef以获取有关该字段的更多详细信息。

dataset.FieldDefs[0]包含DataTypeSize等属性。

答案 1 :(得分:1)

如果您要查找的是字段名称列表,请尝试创建TStringList并将其传递给TDataset.Fields.GetFieldNames过程。

如果您想了解有关字段的更多信息,TFields对象(ASQLite3Query1.Fields)具有默认属性和Count属性,因此您可以像使用数组和枚举器一样使用它可用于循环遍历每个TField对象并检索其元数据。