Sql 使用Delphi(Dbexpress)获取列名
我正在使用此sql命令获取列名: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是否不同): 据我
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;