Sql 使用Delphi(Dbexpress)获取列名

Sql 使用Delphi(Dbexpress)获取列名,sql,delphi,dbexpress,Sql,Delphi,Dbexpress,我正在使用此sql命令获取列名: select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'MyTableName' 但我不知道如何使用执行的SQL命令结果 例如,这种方法无法将列名提取为字符串值,我得到了以下错误=操作不受支持: for i := 1 to Qry1.RecordCount do begin end; 类似这样的内容可能会有点问题(不确定dbExpress是否不同): 据我

我正在使用此sql命令获取列名:

select COLUMN_NAME from 
INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'MyTableName'
但我不知道如何使用执行的SQL命令结果

例如,这种方法无法将列名提取为字符串值,我得到了以下错误=操作不受支持:

  for i := 1 to Qry1.RecordCount do
  begin

  end;

类似这样的内容可能会有点问题(不确定dbExpress是否不同):


据我所知,你无法收回这些结果

Qry1.First;

while not Qry1.Eof do
begin
    X := Qry1.FieldByName('column_name').AsString;

    Qry1.Next;
end;
这是一段代码,一直对我有用

或者您可以阅读此链接,该链接解释了调用.RecordCount()时引发异常的原因


总之,这表明您的查询是区分大小写的,您可能应该检查表名(MyTableName)

另一种方法是查询表本身以获得一个空数据集,然后在该数据集中的字段之间循环

这样的查询将返回没有记录的表结构:

Qry1.SQL.Text := 'SELECT * FROM MyTableName WHERE 1<>1';
Qry1.Open;

同意Rob McDonell的说法,为了列出字段的列名,我将使用它 在我的代码中,我写了这样的东西

Procedure blablabla;
var i:integer;
begin
..... {some code here}

SQLQuery1.Open;
  for i := 0 to SQLQuery1.FieldCount-1 do
    begin;
    Memo1.Lines.Append(SQLQuery1.Fields[i].DisplayName);
    end;
  SQLQuery1.Close;


.... {some code here}

end;

X将始终具有第一行的值。不,下一次调用不,X将有列名。这就是最初的问题所要求的。
for I := 0 to Qry1.FieldCount-1 do
begin
  X := Qry1.Fields[I].FieldName;
  // and do whatever you want with X
end;
Procedure blablabla;
var i:integer;
begin
..... {some code here}

SQLQuery1.Open;
  for i := 0 to SQLQuery1.FieldCount-1 do
    begin;
    Memo1.Lines.Append(SQLQuery1.Fields[i].DisplayName);
    end;
  SQLQuery1.Close;


.... {some code here}

end;