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;
|
||||
AObj : ISeleccionable;
|
||||
i : Integer;
|
||||
AID: Integer;
|
||||
|
||||
begin
|
||||
AFilter := '';
|
||||
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;
|
||||
ASource.DisableControls;
|
||||
ATarget.DisableControls;
|
||||
AID := ASource.GetRowRecIDValue; //Se guarda la posicion de la tabla fuente
|
||||
|
||||
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.RemoteFetchEnabled := False; // "Desconectamos" la tabla destino del servidor
|
||||
|
||||
@ -136,6 +141,8 @@ begin
|
||||
ASource.Filtered := True;
|
||||
end;
|
||||
|
||||
ASource.Locate(ASource.RecIDField.FieldName, AID, []); //Se intenta restablecer la posicion inicial de la tabla fuente
|
||||
|
||||
finally
|
||||
FreeAndNil(DABin);
|
||||
FreeAndNil(DADataStreamer);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user