![]() |
AW: Problem mit dynamischem Array of Record
Hallo,
danke für eure Hinweise. Leider stecke ich an der Idee mit der TList:
Delphi-Quellcode:
type TDocxline = record
level : integer; article_id : integer; article_number : string; article_name : string; end; type TDocxDocument = TList<TDocxline>;
Delphi-Quellcode:
Wenn ich die Werte dann verarbeiten will, bekomme ich ne Exception. Kann ich eine generische Liste nicht als type deklarieren?
function Tdata.getCatalog(inList : TStringList) : TDocxDocument;
var i : integer; reval : TDocxDocument; tmp : TDocxline; begin ... for i := 0 to inlist.Count - 1 do begin workQuery.ParamByName('id').AsInteger := StrToInt(inList[i]); workQuery.Open; if not workQuery.IsEmpty then begin tmp.level := workQuery.FieldByName('level').AsInteger; tmp.article_id := workQuery.FieldByName('article_id').AsInteger; tmp.article_name := workQuery.FieldByName('number').AsString; tmp.article_number := workQuery.FieldByName('name').AsString; reval.AddRange(tmp); end; workQuery.Close; end; result := reval; end; Vielen Dank :coder: |
AW: Problem mit dynamischem Array of Record
reval : TDocxDocument wird nirgends erzeugt
also z.B.
Delphi-Quellcode:
TDocxline müßte kein Record sondern eine Klasse sein und auch entsprechend erzeugt und per Add eingefügr werden.
Result := TDocxDocument.Create;
Im Moment versuchst Du den immer gleichen Zeiger auf dem Stack tmp : in eine nicht vorhandene Liste einzufügen. |
AW: Problem mit dynamischem Array of Record
Ups :oops:
|
AW: Problem mit dynamischem Array of Record
Delphi-Quellcode:
type TDocxline = record
level : integer; article_id : integer; article_number : string; article_name : string; end; type TDocxDocument = TList<TDocxline>;
Delphi-Quellcode:
procedure Tdata.getCatalog(inList : TStringList; Result : TDocxDocument );
var i : integer; //reval : TDocxDocument; tmp : TDocxline; begin {...} for i := 0 to inlist.Count - 1 do begin workQuery.ParamByName('id').AsInteger := StrToInt(inList[i]); workQuery.Open; if not workQuery.IsEmpty then begin tmp.level := workQuery.FieldByName('level').AsInteger; tmp.article_id := workQuery.FieldByName('article_id').AsInteger; tmp.article_name := workQuery.FieldByName('number').AsString; tmp.article_number := workQuery.FieldByName('name').AsString; //reval.AddRange(tmp); Result.Add( tmp ); end; workQuery.Close; end; //result := reval; end; {...} { Aufruf erfolgt dann so } MyDocx := TDocxDocument.Create; try MyData.getCatalog( MyInList, MyDocx ); // Jetzt irgendwelche wilde Sachen mit MyDocx machen finally MyDocx.Free; end; Zitat:
Delphi-Quellcode:
a := 1; // a = 1
b := a; // b = 1 a := a + 1; // a = 2 c := a; // c = 2 und b = 1
Delphi-Quellcode:
Somit kann hier durchaus ein Record als Listenelement verwendet werden.
type
MyRec = record Value : integer; end; a.Value := 1; b := a; // b.Value = 1 a.Value := a.Value + 1; c := a; // c.Value = 2 und b.Value = 1 |
AW: Problem mit dynamischem Array of Record
Zitat:
Ich bin noch zu sehr in der Welt der Listen ohne Generics gefangen, sorry. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 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