Detectada fuga de memoria porque se quedaban objetos sin liberar
git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@919 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
parent
e468d501f9
commit
56dfc3b4ed
@ -63,6 +63,25 @@ uses
|
||||
|
||||
{ TUCROConn }
|
||||
|
||||
procedure CopyRecord(Source, Destination: TDataSet);
|
||||
var Ind:longint;
|
||||
SField, DField: TField;
|
||||
begin
|
||||
for Ind := 0 to Source.FieldCount - 1 do
|
||||
begin
|
||||
SField := Source.Fields[ Ind ];
|
||||
DField := Destination.FindField(SField.FieldName);
|
||||
if (DField <> nil) and (DField.FieldKind = fkData) and
|
||||
not DField.ReadOnly then
|
||||
if (SField.DataType = ftString) or
|
||||
(SField.DataType <> DField.DataType) then
|
||||
DField.AsString := SField.AsString
|
||||
else
|
||||
DField.Assign( SField )
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
constructor TUCROConn.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
@ -185,6 +204,22 @@ var
|
||||
AStream: TMemoryStream;
|
||||
ADataStreamer: TDABin2DataStreamer;
|
||||
ADataTable: TDACDSDataTable;
|
||||
ADataSet : TClientDataset;
|
||||
|
||||
procedure _CopiarDataSet;
|
||||
begin
|
||||
ADataSet.FieldDefs.Assign(ADataTable.DataSet.FieldDefs);
|
||||
ADataSet.CreateDataSet;
|
||||
|
||||
ADataSet.Open;
|
||||
while not ADataTable.EOF do
|
||||
begin
|
||||
ADataSet.Append;
|
||||
CopyRecord(ADataTable.DataSet, ADataSet);
|
||||
ADataSet.Post;
|
||||
ADataTable.Next;
|
||||
end;
|
||||
end;
|
||||
begin
|
||||
Result := NIL;
|
||||
ADataStreamer := TDABin2DataStreamer.Create(NIL);
|
||||
@ -192,7 +227,7 @@ begin
|
||||
|
||||
if AStream <> nil then
|
||||
try
|
||||
ADataTable := TDACDSDataTable.Create(Application);
|
||||
ADataTable := TDACDSDataTable.Create(NIL);
|
||||
|
||||
// Generar un nombre aleatorio
|
||||
Randomize;
|
||||
@ -210,9 +245,11 @@ begin
|
||||
ADataTable.Last;
|
||||
ADataTable.First;
|
||||
|
||||
Result := ADataTable.Dataset;
|
||||
ADataSet := TClientDataset.Create(NIL);
|
||||
_CopiarDataSet;
|
||||
Result := ADataSet;
|
||||
finally
|
||||
//FreeAndNIL(ADataTable); <-- No liberar, lo hace Application
|
||||
FreeAndNIL(ADataTable);
|
||||
end;
|
||||
finally
|
||||
FreeAndNIL(AStream);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user