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:
parent
62b337a3a6
commit
f84a4c6a9e
@ -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.
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user