Detectada fuga de memoria porque se quedaban objetos sin liberar

git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@412 f4e31baf-9722-1c47-927c-6f952f962d4b
This commit is contained in:
David Arranz 2009-03-31 16:45:29 +00:00
parent 62b337a3a6
commit f84a4c6a9e

View File

@ -23,7 +23,7 @@ uses
DBClient,
SysUtils,
uRORemoteService, uDADataStreamer, uROBinMessage, uROWinInetHttpChannel,
uDABin2DataStreamer, uDARemoteDataAdapter, UCDataConnector;
uDABin2DataStreamer, uDARemoteDataAdapter, UCDataConnector, uROClient;
type
TUCROConn = class(TUCDataConnector)
@ -59,10 +59,29 @@ implementation
uses
Forms, Dialogs, FactuGES_Intf, uROTypes, uDAClasses, uDADataTable,
uDACDSDataTable;
uDACDSDataTable, uROEncryption;
{ 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;
@ -120,6 +139,7 @@ begin
begin
FRemoteService.Message := FMessage;
FRemoteService.Channel := FChannel;
with FDataAdapter do
begin
RemoteService := FRemoteService;
@ -184,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);
@ -191,7 +227,7 @@ begin
if AStream <> nil then
try
ADataTable := TDACDSDataTable.Create(Application);
ADataTable := TDACDSDataTable.Create(NIL);
// Generar un nombre aleatorio
Randomize;
@ -209,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);
@ -221,3 +259,4 @@ end;
end.