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;
Readln( archivo, linea );
if ( pos( '|', linea ) > 0 ) then begin
if Partes then begin
for A := 1 to 8 do begin
SegundoPipe := pos( '|', linea ) ;
case a of
1: Noparte :=Trim(copy( linea, 1, SegundoPipe -1 )) ;
2: PL :=Trim(copy( linea, 1, SegundoPipe -1 )) ;
3:
Begin
FracStr := copy( linea, 1, SegundoPipe -1 ) ;
Fraccion := 0 ;
If (FracStr <> 'N/E') and (Trim(FracStr) <> '') Then
Fraccion := StrToInt( FracStr ) ;
End;
5: Descripcion := trim( copy( linea, 1, SegundoPipe -1 ) );
8: serie := trim( copy( linea, 1, SegundoPipe -1 ) );
end;
Linea := Copy(Linea, SegundoPipe +1, 100) ;
end; Opcion := ' ' ;
Tipo := 'p' ;
end
else if Productos then begin
For A := 1 to 6 do begin
SegundoPipe := pos( '|', linea ) ;
case a of
1: Noparte := Trim(copy( linea, 1, SegundoPipe -1 )) ;
2: PL := Trim(copy( linea, 1, SegundoPipe -1 )) ;
3: Opcion := Trim(copy( linea, 1, SegundoPipe -1 )) ;
4: Begin
FracStr := Trim(copy( linea, 1, SegundoPipe -1 )) ;
Fraccion := 0 ;
If (FracStr <> 'N/E') and (Trim(FracStr) <> '') Then
Fraccion := StrToInt( FracStr ) ;
End;
5: Descripcion:= trim( copy( linea, 1, SegundoPipe -1 ) );
6: serie := trim( copy( linea, 1, SegundoPipe -1 ) );
end;
Linea := Copy(Linea, SegundoPipe + 1, 100) ;
end;
Tipo := 'P';
end;