【问题标题】:Get Column names with Delphi (Dbexpress)使用 Delphi (Dbexpress) 获取列名
【发布时间】:2010-07-22 09:01:43
【问题描述】:

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

select COLUMN_NAME from 
INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'MyTableName'

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

例如,这种方式无法将列名提取为字符串值,我收到此错误 = 不支持操作:

  for i := 1 to Qry1.RecordCount do
  begin

  end;

【问题讨论】:

    标签: sql delphi dbexpress


    【解决方案1】:

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

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

    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;
    

    【讨论】:

    • X 将始终具有第一行的值。没有。下一次调用那里
    • 不,X 将具有列名。这就是最初的问题所要求的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      据我了解,您无法检索结果。

      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)

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-27
          • 2011-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多