2009-07-11 7 views
3

Da der NNTP-Server von Embarcadero seit gestern nicht mehr reagiert, dachte ich, ich könnte hier fragen: Ich arbeite mit einem nicht DB-fähigen Raster und muss einen Dataset durchlaufen, um die Anzahl der Spalten, ihren Namen und die Anzahl der Spalten zu extrahieren Zeilen und der Wert jedes Feldes in jeder Zeile.Delphi: Anzahl der Spalten + Namen aus Datensatz lesen?

Ich weiß, die Werte für alle Felder in jeder Zeile zu lesen, aber ich weiß nicht, wie Spalteninformationen zu extrahieren. Hat jemand einen Code zur Hand?

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; 

Vielen Dank.

Antwort

2

Anzahl der Felder und ihre Namen könnten erworben werden, wie folgt:

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

Sie TFieldDef für mehr Detailinfo über das Feld Prüfung können.

dataset.FieldDefs[0] hat Eigenschaften wie DataType und Size.

1

Wenn Sie nach einer Liste mit Feldnamen suchen, erstellen Sie eine TStringList, und übergeben Sie sie an die TDataset.Fields.GetFieldNames-Prozedur.

Wenn Sie mehr Informationen über Felder wollen, das TFields Objekt (ASQLite3Query1.Fields) eine Standard Eigenschaft und eine Eigenschaft Count, so können Sie es wie ein Array verwenden, und ein enumerator können beide verwendet werden um jedes TField-Objekt zu durchlaufen und seine Metadaten abzurufen.

+0

Mason, ich habe die Frage bearbeitet, indem ich die Codeformatierung verbessert habe, änderte ich nicht die "handy ?.", aber ich sah Ihren Namen mit Code-Formatierung Revision, die ich mit "handy?", Scheint es ist Nebenläufigkeitsproblem mit SO :-) –

+0

Nicht sicher, was du meinst. Ich habe die Formatierung des Codes korrigiert und beim ersten Mal nichts anderes in der Post berührt. Später, nachdem ich das? Ich habe das auch repariert, aber das war lange danach. –

+0

Ich meine, ich habe die Änderungen in Revision nicht mit meinem Namen markiert, ich habe den gleichen Code bezüglich der Codeformatierung (entfernte [code] -Tags), aber ich sah es mit deinem Namen markiert, also dachte ich, es wäre Nebenläufigkeit Problem mit SO. –

Verwandte Themen