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 }
|
{ 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);
|
constructor TUCROConn.Create(AOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
@ -185,6 +204,22 @@ var
|
|||||||
AStream: TMemoryStream;
|
AStream: TMemoryStream;
|
||||||
ADataStreamer: TDABin2DataStreamer;
|
ADataStreamer: TDABin2DataStreamer;
|
||||||
ADataTable: TDACDSDataTable;
|
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
|
begin
|
||||||
Result := NIL;
|
Result := NIL;
|
||||||
ADataStreamer := TDABin2DataStreamer.Create(NIL);
|
ADataStreamer := TDABin2DataStreamer.Create(NIL);
|
||||||
@ -192,7 +227,7 @@ begin
|
|||||||
|
|
||||||
if AStream <> nil then
|
if AStream <> nil then
|
||||||
try
|
try
|
||||||
ADataTable := TDACDSDataTable.Create(Application);
|
ADataTable := TDACDSDataTable.Create(NIL);
|
||||||
|
|
||||||
// Generar un nombre aleatorio
|
// Generar un nombre aleatorio
|
||||||
Randomize;
|
Randomize;
|
||||||
@ -210,9 +245,11 @@ begin
|
|||||||
ADataTable.Last;
|
ADataTable.Last;
|
||||||
ADataTable.First;
|
ADataTable.First;
|
||||||
|
|
||||||
Result := ADataTable.Dataset;
|
ADataSet := TClientDataset.Create(NIL);
|
||||||
|
_CopiarDataSet;
|
||||||
|
Result := ADataSet;
|
||||||
finally
|
finally
|
||||||
//FreeAndNIL(ADataTable); <-- No liberar, lo hace Application
|
FreeAndNIL(ADataTable);
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
FreeAndNIL(AStream);
|
FreeAndNIL(AStream);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user