![]() |
Datenbank: Advantage Local Server • Version: 7 • Zugriff über: ADO
TField.Assign (TField) -> Fehler
Hallo, liebe Community,
ich hoffe, ich drücke mich mit meinem Anliegen verständlich aus. Also ich habe ein dynamisches Array vom Typ TField, welches ich mit Ergebnissen aus einer Query befüllen will, um diese später zu verarbeiten. Das ist die SQL-Abfrage: Zitat:
Delphi-Quellcode:
Die Funktion AddListNode sieht wie folgt aus:
Nach der Abfrage:
if (RecordCount > 0) then begin First; while not EOF do begin AddListNode (Fields); Next; end; end;
Delphi-Quellcode:
Allerdings erhalte ich NACH der Zeile "d^[a].Assign (Fields[a]);" eine Exception:
...
type PClientListData = ^TClientListData; TClientListData = Array of TField; ... procedure TClientListForm.AddListNode (Fields: TFields); var a: Integer; n: PVirtualNode; d: PClientListData; begin n := ClientList.AddChild (nil); d := ClientList.GetNodeData (n); SetLength (d^, Fields.Count - 1); for a := 0 to Fields.Count - 1 do begin d^[a] := TField.Create (Self); d^[a].Assign (Fields[a]); end; end; Zitat:
Weiß jemand warum? Komme nicht dahinter. |
Re: TField.Assign (TField) -> Fehler
Hallo Mario,
Zitat:
Grüße vom marabu |
Re: TField.Assign (TField) -> Fehler
Hm, in der Datenbank sind aber wenigstens 21 Spalten, die durch die Query zurückgeliefert werden. Manche davon sind Strings, manche Integer, manche Float und auch ein BLOB. Wie krieg ich das denn unter einen Hut, wenn ich für jeden Datentyp eine eigene "Feldklasse" erzeugen soll?
|
Re: TField.Assign (TField) -> Fehler
Mario, ich bin mir sicher, dass du mit einem Array of Variant besser beraten bist - du willst doch die Werte zwischenspeichern und nichts anderes - oder? TField und seine Nachkommen sind eigentlich für etwas ganz anderes gedacht...
Delphi-Quellcode:
Grüße vom marabu
type
TVariantDynArray = array of Variant; function GetFieldValues(ds: TDataSet): TVariantDynArray; var i: integer; begin SetLength(Result, ds.Fields.Count); for i := Low(Result) to High(Result) do Result[i] := ds.Fields[i].Value; end; |
Re: TField.Assign (TField) -> Fehler
Hallo, marabu,
vielen Dank für die konstruktiven Hilfestellungen. Mit dem Variant-Array funktioniert das ganz gut:
Delphi-Quellcode:
Auch die Darstellung im VST funktioniert damit:
function TClientListForm.GetFieldValues (ds: TDataSet): TVariantDynArray;
var i: integer; begin SetLength (Result, ds.Fields.Count); for i := Low (Result) to High (Result) do Result[i] := ds.Fields[i].Value; end; procedure TClientListForm.AddListNode (Fields: TFields); var a, b: Integer; n: PVirtualNode; d: PVariantDynArray; begin n := ClientList.AddChild (nil); d := ClientList.GetNodeData (n); d^ := GetFieldValues (Fields.DataSet); end;
Delphi-Quellcode:
Werde da noch bisschen rumbasteln und erweitern. Vielen Dank nochmals! :)
procedure TClientListForm.ClientListGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var d: PVariantDynArray; begin d := Sender.GetNodeData (Node); CellText := String (d^[Column]); // Testweise end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz