Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Problem mit dynamischem Array of Record (https://www.delphipraxis.net/156480-problem-mit-dynamischem-array-record.html)

fillibuster 6. Dez 2010 07:13

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:
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;
Wenn ich die Werte dann verarbeiten will, bekomme ich ne Exception. Kann ich eine generische Liste nicht als type deklarieren?

Vielen Dank :coder:

Bummi 6. Dez 2010 07:43

AW: Problem mit dynamischem Array of Record
 
reval : TDocxDocument wird nirgends erzeugt
also z.B.
Delphi-Quellcode:
Result := TDocxDocument.Create;
TDocxline müßte kein Record sondern eine Klasse sein und auch entsprechend erzeugt und per Add eingefügr werden.

Im Moment versuchst Du den immer gleichen Zeiger auf dem Stack tmp : in eine nicht vorhandene Liste einzufügen.

fillibuster 6. Dez 2010 07:47

AW: Problem mit dynamischem Array of Record
 
Ups :oops:

Sir Rufo 6. Dez 2010 08:59

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:

Zitat von Bummi (Beitrag 1066436)
TDocxline müßte kein Record sondern eine Klasse sein und auch entsprechend erzeugt und per Add eingefügr werden.

Im Moment versuchst Du den immer gleichen Zeiger auf dem Stack tmp : in eine nicht vorhandene Liste einzufügen.

Das sehe ich nicht so ... denn ein Record verhält sich genauso wie eine normale Variable.
Delphi-Quellcode:
a := 1; // a = 1
b := a; // b = 1
a := a + 1; // a = 2
c := a; // c = 2 und b = 1
Delphi-Quellcode:
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
Somit kann hier durchaus ein Record als Listenelement verwendet werden.

Bummi 6. Dez 2010 10:29

AW: Problem mit dynamischem Array of Record
 
Zitat:

Somit kann hier durchaus ein Record als Listenelement verwendet werden.
:oops:
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.
Seite 2 von 2     12   

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