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

 
 
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
 



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 16:06:01.


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