自从Embarcadero的NNTP服务器从昨天开始停止响应以来,我想我可以在这里问:我使用的是非DB感知网格,因此我需要遍历数据集以提取列数,列名,行数和每行中每个字段的值。

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

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;


谢谢。

最佳答案

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

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


您可以签出TFieldDef以获得有关该字段的更多详细信息。

dataset.FieldDefs[0]具有类似DataTypeSize的属性。

09-17 20:29