2009-07-11 5 views
3

昨日からエンバカデロのNNTPサーバが応答を停止していたので、私はここで質問することができたと思いました。私は非DB対応のグリッドを扱っています。データセットをループしてカラム数、行および各行の各フィールドの値を示します。Delphi:データセットから列数+名前を読み取っていますか?

各行のすべてのフィールドの値を読み取ることがわかりましたが、列関連情報を抽出する方法はわかりません。誰かが便利なコードをいくつか持っていますか?

procedure TForm1.FormCreate(Sender: TObject); 
var 
    index : Integer; 
begin 
    With ASQLite3DB1 do begin 
     DefaultDir := ExtractFileDir(Application.ExeName); 
     Database := 'test.sqlite'; 
     CharacterEncoding := 'STANDARD'; 
     Open; 
    end; 

    With ASQLite3Query1 do begin 
    ASQLite3Query1.Connection := ASQLite3DB1; 

    SQL.Text := 'CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, label VARCHAR)'; 
    ExecSQL; 

    SQL.Text := 'INSERT INTO mytable (label) VALUES ("dummy label")'; 
    ExecSQL; 

    SQL.Text := 'SELECT id AS Identification, label AS Label FROM mytable'; 
    Open; 

    //How to get column numbers + names to initialized grid object? 
    for index := 0 to ASQLite3Query1. - 1 do begin 

    end; 

    for index := 0 to FieldCount - 1 do begin 
     ShowMessage(Fields[index].AsString); 
    end; 
    end; 
end; 

ありがとうございます。次のようにフィールドとその名前の

答えて

2

番号を取得することができます。

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    with Query1 do 
    begin 
    ShowMessage(IntToStr(FieldCount)); 
    ShowMessage(Fields[0].FieldName); 
    end; 
end; 

あなたはフィールドに関するより詳細な情報についてはTFieldDefをチェックアウトすることができます。

dataset.FieldDefs[0]は、DataTypeおよびSizeのような特性を有する。

1

あなたが探しているものがフィールド名のリストであれば、TStringListを作成してTDataset.Fields.GetFieldNamesプロシージャに渡してみてください。

あなたはフィールドの詳細情報が必要な場合は、TFieldsオブジェクト(ASQLite3Query1.Fields)はデフォルトプロパティとCountプロパティを持っているので、あなたが使用することができますどちらも、配列、および列挙子のようにそれを使用することができます各TFieldオブジェクトをループしてそのメタデータを取得します。

+0

メイソン、私はコードの書式を改善することで質問を編集しましたが、私は "便利"を変更しませんでしたが、あなたの名前は「書いたコードフォーマットのリビジョン」で見られました。同時実行性の問題があります:-) –

+0

あなたは何を意味するのかよく分かりません。私は、コードの書式を修正し、初めて投稿内の他のものに触れなかった。後で、私が気づいた後?私もそれを修正しましたが、それはその後も長く続きました。 –

+0

私は、私の名前でマークされたリビジョンの変更を行っていない、コードの書式設定([コード]タグの削除)に関して同じコードを行ったが、あなたの名前がマークされていることを見たので、 SOの問題。 –

関連する問題