Ver Mensaje Individual
  #2  
Antiguo 03-08-2018
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 60
Reputación: 10
marco3k Va por buen camino
Actualizar varias filas en un ClientDataSet desconectado.

Hola compañeros, despues de analizar una recomendacion en este foro que hizo Al Gonzáles en este Hilo "clubdelphi.com/foros/showthread.php?t=85143&page=2" y cambie la propiedad LogChanges a False del ClientDataSet. Tambien cambie el acceso a los campos como indica el compañero Mick en este Hilo "clubdelphi.com/foros/showthread.php?t=21764".

Hice los cambios respectivos y la velocidad de ejecución de la rutina en Delphi bajo de 15 segundos a 3 segundos. El código quedo asi:

Código Delphi [-]
procedure TLogicaBoletaPago.VerBoleta;
var var_cod_boleta_tmp,var_cod_boleta : string;
begin
  if TListaBoletaTmp.RecordCount>0 then
  begin
    TListado.LogChanges := False; //cambio 1
    TListado.Filter := '';
    TListado.Filtered := False;
    TListado.First;
    repeat
      TListado.Edit;
      TListadoSELECCION.Value := 0; //El acceso directo a campos, cambio 2
      TListado.Post;
      TListado.Next;
    until TListado.Eof;
    TListado.First;
    //***
    TListaBoletaTmp.First;
    while TListaBoletaTmp.Eof = False do
    begin
      if TListaBoletaTmpSELECCION.Value=True then
      begin
        var_cod_boleta_tmp := TListaBoletaTmpANIO.Value +
        TListaBoletaTmpMES.Value +
        TListaBoletaTmpMES_SUP.Value +
        TListaBoletaTmpDNI.Value +
        TListaBoletaTmpTIPO_PLA.Value +
        TListaBoletaTmpNRO_BOL.Value;
        TListado.First;
        while TListado.Eof = False do
        begin
          var_cod_boleta := TListadoANIO.Value +
          TListadoMES.Value +
          TListadoMES_SUP.Value +
          trim(TListadoDNI.Value) +
          TListadoTIPO_PLA.Value +
          TListadoNRO_BOL.Value;
          if var_cod_boleta_tmp = var_cod_boleta then
          begin
            TListado.Edit;
            TListadoSELECCION.Value := 1;
            TListado.Post;
          end;
          TListado.Next;
        end;
      end;
      TListaBoletaTmp.Next;
    end;
  end;
  TListaBoletaTmp.First;
  TListado.Filter := '[seleccion] = 1';
  TListado.Filtered := True;
end;
Aun asi la version de Visual FoxPro con muchos registros se demora 1 seg a lo mucho, si son pocos registros es milisegundos.
Hay algo que menciono Al Gonzáles mencionó en el Hilo que comente lineas arriba:
Cita:
...agregar los registros mediante llamadas de bajo nivel a las interfaces DSBase y DSCursor que contiene el objeto, es decir, ejecutando directamente rutinas de MIDAS. Con ello te ahorras un montón de trámites que la clase hereda de TDataSet.
Tendras Al Gonzáles o algún miembro de este foro algún ejemplo de como ejecutar rutinas MIDAS para reducir a 1 seg la ejecución de la rutina. O alguna otra recomendación que me pudieran brindar y por lo que busque no hay nada equivalente a "REPLACE ALL WITH 0" en Delphi.

Gracias de antemano si me pudieran brindar alguna ayuda.


PD: No puedo agredar hipervínculos asi que puse las direcciones sin el prefijo.
Responder Con Cita