uDataTableUtils.pas: Arreglo de la función CopyDataTableDA5 para que funcione correctamente y se empiece a usar.

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@378 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
David Arranz 2008-05-21 14:54:00 +00:00
parent 8750e65053
commit cde55cdfcd

View File

@ -58,12 +58,11 @@ uses
Dialogs, Variants, uDBSelectionListUtils, uROClasses, uDADataStreamer, uDABin2DataStreamer; Dialogs, Variants, uDBSelectionListUtils, uROClasses, uDADataStreamer, uDABin2DataStreamer;
procedure CopyDataTableDA5(ASource : TDADataTable; procedure CopyDataTableDA5(ASource : TDADataTable; ATarget: TDADataTable;
ATarget: TDADataTable; const OnlySelectedRows : Boolean = False);
const OnlySelectedRows : Boolean);
var var
AStream : Binary; DABin: Binary;
AStream2 : Binary; DADataStreamer : TDABin2DataStreamer;
AFilter : String; AFilter : String;
AFiltered : Boolean; AFiltered : Boolean;
AObj : ISeleccionable; AObj : ISeleccionable;
@ -72,15 +71,6 @@ begin
AFilter := ''; AFilter := '';
AFiltered := False; AFiltered := False;
if not Assigned(ASource) then
raise Exception.Create ('No se ha asignado la tabla de origen (CopyDataTable)');
if not Assigned(ATarget) then
raise Exception.Create ('No se ha asignado la tabla de destino (CopyDataTable)');
if not ATarget.Active then
ATarget.Active := True;
if OnlySelectedRows then if OnlySelectedRows then
begin begin
if not Supports(ASource, ISeleccionable, aObj) then if not Supports(ASource, ISeleccionable, aObj) then
@ -107,20 +97,26 @@ begin
ASource.Filtered := True; ASource.Filtered := True;
end; end;
if not ASource.Active then DABin := Binary.Create;
ASource.Open; DADataStreamer := TDABin2DataStreamer.Create(nil);
AStream := Binary.Create; ShowHourglassCursor;
DesconectarTabla(ATarget); ASource.DisableControls;
ATarget.DisableControls;
try try
ASource.SaveToStream(AStream); ATarget.LogicalName := ASource.LogicalName; // We need to specify new dataset LogicalName
AStream2 := AStream.Clone; ATarget.RemoteFetchEnabled := False; // "Desconectamos" la tabla destino del servidor
if not ASource.Active then
ASource.Open;
ASource.First;
DADataStreamer.WriteDataset(DABin, ASource, [woRows, woSchema], -1);
DADataStreamer.ReadDataset(DABin, ATarget, True);
DADataStreamer.Finalize;
ATarget.RemoteFetchEnabled := True; // "Conectamos" la tabla del servidor otra vez
// ShowMessage(AStream.ToReadableString);
ATarget.LoadFromStream(AStream2); ///->>>>>>>>>>>>>>>>>>>>>>>>>>ERRORRRR
finally
FreeAndNil(AStream);
ConectarTabla(ATarget);
// Dejar el filtro de la tabla origen como estaba // Dejar el filtro de la tabla origen como estaba
if OnlySelectedRows then if OnlySelectedRows then
begin begin
@ -129,11 +125,17 @@ begin
if AFiltered then if AFiltered then
ASource.Filtered := True; ASource.Filtered := True;
end; end;
finally
FreeAndNil(DABin);
FreeAndNil(DADataStreamer);
ASource.EnableControls;
ATarget.EnableControls;
HideHourglassCursor;
end; end;
end; end;
function SetFieldNull(ATarget: TDADataTable; const FieldName: String): Boolean; function SetFieldNull(ATarget: TDADataTable; const FieldName: String): Boolean;
begin begin
Result := False; Result := False;
@ -149,34 +151,6 @@ begin
end; end;
end; end;
{procedure EliminarNoSeleccionados(const ASource : IDADataset;
var ATarget : TDADataTable);
var
AObj : ISelectedRowList;
i : Integer;
begin
if not Supports(ASource, ISelectedRowList, aObj) then
Exit;
// ATarget.DisableControls;
// ATarget.DisableEventHandlers;
ShowHourglassCursor;
try
ATarget.Open;
ATarget.Last;
while ATarget.RecordCount > AObj.SelectedRows.Count do
begin
if AObj.SelectedRows.IndexOf(ATarget.RecIDValue) < 0 then
ATarget.Delete
else
ATarget.Prior;
end;
finally
// ATarget.EnableControls;
// ATarget.EnableControls;
HideHourglassCursor;
end;
end;}
function DataTableModified (const ADataTable : TDADataTable): Boolean; function DataTableModified (const ADataTable : TDADataTable): Boolean;
var var
@ -296,15 +270,11 @@ var
begin begin
with ATarget do with ATarget do
begin begin
// ****** Inicio migración DA 5
{RemoteService := ASource.GetRemoteService;
Adapter := ASource.GetAdapter;}
if not Assigned(ASource.RemoteDataAdapter) then if not Assigned(ASource.RemoteDataAdapter) then
raise Exception.Create('No está asignado RemoteDataAdapter (' + ASource.Name + ')'); raise Exception.Create('No está asignado RemoteDataAdapter (' + ASource.Name + ')');
RemoteDataAdapter.Assign(ASource.RemoteDataAdapter); RemoteDataAdapter.Assign(ASource.RemoteDataAdapter);
// ****** Fin migración DA 5
BusinessRulesID := ASource.BusinessRulesID; BusinessRulesID := ASource.BusinessRulesID;
Randomize; Randomize;
@ -316,78 +286,9 @@ begin
if Assigned(ASource.LocalSchema) then if Assigned(ASource.LocalSchema) then
LocalSchema := ASource.LocalSchema LocalSchema := ASource.LocalSchema
else begin else begin
// ****** Inicio migración DA 5
{
with SchemaCall do
begin
MethodName := ASource.SchemaCall.MethodName;
for i := 0 to ASource.SchemaCall.Params.Count - 1 do
begin
with Params.Add do begin
Name := ASource.SchemaCall.Params[i].Name;
ParamType := ASource.SchemaCall.Params[i].ParamType;
DataType := ASource.SchemaCall.Params[i].DataType;
Value := ASource.SchemaCall.Params[i].Value;
UserClassName := ASource.SchemaCall.Params[i].UserClassName;
end;
end;
end;
}
// ****** Fin migración DA 5
ATarget.Fields.AssignFieldCollection(ASource.Fields); // o también ATarget.LoadSchema; ATarget.Fields.AssignFieldCollection(ASource.Fields); // o también ATarget.LoadSchema;
end; end;
// ****** Inicio migración DA 5
{
with DataUpdateCall do
begin
MethodName := ASource.DataUpdateCall.MethodName;
for i := 0 to ASource.DataUpdateCall.Params.Count - 1 do
begin
with Params.Add do begin
Name := ASource.DataUpdateCall.Params[i].Name;
ParamType := ASource.DataUpdateCall.Params[i].ParamType;
DataType := ASource.DataUpdateCall.Params[i].DataType;
Value := ASource.DataUpdateCall.Params[i].Value;
UserClassName := ASource.DataUpdateCall.Params[i].UserClassName;
end;
end;
end;
with ScriptCall do
begin
MethodName := ASource.ScriptCall.MethodName;
for i := 0 to ASource.ScriptCall.Params.Count - 1 do
begin
with Params.Add do begin
Name := ASource.ScriptCall.Params[i].Name;
ParamType := ASource.ScriptCall.Params[i].ParamType;
DataType := ASource.ScriptCall.Params[i].DataType;
Value := ASource.ScriptCall.Params[i].Value;
UserClassName := ASource.ScriptCall.Params[i].UserClassName;
end;
end;
end;
with DataRequestCall do
begin
MethodName := ASource.DataRequestCall.MethodName;
for i := 0 to ASource.DataRequestCall.Params.Count - 1 do
begin
with Params.Add do begin
begin
Name := ASource.DataRequestCall.Params[i].Name;
ParamType := ASource.DataRequestCall.Params[i].ParamType;
DataType := ASource.DataRequestCall.Params[i].DataType;
Value := ASource.DataRequestCall.Params[i].Value;
UserClassName := ASource.DataRequestCall.Params[i].UserClassName;
end;
end;
end;
end;
}
// ****** Fin migración DA 5
with MasterParamsMappings do with MasterParamsMappings do
for i := 0 to ASource.MasterParamsMappings.Count - 1 do for i := 0 to ASource.MasterParamsMappings.Count - 1 do
Add(ASource.MasterParamsMappings.Strings[i]); Add(ASource.MasterParamsMappings.Strings[i]);
@ -481,6 +382,9 @@ begin
DABin := Binary.Create; DABin := Binary.Create;
DAAdapter := TDABINAdapter.Create(nil); DAAdapter := TDABINAdapter.Create(nil);
ShowHourglassCursor;
ASource.DisableControls;
ATarget.DisableControls;
try try
ATarget.LogicalName := ASource.LogicalName; // We need to specify new dataset LogicalName ATarget.LogicalName := ASource.LogicalName; // We need to specify new dataset LogicalName
ATarget.RemoteFetchEnabled := False; // "Desconectamos" la tabla destino del servidor ATarget.RemoteFetchEnabled := False; // "Desconectamos" la tabla destino del servidor
@ -508,6 +412,9 @@ begin
finally finally
FreeAndNil(DABin); FreeAndNil(DABin);
FreeAndNil(DAAdapter); FreeAndNil(DAAdapter);
ASource.EnableControls;
ATarget.EnableControls;
HideHourglassCursor;
end; end;
end; end;