Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2005
Luis Alberto Luis Alberto is offline
Miembro
 
Registrado: ago 2005
Posts: 149
Poder: 19
Luis Alberto Va por buen camino
Optimizacion de Tiempo

Hola buenas tardes...

Mi problema consiste el lo siguiente....

Tengo dos Archivos .dat que me mandan y yo los tomo para actualizar una tabla que tengo en una base de datos.

El archivo dat son del cliente HP es algo asi :

125895-988|PQ|N/E|Lapices|N|N
7878AADF|PQ|N/E|Borradores|N|N

Asi son los registros que contiene el dat son 118196 registros...

Entonces con un Query extraigo de la tabla solamente los que son de ese cliente HP y por medio de parametro le paso el NUMERO DE PARTE


entonces si el numero de parte existe en la tabla, modifica 3 campos de la tabla con los datos que tiene el dat pero si no existe los agrega como nuevo

Entonces este proceso actualmente me lleva 16 horas realizarlo quiero ver si existe una posivilidad de optimizar dicho codigo....?



Las base de datos es Interbase


el codigo se los muestro a continuacion:
este codigo leo el archivo dat uno se llama Partes y otro Producto, iviemente primero leo uno y hago una consulta sql con el IBquery se que llama qParte: que dice asi:
Código Delphi [-]
 
DmPartes.qParte.Close;
     DmPartes.qParte.ParamByName  ('NOPARTE').Value:=NoParte;
     DmPartes.qParte.Active:=true;
     if DmPartes.qParte.IsEmpty=false then
       begin
         DmPartes.qParte.Edit;      
    
else 
Agregar....

como ven asi le paso por panametro a la sentencia SQL en Numero si existe edita los campos si no agregalo como nuevo..espero me entiendan...?

el codigo que sigue es como leo el dat....

Código Delphi [-]
 
while not Eof( archivo ) do begin
              If (bcancelar.Tag = 1) Then
                Break;
              // Lee una linea del archivo de texto
              Readln( archivo, linea );
              // Comprueba si tiene pipes, para saber si hay mas informacion
              if ( pos( '|', linea ) > 0 ) then begin
                 if Partes then begin
                    //try
                      for A := 1 to 8 do begin
                         SegundoPipe      := pos( '|', linea )                     ;
                         case a of
                         // No. de Parte
                         1: Noparte     :=Trim(copy( linea, 1, SegundoPipe -1 ))  ;
                         // PL
                         2: PL          :=Trim(copy( linea, 1, SegundoPipe -1 ))  ;
                         // Fraccion
                         3:
                         Begin
                             FracStr    := copy( linea, 1, SegundoPipe -1 )        ;
                             Fraccion   := 0                                       ;
                             If (FracStr <> 'N/E') and (Trim(FracStr) <> '') Then
                                Fraccion := StrToInt( FracStr )                    ;
                         End; {3}
                         // Descripcion
                         5: Descripcion := trim( copy( linea, 1, SegundoPipe -1 ) );
                         8: serie       := trim( copy( linea, 1, SegundoPipe -1 ) );
                         end; {Case}
                         Linea := Copy(Linea, SegundoPipe +1, 100)                 ;
                      end; // For
                    //except
                      //showmessage('Trono');
                    //end;
                    Opcion := ' ' ;
                    Tipo   := 'p' ;
                 end
                 else if Productos then begin
                    For A := 1 to 6 do begin
                        SegundoPipe := pos( '|', linea )                         ;
                        case a of
                        // No. de Parte
                        1: Noparte   := Trim(copy( linea, 1, SegundoPipe -1 ))   ;
                        // PL
                        2: PL        := Trim(copy( linea, 1, SegundoPipe -1 ))   ;
                        // Opcion
                        3: Opcion    := Trim(copy( linea, 1, SegundoPipe -1 ))   ;
                        // Fraccion
                        4: Begin
                           FracStr   := Trim(copy( linea, 1, SegundoPipe -1 ))   ;
                           Fraccion  := 0                                        ;
                           If (FracStr <> 'N/E') and (Trim(FracStr) <> '') Then
                              Fraccion  := StrToInt( FracStr )                   ;
                           End; {4}
                        // Descripcion
                        5: Descripcion:= trim( copy( linea, 1, SegundoPipe -1 ) );
                        // Serializado
                        6: serie      := trim( copy( linea, 1, SegundoPipe -1 ) );
                        end; {Case}
                        Linea := Copy(Linea, SegundoPipe + 1, 100)               ;
                    end; {For}
                    // Tipo
                    Tipo    := 'P';
                 end; // if productos

Última edición por jachguate fecha: 08-11-2005 a las 18:43:56. Razón: Explicacion mas amplia (jachguate:etiqueta delphi)
Responder Con Cita
  #2  
Antiguo 08-11-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues 16 horas es un tiempo inadmisible, creo que habría que mirar otras posibilidades, pero tendrás que dar más datos, si el archivo es de tipo texto, se tardaría menos leyendo todos los registros y excluyendo directamente aquellos que no sean de HP, por ejemplo utilizando una Stringlist y luego pasarlos a la tabla.....

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 08-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Eso!!!, explicaciones detalladas
Responder Con Cita
  #4  
Antiguo 08-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Puedes poner el código que estás utilizando actualmente para recorrer el fichero y realizar las busquedas e inserciones?

¿Cual es la Base de Datos de destino?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 08-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Las 16 horas será porque está extrayendo a mano (cortando y pegando) los clientes del archivo, porque de otra forma es imposible.

Recuerda comentar, las tablas, campos, modo de acceso (bde, ado, ...) y la BBDD que usas.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 08-11-2005
Luis Alberto Luis Alberto is offline
Miembro
 
Registrado: ago 2005
Posts: 149
Poder: 19
Luis Alberto Va por buen camino
Para que me sirve ese componente
Responder Con Cita
  #7  
Antiguo 08-11-2005
Luis Alberto Luis Alberto is offline
Miembro
 
Registrado: ago 2005
Posts: 149
Poder: 19
Luis Alberto Va por buen camino
Ya lo puse el codigo asi te sierve o que mas necesitarias para dyudarme?
Responder Con Cita
  #8  
Antiguo 08-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola Luis Alberto.

Quiero cometnar que en estos foros, normalmente no se edita el mensaje para cambiar su contenido (por ejemplo, agregando el código, como lo has hecho esta vez). Si alguien pide el código, lo usual es ponerlo en un nuevo mensaje (en el mismo hilo) como este último que has escrito.

Esto favorece el que se entienda el desarrollo de los hilos para quienes no hemos participado en ellos y quienes lo encuentren en la búsqueda dentro de algunos años , pues al ver a Neftalí pedir el código en el mensaje #4, te desubica si ya has visto el código en el mensaje #1.

Luego, he editado tu mensaje para encerrar el código en la etiqueta [delphi], pues de la forma que lo has pegado resulta ilegible. Mas información sobre las etiquetas en los mensajes fijados al inicio de cada foro.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 08-11-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por Luis Alberto
Ya lo puse el codigo asi te sierve o que mas necesitarias para dyudarme?
Trata de usar la etiquetas code (y le cambias la palabra code por delphi) para que el código sea mas legible y así poder comprender mas el problema y así tendrás más posibilidades de ayuda .

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #10  
Antiguo 08-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Sobre tu problema... 100,000 registros debieran procesarse en cuestión de minutos. Para detectar cual es el cuello de botella, cronómetro en mano, revisá cuanto tiempo está tomando cada parte del proceso: Suponiendo que el comportamiento es líneal, está tomando mas o menos 0.5 segundos por registro.

digamos que el código:

Código Delphi [-]
while not finarchivo do
begin
  LeeLinea;
  InsertaRegistro;
end;

podemos cambiarlo por:

Código Delphi [-]
var
  t1, t2, t3 : TDateTime;
while not finarchivo do
begin
  t1 := now;
  LeeLinea;
  t2 := now;
  InsertaRegistro;
  t3 := now;
  memo1.lines.add(
    'tiempo lectura: %d ms.'#9 
    'tiempo insercion: %d', [
      trunc((t2 - t1) * 1000),
      trunc((t3 - t2) * 1000)]);
end;

Eso nos dará una idea de que está tardando. Estoy convencido que en tu caso, es la búsqueda del registro la que demora mucho tiempo... quizas el query (qparte) sea ineficiente.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 08-11-2005
Luis Alberto Luis Alberto is offline
Miembro
 
Registrado: ago 2005
Posts: 149
Poder: 19
Luis Alberto Va por buen camino
Gracias por todos sus comentarios la verdad no he entrado mucho a los foros yu no entiendo mucho como se an podido dar cuenta....
Responder Con Cita
  #12  
Antiguo 08-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por Luis Alberto
no entiendo mucho como se an podido dar cuenta....
¿cómo nos hemos podido dar cuenta de que?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #13  
Antiguo 08-11-2005
Luis Alberto Luis Alberto is offline
Miembro
 
Registrado: ago 2005
Posts: 149
Poder: 19
Luis Alberto Va por buen camino
Que casi no entroa foros y no se si hago las cosas bien en los foros...
Responder Con Cita
  #14  
Antiguo 08-11-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por Luis Alberto
Que casi no entroa foros y no se si hago las cosas bien en los foros...
Entendido, por eso es que casi siempre hacemos énfasis en lean esto:
(Not) Guía de Estilo, Etiquetas vB:=Delphi-SQL
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #15  
Antiguo 09-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
La "cara" de vtdeleon lo expresa todo... , en fin, eso, la guía de estilo...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:49:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi