procedure TFormImportaNFe.FormCreate(Sender: TObject); function GetFieldType(AP: TTypeKind):TFieldType; begin case AP of tkInt64, tkInteger: Result:=ftInteger; tkFloat: Result:=ftFloat; else Result:=ftString; end; end;Var C, I: Integer; L: PPropList; P: TPropInfo; T: TFieldType;begin NFe:=TOBNFe.Create; Ds:=TDataSource.Create(Self); Mem:=TMemDataset.Create(Self); C:=GetPropList(TCNFeProduto.ClassInfo, tkAny, nil); GetMem(L, C * SizeOf(TPropInfo)); GetPropList(TCNFeProduto, L); with Mem.FieldDefs do begin Add('pro_id', ftInteger); for I := 0 to C - 1 do begin P:=TPropInfo(L^[I]^); T:=GetFieldType(P.PropType^.Kind); if T = ftString then Add(P.Name, T, 100) else Add(P.Name, T); end; end; Dispose(L); Mem.CreateTable; Mem.Active:=True; Ds.DataSet:=Mem; DBGridImportacaoItens.DataSource:=Ds;end;
Heap dump by heaptrc unit 227322 memory blocks allocated : 30648026/31280640 227321 memory blocks freed : 30642644/31275256 1 unfreed memory blocks : 5382 True heap size : 2523136 True free heap : 2517568 Should be : 2517624
GetMem(L, C * SizeOf(TPropInfo));
GetPropList(TCNFeProduto, L);
procedure TFormImportaNFe.FormCreate(Sender: TObject); function GetFieldType(AP: TTypeKind):TFieldType; begin case AP of tkInt64, tkInteger: Result:=ftInteger; tkFloat: Result:=ftFloat; else Result:=ftString; end; end;Var C, I: Integer; L: PPropList; P: TPropInfo; T: TFieldType;begin NFe:=TOBNFe.Create; Ds:=TDataSource.Create(Self); Mem:=TMemDataset.Create(Self); C:=GetPropList(TCNFeProduto.ClassInfo, tkAny, nil); GetMem(L, C * SizeOf(TPropInfo)); GetPropList(TCNFeProduto, L); with Mem.FieldDefs do begin Add('pro_id', ftInteger); for I := 0 to C - 1 do begin P:=TPropInfo(L^^); T:=GetFieldType(P.PropType^.Kind); if T = ftString then Add(P.Name, T, 100) else Add(P.Name, T); end; end; Dispose(L); Mem.CreateTable; Mem.Active:=True; Ds.DataSet:=Mem; DBGridImportacaoItens.DataSource:=Ds;end;