0

このSQLコマンドを使用して列名を取得しています:

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

しかし、実行されたSQLコマンドの結果をどのように使用できるかわかりません!

たとえば、この方法では列名を文字列値として抽出できず、次のエラーが発生しました = 操作はサポートされていません:

  for i := 1 to Qry1.RecordCount do
  begin

  end;
4

4 に答える 4

6

これを行う別の方法は、テーブル自体にクエリを実行して空のデータセットを取得し、そのデータセットのフィールドをループすることです。

このようなクエリは、レコードを含まないテーブル構造を返します。

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;
于 2010-07-22T13:13:22.003 に答える
5

このようなものは TADOQuery で機能します (dbExpress で異なるかどうかはわかりません):

Qry1.Open;
while not Qry1.Eof do begin
    // do whatever with Qry1.Fields[0].AsString here
    Qry1.Next;
end;
Qry1.Close;
于 2010-07-22T09:20:04.717 に答える
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) を確認する必要があります。

于 2010-07-22T09:20:43.000 に答える