使用Delphi(Dbexpress)获取列名

时间:2010-07-22 09:01:43

标签: 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;

4 个答案:

答案 0 :(得分:4)

这样的东西适用于TADOQuery(不确定它是否与dbExpress不同):

Qry1.Open;
while not Qry1.Eof do begin
    // do whatever with Qry1.Fields[0].AsString here
    Qry1.Next;
end;
Qry1.Close;

答案 1 :(得分:4)

另一种方法是查询表本身以获取空数据集,然后遍历该数据集中的字段。

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

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

这样的循环将遍历每个字段

for I := 0 to Qry1.FieldCount-1 do
begin
  X := Qry1.Fields[I].FieldName;
  // and do whatever you want with X
end;

答案 2 :(得分:2)

根据我的理解,你无法撤回报复。

Qry1.First;

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

    Qry1.Next;
end;

这是一段一直对我有用的代码

或者您可以阅读此链接,该链接解释了调用.RecordCount(http://edn.embarcadero.com/article/28494

时抛出异常的原因

总结一下,它表明您的查询区分大小写,您应该检查表名(MyTableName)

答案 3 :(得分:1)

同意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;