ProGestion/Base/uDataTableUtils.pas
2007-06-21 16:12:43 +00:00

192 lines
5.9 KiB
ObjectPascal
Raw Permalink Blame History

unit uDataTableUtils;
interface
uses
uDACDSDataTable, uDADataTable, Classes;
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable);
procedure GetKeyListAndValueList (const ASource : TDADataTable;
var KeysList: TStringList; var ValuesList: TStringList);
procedure DeleteAllTable(const ADataTable : TDADataTable);
function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean;
implementation
uses
uDAClasses, uDAInterfaces, SysUtils, Variants;
procedure DeleteAllTable(const ADataTable : TDADataTable);
begin
ADataTable.ClearRows;
{ if ADataTable.RecordCount > 0 then
begin
ADataTable.DisableControls;
//ADataTable.DisableEventHandlers; <- No descomentar
try
repeat begin
ADataTable.Last;
ADataTable.Delete;
end
until ADataTable.BOF;
finally
ADataTable.EnableControls;
//ADataTable.EnableEventHandlers; <- No descomentar
end;
end;}
end;
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable);
var
i : Integer;
begin
with ATarget do
begin
RemoteService := ASource.GetRemoteService;
Adapter := ASource.GetAdapter;
BusinessRulesID := ASource.BusinessRulesID;
Randomize;
Name := ASource.Name + '_' + IntToStr(Random(MAXINT));
LogicalName := ASource.LogicalName;
Params.AssignParamCollection(ASource.Params);
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;
ATarget.LoadSchema; // o tambi<62>n ATarget.Fields.AssignFieldCollection(ASource.Fields);
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;
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;
end;
procedure getKeyListAndValueList (const ASource : TDADataTable;
var KeysList: TStringList; var ValuesList: TStringList);
var
i: Integer;
begin
if not Assigned(KeysList) or not Assigned(ValuesList) then
raise Exception.Create('Las listas est<73>n vacias');
KeysList.Clear;
ValuesList.Clear;
for i:=0 to (ASource.Fields.Count-1) do
if ASource.Fields.Fields[i].InPrimaryKey then
begin
KeysList.Add(Copy(ASource.Fields.Fields[i].Name, 0, Length(ASource.Fields.Fields[i].Name)));
ValuesList.Add(Copy(VarToStr(ASource.Fields.Fields[i].Value), 0, Length(VarToStr(ASource.Fields.Fields[i].Value))));
end;
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;
end.