Ver Mensaje Individual
  #1  
Antiguo 03-07-2007
KAYO KAYO is offline
Miembro
 
Registrado: jul 2006
Posts: 78
Reputación: 18
KAYO Va por buen camino
Rutina muy lenta...

Por alguna razon la rutina que os detallo va superlenta....., MDO con Firebird , Delphi 7 en XP.

estoy utilizando TMDOTable y tarda mas de 30 minutos en actualizar 900 registro con la siguiente rutina.

Agradezco vuestra paciencia en darme alguna pista de como optimizar esta rutina......

Código Delphi [-]
 
    {Desactivo el MasterDetail}
    Dm.TListasClientes.MasterSource := nil;
    {filtro la tabla para que solo se contabilicen los registros NO ENTREGADOS}
    Dm.TListasClientes.Filter := 'RECIBIDO = '+CHR(39)+'0'+CHR(39);
    Dm.TListasClientes.Filtered := True;
    DM.TListasClientes.Open;
    DM.TListasClientes.Last;
    {me voy al ultimo registro porque si no me aparece como si la base tuviese 0 registros para iniciar el progressbar}
    ProgressBar1.Min :=  0;
    ProgressBar1.Max :=   DM.TListasClientes.RecordCount;
    i := 0;
    DM.TListasClientes.First;
    while not DM.TListasClientes.eof do begin
           i := i +1;
           ProgressBar1.Position := i;
           {verifico si existe en la base si existe para incrementar el aticulo y si no lo incluye}
              if DM.TPedidosDetallados.Locate('NUMERO',DM.TListasClientesNumero.AsString,[loPartialKey]) then begin
                 DM.TPedidosDetallados.Edit;
                 DM.TPedidosDetalladosCantidad.AsInteger := DM.TPedidosDetalladosCantidad.AsInteger + (DM.TListasClientesCantidad.AsInteger-DM.TListasClientesCantidadRecibido.AsInteger);
                 DM.TPedidosDetalladosTotal.AsCurrency := DM.TPedidosDetalladosCantidad.AsInteger * DM.TPedidosDetalladosCosto.AsCurrency;
                 end
             else begin
                {busco en la base de articulos para completar datos como precios y costos}
                DM.TArticulos.Locate('Numero',DM.TListasClientesNumero.AsString,[loPartialKey]);
                DM.TPedidosDetallados.Insert;
                DM.TPedidosDetalladosNumero.AsString := DM.TListasClientesNumero.AsString;
                DM.TPedidosDetalladosCantidad.AsInteger := DM.TListasClientesCantidad.AsInteger-DM.TListasClientesCantidadRecibido.AsInteger;
                DM.TPedidosDetalladosEditorial.AsInteger := DM.TArticulosEditorial.AsInteger;
                DM.TPedidosDetalladosDepartamento.AsInteger := DM.TArticulosDepartamento.AsInteger;
                DM.TPedidosDetalladosProveedor.AsString := DM.TArticulosProveedor.AsString;
                DM.TPedidosDetalladosLinea.AsString := DM.TArticulosLinea.AsString;
                DM.TPedidosDetalladosCurso.AsString := DM.TArticulosCurso.AsString;
                DM.TPedidosDetalladosDescripcion.AsString := DM.TArticulosDescripcion.AsString;
                DM.TPedidosDetalladosCosto.AsCurrency := DM.TArticulosCosto.AsCurrency;
                DM.TPedidosDetalladosTotal.AsCurrency := DM.TPedidosDetalladosCantidad.AsInteger * DM.TPedidosDetalladosCosto.AsCurrency;
                end;
          DM.TListasClientes.Next;
    end;
    DM.TListasClientes.Close;
    DM.TListasClientes.Filtered  := False;
    ProgressBar1.Position := 0;


ESPERO SE ENTIENDA!!!!

Última edición por dec fecha: 03-07-2007 a las 17:08:44.
Responder Con Cita