Se adapta CopyDataTableDA5, para que el puntero de posicion de la tabla source no se pierda
git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@477 f4e31baf-9722-1c47-927c-6f952f962d4b
This commit is contained in:
parent
8bfaf9a5a6
commit
3f4cca37f3
@ -67,52 +67,57 @@ var
|
|||||||
AFilter : String;
|
AFilter : String;
|
||||||
AObj : ISeleccionable;
|
AObj : ISeleccionable;
|
||||||
i : Integer;
|
i : Integer;
|
||||||
|
AID: Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
AFilter := '';
|
AFilter := '';
|
||||||
AFiltered := False;
|
AFiltered := False;
|
||||||
|
|
||||||
if OnlySelectedRows then
|
|
||||||
begin
|
|
||||||
if not Supports(ASource, ISeleccionable, aObj) then
|
|
||||||
raise Exception.Create('El origen de datos no soporta la interfaz ISeleccionable (CopyDataTable)');
|
|
||||||
|
|
||||||
{ Si la tabla está abierta, la cerramos antes de aplicar los filtros
|
|
||||||
porque por cada cambio en el filtro se hacen llamadas internas de TDADataTable. }
|
|
||||||
if ASource.Active then
|
|
||||||
ASource.Close;
|
|
||||||
|
|
||||||
// Si la tabla origen viene con un filtro, lo guardamos para luego restablecerlo.
|
|
||||||
if ASource.Filtered then
|
|
||||||
begin
|
|
||||||
AFiltered := True;
|
|
||||||
AFilter := ASource.Filter;
|
|
||||||
ASource.Filtered := False;
|
|
||||||
end;
|
|
||||||
|
|
||||||
ASource.Filter := '';
|
|
||||||
|
|
||||||
//Si no hay elemento seleccionados filtramos para que ATarget se quede vacia
|
|
||||||
if (AObj.SelectedRecords.Count = 0) then
|
|
||||||
ASource.Filter := ASource.Filter + '(' + ASource.RecIDField.FieldName + ' = ' + IntToStr(ID_NULO) + ')'
|
|
||||||
|
|
||||||
//En caso contrario filtramos por los elementos seleccionados
|
|
||||||
else
|
|
||||||
for i := 0 to AObj.SelectedRecords.Count - 1 do
|
|
||||||
begin
|
|
||||||
if (i > 0) then
|
|
||||||
ASource.Filter := ASource.Filter + ' or ';
|
|
||||||
ASource.Filter := ASource.Filter + '(' + ASource.RecIDField.FieldName + ' = ' + IntToStr(AObj.SelectedRecords.Items[i]) + ')';
|
|
||||||
end;
|
|
||||||
ASource.Filtered := True;
|
|
||||||
end;
|
|
||||||
|
|
||||||
DABin := Binary.Create;
|
|
||||||
DADataStreamer := TDABin2DataStreamer.Create(nil);
|
|
||||||
|
|
||||||
ShowHourglassCursor;
|
ShowHourglassCursor;
|
||||||
ASource.DisableControls;
|
ASource.DisableControls;
|
||||||
ATarget.DisableControls;
|
ATarget.DisableControls;
|
||||||
|
AID := ASource.GetRowRecIDValue; //Se guarda la posicion de la tabla fuente
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|
||||||
|
if OnlySelectedRows then
|
||||||
|
begin
|
||||||
|
if not Supports(ASource, ISeleccionable, aObj) then
|
||||||
|
raise Exception.Create('El origen de datos no soporta la interfaz ISeleccionable (CopyDataTable)');
|
||||||
|
|
||||||
|
{ Si la tabla está abierta, la cerramos antes de aplicar los filtros
|
||||||
|
porque por cada cambio en el filtro se hacen llamadas internas de TDADataTable. }
|
||||||
|
if ASource.Active then
|
||||||
|
ASource.Close;
|
||||||
|
|
||||||
|
// Si la tabla origen viene con un filtro, lo guardamos para luego restablecerlo.
|
||||||
|
if ASource.Filtered then
|
||||||
|
begin
|
||||||
|
AFiltered := True;
|
||||||
|
AFilter := ASource.Filter;
|
||||||
|
ASource.Filtered := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ASource.Filter := '';
|
||||||
|
|
||||||
|
//Si no hay elemento seleccionados filtramos para que ATarget se quede vacia
|
||||||
|
if (AObj.SelectedRecords.Count = 0) then
|
||||||
|
ASource.Filter := ASource.Filter + '(' + ASource.RecIDField.FieldName + ' = ' + IntToStr(ID_NULO) + ')'
|
||||||
|
|
||||||
|
//En caso contrario filtramos por los elementos seleccionados
|
||||||
|
else
|
||||||
|
for i := 0 to AObj.SelectedRecords.Count - 1 do
|
||||||
|
begin
|
||||||
|
if (i > 0) then
|
||||||
|
ASource.Filter := ASource.Filter + ' or ';
|
||||||
|
ASource.Filter := ASource.Filter + '(' + ASource.RecIDField.FieldName + ' = ' + IntToStr(AObj.SelectedRecords.Items[i]) + ')';
|
||||||
|
end;
|
||||||
|
ASource.Filtered := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
DABin := Binary.Create;
|
||||||
|
DADataStreamer := TDABin2DataStreamer.Create(nil);
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
@ -136,6 +141,8 @@ begin
|
|||||||
ASource.Filtered := True;
|
ASource.Filtered := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
ASource.Locate(ASource.RecIDField.FieldName, AID, []); //Se intenta restablecer la posicion inicial de la tabla fuente
|
||||||
|
|
||||||
finally
|
finally
|
||||||
FreeAndNil(DABin);
|
FreeAndNil(DABin);
|
||||||
FreeAndNil(DADataStreamer);
|
FreeAndNil(DADataStreamer);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user