Ver Mensaje Individual
  #1  
Antiguo 07-11-2005
Luis Alberto Luis Alberto is offline
Miembro
 
Registrado: ago 2005
Posts: 149
Reputación: 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