Varela_PuntosVenta/Source/Base/uDataTableUtils.pas

325 lines
9.4 KiB
ObjectPascal
Raw Blame History

unit uDataTableUtils;
interface
uses
uDACDSDataTable, uDADataTable, uDAInterfaces, uDADelta;
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable;
RemoteUpdate: Boolean = True);
procedure CopyDataTable(ASource : IDADataset; ATarget : TDADataTable;
const OnlySelectedRows : Boolean = False);
procedure DeleteAllTable(const ADataTable : TDADataTable);
function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean;
implementation
uses
uDAClasses, SysUtils, uDABINAdapter, uROTypes, uDBSelectionList, cxControls,
Dialogs, Variants, uDADataStreamer;
{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;}
procedure DeleteAllTable(const ADataTable : TDADataTable);
begin
ADataTable.ClearRows;
end;
function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean;
var
i, x : integer;
OldNewAreDifferent: boolean;
begin
OldNewAreDifferent := FALSE;
for i := 0 to (aDelta.Count-1) do
begin
for x := 0 to (aDelta.LoggedFieldCount-1) do
begin
OldNewAreDifferent := (aDelta.Changes[i].OldValues[x] <> aDelta.Changes[i].NewValues[x]);
if OldNewAreDifferent then
Break; // Abandon iteration at the first difference between old and new.
end;
if OldNewAreDifferent then
Break; // Abandon iteration at the first difference between old and new.
end;
result := OldNewAreDifferent;
end;
procedure CopyDataTable(ASource : IDADataset; ATarget : TDADataTable;
const OnlySelectedRows : Boolean = False);
var
DABin: Binary;
DAAdapter : TDABINAdapter;
AFilter : String;
AFiltered : Boolean;
AObj : ISelectedRowList;
i : Integer;
begin
DABin := Binary.Create;
DAAdapter := TDABINAdapter.Create(nil);
AFilter := '';
if OnlySelectedRows then
begin
if not Supports(ASource, ISelectedRowList, aObj) then
raise Exception.Create('El origen de datos no soporta la interfaz ISelectedRowList (CopyDataTable)');
if ASource.Dataset.Filtered then
begin
AFiltered := True;
AFilter := ASource.Dataset.Filter;
ASource.Dataset.Filtered := False;
end;
ASource.Dataset.Filter := '';
for i := 0 to AObj.SelectedRows.Count - 1 do
begin
if (i > 0) then
ASource.Dataset.Filter := ASource.Dataset.Filter + ' or ';
ASource.Dataset.Filter := ASource.Dataset.Filter + '(RecID = ' + IntToStr(AObj.SelectedRows.Items[i]) + ')';
end;
ASource.Dataset.Filtered := True;
end;
try
ATarget.LogicalName := ASource.LogicalName; // We need to specify new dataset LogicalName
if not ASource.Active then
ASource.Open;
ASource.Dataset.First;
DAAdapter.WriteDataset(DABin, ASource, [woRows, woSchema], -1);
DAAdapter.Initialize(DABin, aiReadFromBeginning);
DAAdapter.ReadDataset(ATarget.LogicalName, ATarget, True, True);
DAAdapter.Finalize;
if OnlySelectedRows then
begin
ASource.Dataset.Filtered := False;
ASource.Dataset.Filter := AFilter;
if AFiltered then
ASource.Dataset.Filtered := True;
end;
finally
FreeAndNil(DABin);
FreeAndNil(DAAdapter);
end;
end;
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable; RemoteUpdate: Boolean);
var
i : Integer;
begin
with ATarget do
begin
RemoteDataAdapter := ASource.RemoteDataAdapter;
BusinessRulesID := ASource.BusinessRulesID;
Randomize;
Name := ASource.Name + '_' + IntToStr(Random(MAXINT));
LogicalName := ASource.LogicalName;
Params.AssignParamCollection(ASource.Params);
if Assigned(ASource.LocalSchema) then
LocalSchema := ASource.LocalSchema
else
ATarget.Fields.AssignFieldCollection(ASource.Fields); // o tambi<62>n ATarget.LoadSchema;
with MasterParamsMappings do
for i := 0 to ASource.MasterParamsMappings.Count - 1 do
Add(ASource.MasterParamsMappings.Strings[i]);
with MasterRequestMappings do
for i := 0 to ASource.MasterRequestMappings.Count - 1 do
Add(ASource.MasterRequestMappings.Strings[i]);
MasterMappingMode := ASource.MasterMappingMode;
MasterFields := ASource.MasterFields;
MasterOptions := ASource.MasterOptions;
DetailFields := ASource.DetailFields;
DetailOptions := ASource.DetailOptions;
RemoteUpdatesOptions := ASource.RemoteUpdatesOptions;
StreamingOptions := ASource.StreamingOptions;
RemoteFetchEnabled := ASource.RemoteFetchEnabled;
end;
if not RemoteUpdate then
begin
ATarget.LogChanges := False;
ATarget.RemoteFetchEnabled := False;
end;
end;
end.
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable; RemoteUpdate: Boolean);
var
i : Integer;
begin
with ATarget do
begin
// ****** Inicio migraci<63>n DA 5
//RemoteService := ASource.GetRemoteService;
//Adapter := ASource.GetAdapter;
RemoteDataAdapter.Assign(ASource.RemoteDataAdapter);
// ****** Fin migraci<63>n DA 5
BusinessRulesID := ASource.BusinessRulesID;
Randomize;
Name := ASource.Name + '_' + IntToStr(Random(MAXINT));
LogicalName := ASource.LogicalName;
Params.AssignParamCollection(ASource.Params);
if Assigned(ASource.LocalSchema) then
LocalSchema := ASource.LocalSchema
else begin
// ****** Inicio migraci<63>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<63>n DA 5
ATarget.Fields.AssignFieldCollection(ASource.Fields); // o tambi<62>n ATarget.LoadSchema;
end;
// ****** Inicio migraci<63>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<63>n DA 5
with MasterParamsMappings do
for i := 0 to ASource.MasterParamsMappings.Count - 1 do
Add(ASource.MasterParamsMappings.Strings[i]);
with MasterRequestMappings do
for i := 0 to ASource.MasterRequestMappings.Count - 1 do
Add(ASource.MasterRequestMappings.Strings[i]);
MasterMappingMode := ASource.MasterMappingMode;
MasterFields := ASource.MasterFields;
MasterOptions := ASource.MasterOptions;
DetailFields := ASource.DetailFields;
DetailOptions := ASource.DetailOptions;
RemoteUpdatesOptions := ASource.RemoteUpdatesOptions;
StreamingOptions := ASource.StreamingOptions;
RemoteFetchEnabled := ASource.RemoteFetchEnabled;
end;
if not RemoteUpdate then
begin
ATarget.LogChanges := False;
ATarget.RemoteFetchEnabled := False;
end;
end;