Gracias, ahora te entendí. Lo pruebo

El 22/04/2010 11:46, Jose Paez escribió:
Hola Rafael

Esta configuración reduce el trafico de lectura/escritura por la red (evitando generar los temporales en el disco del servidor), por ende tendrias mejor performance en el servidor para las actualizaciones de datos. (No es que evite la rotura de los indices, pero si disminuira las demoras en la red cuando guardes datos) .

Fijate en las propiedades del disco --> Hardware --> Propiedades --> Directivas --> Habilitar Cache de Escritura

Saludos

José Paez




------------------------------------------------------------------------
Date: Thu, 22 Apr 2010 09:25:39 -0300
From: [email protected]
To: [email protected]
Subject: [GUFA] campos autoincrementales y tableupdate

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] <mailto:[email protected]>
    To: [email protected] <mailto:[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




    ------------------------------------------------------------------------


------------------------------------------------------------------------

Responder a