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:
David Arranz 2009-03-05 11:57:48 +00:00
parent e468d501f9
commit 56dfc3b4ed

View File

@ -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);