Hallo allemaal,
Ik zit met het volgende probleem waarbij ik een generic list maak van een object.
Als ik later de data probeer terug te lezen krijg ik onzin terug
Hierbij een korte omschrijving van de beoogde werking
Ik heb een TNCR object deze bevat een TNCRArtikel object.
Bij het aanmaken van het TNCR object creëer in ook NCRArtikelen als een generic list.
Code:
NCRArtikelen := Tlist<TNCRArtikel>.Create;
als ik op de knop druk moet de NCR gevuld worden met data en moeten er meerdere artikelen gemaakt worden
hiervoor maak ik een tempArtikel aan dat ik vul met de artikel data
Code:
NCR:=TNCR.Create();
NCR.ArtikelNr:='172T100';
NCR.Aanvrager:=4266;
NCR.datum:=formatdatetime('yyyymmdd', now);
NCR.Afdeling:=200;
NCR.Prod_order:=4170012;
NCR.Omschrijving:='Dit is een test';
NCR.SubAssy:=7;
for i := 0 to 4-1 do
begin
tempArtikel:=TNCRArtikel.Create(0);
TempArtikel.PijpNr:=i+16600;
TemPArtikel.ArrayNr:=0;
TemPArtikel.IDNr:=0;
NCR.NCRArtikelen.Add(TempArtikel);
tempArtikel.Free;
end;
Als ik hierna de data in NCR.NCRArtikelen wil terug lezen krijg ik alleen voor het eerste item data terug (weliswaar de laatste entry maar goed)
Voor de overige items krijg ik onzin terug
Code:
for I := 0 to NCR.NCRArtikelen.Count-1 do
showmessage(NCR.NCRArtikelen.Items[i].PijpNr.ToString);
Blijkbaar doe ik iets fout en kloppen mijn pointers niet meer na het toevoegen van de data.
Maar ik zie niet wat ik fout doe.
hieronder de complete source van mijn test programma (de twee objecten en het formulier met de knop om het NCR object te vullen)
Code:
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Generics.Collections, Vcl.StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TNCRArtikel = class(Tobject)
private
FNCR_ID:integer;
FIDNr: integer;
FPijpNr: integer;
FArrayNr: integer;
function Get_IsSaved: boolean;
public
Constructor Create(NCR_ID:integer);
Destructor Destroy; override;
Procedure Save;
Published
property PijpNr:integer read FPijpNr write FPijpNr;
property ArrayNr:integer read FArrayNr write FArrayNr;
property IDNr:integer read FIDNr write FIDNr;
property IsSaved:boolean read Get_IsSaved;
end;
TNCR = class(Tobject)
private
FArtikelType:integer;
AantalAut:integer;
FProdOrder: integer;
FNCR_ID: integer;
FArtikelNr: string;
Fstatus: integer;
FDatum: string;
FNCRNr: integer;
FAanvrager: integer;
FAfdeling: integer;
FOmschrijving: String;
FSubAssy: integer;
procedure LoadNCR;
procedure Set_ArtikelNr(const Value: string);
procedure Set_Prodorder(const Value: integer);
function Get_NewNCRNumber: string;
function GetNCRNummer: string;
procedure Set_NCR_ID(const Value: integer);
public
NCRArtikelen: Tlist<TNCRArtikel>;
Constructor Create(ANCR_ID:integer); overload;
Constructor Create; overload;
Destructor Destroy; override;
procedure MakeDoc;
procedure Save ;
procedure UpdateStatus(Sender:Tobject; Status:integer);
procedure UpdateAantalAut(Sender:Tobject; NumAut:integer);
Published
property NCRNr:integer read FNCRNr write FNCRNr;
property NCR_ID:integer Read FNCR_ID write Set_NCR_ID;
property ArtikelNr: string Read FArtikelNr write Set_ArtikelNr;
property ArtikelType: integer Read FArtikelType;
property Prod_order: integer read FProdOrder write Set_Prodorder;
property Status: integer read Fstatus;
property datum: string read FDatum write FDatum;
property Afdeling:integer read FAfdeling write FAfdeling;
property Aanvrager:integer read FAanvrager write FAanvrager;
property Omschrijving:String read FOmschrijving write FOmschrijving;
Property NewNCRNr:string read Get_NewNCRNumber;
property NCRNummer:string read GetNCRNummer;
Property SubAssy:integer read FSubAssy write FSubAssy;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TNCRArtikel }
constructor TNCRArtikel.Create(NCR_ID: integer);
begin
end;
destructor TNCRArtikel.Destroy;
begin
inherited;
end;
function TNCRArtikel.Get_IsSaved: boolean;
begin
end;
procedure TNCRArtikel.Save;
begin
end;
{ TNCR }
constructor TNCR.Create(ANCR_ID: integer);
begin
end;
constructor TNCR.Create;
begin
AantalAut:=2;
FNCR_ID:=0;
NCRArtikelen := Tlist<TNCRArtikel>.Create;
end;
destructor TNCR.Destroy;
begin
NCRArtikelen.Free;
inherited;
end;
function TNCR.GetNCRNummer: string;
begin
end;
function TNCR.Get_NewNCRNumber: string;
begin
end;
procedure TNCR.LoadNCR;
begin
end;
procedure TNCR.MakeDoc;
begin
end;
procedure TNCR.Save;
begin
end;
procedure TNCR.Set_ArtikelNr(const Value: string);
begin
fartikeltype:=1;
end;
procedure TNCR.Set_NCR_ID(const Value: integer);
begin
end;
procedure TNCR.Set_Prodorder(const Value: integer);
begin
end;
procedure TNCR.UpdateAantalAut(Sender: Tobject; NumAut: integer);
begin
end;
procedure TNCR.UpdateStatus(Sender: Tobject; Status: integer);
begin
end;
procedure TForm2.Button1Click(Sender: TObject);
var NCR:TNCR;
i:integer;
tempartikel:TNCRArtikel;
begin
NCR:=TNCR.Create();
NCR.ArtikelNr:='172T100';
NCR.Aanvrager:=4266;
NCR.datum:=formatdatetime('yyyymmdd', now);
NCR.Afdeling:=200;
NCR.Prod_order:=4170012;
NCR.Omschrijving:='Dit is een test';
NCR.SubAssy:=7;
for i := 0 to 4-1 do
begin
tempArtikel:=TNCRArtikel.Create(0);
TempArtikel.PijpNr:=i+16600;
TemPArtikel.ArrayNr:=0;
TemPArtikel.IDNr:=0;
NCR.NCRArtikelen.Add(TempArtikel);
tempArtikel.Free;
end;
for I := 0 to NCR.NCRArtikelen.Count-1 do
showmessage(NCR.NCRArtikelen.Items[i].PijpNr.ToString);
NCR.Free;
end;
Bookmarks