Gracias José
Explicame un poco más. ¿qué tiene que ver eso de los tmpfiles con la
corrupción del índice en el servidor?
¿Y cómo deshabilito el caché de escritura en los discos? ¿Vos te referís
a cada una de las terminales o al servidor?
Rafael Copquin
El 21/04/2010 21:35, Jose Paez escribió:
Hola Rafael
Algunas ideas:
- Deshabilita los cache de escritura de los discos
- Configura en el Panel de Control --> Opciones de Energia --> Siempre
encendida
- En el config.fpw configura TMPFILES, PROGWORK a una carpeta que debe
existir en todas las terminales ej: C:\Temp
Saludos
José Paez
------------------------------------------------------------------------
Date: Wed, 21 Apr 2010 18:26:26 -0300
From: [email protected]
To: [email protected]
Subject: [GUFA] campos autoincrementales y tableupdate
Tengo una aplicación que maneja un laboratorio de cosmética.
Por requerimientos del ANMAT, es necesario que cada caja, frasco, etc.
lleve una etiqueta con el número de lote y otros datos que permitan el
rastreo de la fecha, hora, lote, orden de fabricación, etc.
Para eso, guardo todos los datos generados en una tabla, que _tiene un
campo autoincremental que es a la vez su clave primaria_.
Los datos están en un Windows Server 2003 y las terminales son todas
XP Profesional
En el load del formulario genero un cursor adapter vacio para la tabla
mencionada, con el siguiente select:
select * from tabladelotes where 1=0
La manera de grabación, dentro de una transacción, es la siguiente:
for I = 1 to nNumeroDeCajas
cNumeroDeLote = 'xxxxxx'+alltrim(str(I)) && no importa el
verdadero código del lote, sino que es secuencial como se ve aqui
insert into (cursoradapter) values( todos los campos + cNumeroDeLote)
endfor
tableupdate(.t.,.t.) && hago el tableupdate al final del loop
Una alternativa sería
for I = 1 to nNumeroDeCajas
cNumeroDeLote = 'xxxxxx'+alltrim(str(I))
insert into (cursoradapter) values( todos los campos + cNumeroDeLote)
tableupdate(1,.t.) && un tableupdate por cada registro
endfor
Al final de la transaccion hago un flush para vaciar los buffers a disco
Uso la primera opción.
Mi problema es que casi todos los días se corrompe el índice de esta
tabla. Revisé las conexiones, las tarjetas de red, excluí el
directorio completo de las tablas, con sus índices, en el antivirus
del server, en fin, todo lo que se me ocurrió.
Esta rutina es de grandes volúmenes, porque en una orden de
fabricación se pueden generar por ejemplo 1000 frascos de esmalte de
uñas y se hacen muchas órdenes por día.
Entonces, la duda que tengo es si, al mandar el tableupdate al final
del loop, haciendo que se graben de un saque todos los registros, dado
el gran número de ellos y a la vez el hecho de que se genera la clave
autoincremental, eso no estará haciendo que se corrompa el índice?
¿alguien tiene alguna idea?
Gracias anticipadas
Rafael Copquin
------------------------------------------------------------------------