我正在使用这个 sql 命令来获取列名:
select COLUMN_NAME from
INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'MyTableName'
但我不知道如何使用执行的 SQL 命令结果!
例如,这种方式无法将列名提取为字符串值,并且我收到此错误 = 不支持操作:
for i := 1 to Qry1.RecordCount do
begin
end;
您可以执行此操作的另一种方法是查询表本身以获取空数据集,然后遍历该数据集中的字段。
像这样的查询将返回其中没有记录的表结构:
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;
像这样的东西适用于 TADOQuery(不确定它是否与 dbExpress 不同):
Qry1.Open;
while not Qry1.Eof do begin
// do whatever with Qry1.Fields[0].AsString here
Qry1.Next;
end;
Qry1.Close;
据我了解,您无法检索结果。
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)
同意 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;