Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Problem mit dynamischem Array of Record

  Alt 6. Dez 2010, 09:59
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;
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 6. Dez 2010 um 10:01 Uhr)
  Mit Zitat antworten Zitat