首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Delphi获取列名(Dbexpress)

使用Delphi获取列名(Dbexpress)
EN

Stack Overflow用户
提问于 2010-07-22 17:01:43
回答 4查看 17.1K关注 0票数 0

我使用这个sql命令来获取列名:

代码语言:javascript
复制
select COLUMN_NAME from 
INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'MyTableName'

但是我不知道如何使用执行的SQL命令结果!

例如,这种方法不能将列名提取为字符串值,并且我得到了这个错误=不支持操作:

代码语言:javascript
复制
  for i := 1 to Qry1.RecordCount do
  begin

  end;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-22 17:20:05

下面这样的代码将适用于TADOQuery (不确定对于dbExpress是否有所不同):

代码语言:javascript
复制
Qry1.Open;
while not Qry1.Eof do begin
    // do whatever with Qry1.Fields[0].AsString here
    Qry1.Next;
end;
Qry1.Close;
票数 5
EN

Stack Overflow用户

发布于 2010-07-22 21:13:22

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

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

代码语言:javascript
复制
Qry1.SQL.Text := 'SELECT * FROM MyTableName WHERE 1<>1';
Qry1.Open;

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

代码语言:javascript
复制
for I := 0 to Qry1.FieldCount-1 do
begin
  X := Qry1.Fields[I].FieldName;
  // and do whatever you want with X
end;
票数 6
EN

Stack Overflow用户

发布于 2010-07-22 17:20:43

据我所知,你无法取回这些报告。

代码语言:javascript
复制
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)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3307251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档