• Sábado 21 de Diciembre de 2024, 09:48

Autor Tema:  programa en red-inconsistencias  (Leído 2363 veces)

mebernal

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
programa en red-inconsistencias
« en: Lunes 26 de Octubre de 2009, 23:41 »
0
Buenas tardes,les envio un nuevo problema que tengo:
tengo un programita en red sucede que 2 usuarios utilizan el sistema en red y ambos realizan tareas con las mismas tablas,los formularios que utilizan son maestro detalle,pero hay ocasiones (no siempre)que al crear un nuevo registro por el usuario(a),en el detalle le aparece informacion que ha ingresado en un registro el usuario(b),... no se si me explico

sino me doy a entender..diganme y les envio copia del codigo que utilizo en el form o de plano el sistemita..

gracias de antemano

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: programa en red-inconsistencias
« Respuesta #1 en: Jueves 29 de Octubre de 2009, 15:40 »
0
Bueno no posteaste el codigo pero estoy casi seguro que tu problema se da cuando ambos usuarios graban los datos simultaneamente y obtienen el mismo numero de comprobante, postea tu codigo para poder verificar y o tratar de ayudarte.

De todos modos te recomiendo bloquear la tabla y no el registro al momento de obtener el nro de comprobante.

mebernal

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: programa en red-inconsistencias
« Respuesta #2 en: Viernes 30 de Octubre de 2009, 18:02 »
0
bueno te voy a adjuntar mi sistemita xodorf,esta algo primitivo,pero bueno alli vamos aprendiendo....mira te mando la direccion donde esta un archivo zipeado del programita  www.transportesvelmont.com.sv/pier2.rar

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: programa en red-inconsistencias
« Respuesta #3 en: Sábado 31 de Octubre de 2009, 01:58 »
0
Caramba me sorprendiste desprevenido bueno te cuento que debo dar un repaso al tema de buffers y sobre todo a la clase Picbtns1.addRec() que llama a otro formulario que pregunta algo como Agregar registro al encabezado o detalle o ambos,  que es la responsable del problema suponiendo que el problema esta en los formularios de facturacion CCF Y CCF1 y que las tablas en las que se agregan registro son ccf.dbf y ccfdet.dbf. bueno te digo como deberia funcionar mientras para que trates de asimilarlo y por alli vayas pensando en alguna solucicion mientras yo estudio el codigo, al momento de agregar un registro suponiendo que idccf debe ser autoincremental y exclusivo y cuyo indice activo sea idccf (o sea que debe ser autonumerico y no debe coincidir con ninguno nro nuevo que otro usuario pueda agregar simultaneamente) el primer paso debe ser bloquear el fichero contra escritura con FLOCK() asi nos aseguramos que en este momento solo un usuario puede escribir en la tabla ccf.dbf vamos al final del fichero con GO BOTTOM y obtenemos el ultimo idccf+1 que el siguiente identificador valido,  insertamos el registro y los datos correspondiente como idcliente, nombre etc  y luego liberamos el bloqueo sobre la tabla con UNLOCK a estas alturas ya tienes un nro valido de idccf y seguro que no coincide con uno nuevo que un usuario simultaneo pueda estar generando, posteriormente a esto debes seguir con el llenado de datos en ccfdet.dbf que no tiene ninguna relevancia a este caso.
Ahora tu gran problema es que trabajas con buffers y francamente ahora no tengo idea de como puedes solucionar este problema manteniendo asi como esta, salvo agregar una tabla ccfheader.dbf en la que tengas una lista de todos los idccf que vayas generando y no lo abras con buffers de modo a usar esta para obtener idccf en lugar de ccf.dbf espero haberme explicado si no mi correo empieza por xodrf y mi proveedor de correo es hotmail o sea @hotmail.com

Pd: Logre reproducir la falla haciendo lo siguiente lanza dos veces el programa (EXE) ingresa a la pantalla ccf agrega un nuevo registro (ambos) mete idccf 201, ve la la segunda instancia e ingresa a ccf agrega un nuevo registro (ambos) mete idccf 201 y graba ambas instancias veras como te duplica los registros con idccf 201 en ambas tablas ccf.dbf y ccfdet.dbf que es donde ocurre la combinacion de registros de ambos usuarios, debes tratar de obtener el idccf de manera automatica y no pidiendo al usuario que es como te sugeri arriba, mediante algo asi:

*//   BUSCANDO UN NUEVO IDCCF EXCLUSIVO
SELECT CCF
GO BOTTOM
DO WHILE !FLOCK()
       MESSAGEBOX( [ESPERANDO EL DESBLOQUEO DEL FICHERO CCF.DBF], 16, [FLOCK] )
ENDDO
_idccf=IDCCF+1
INSERT INTO CCF (IDCCF,...) VALUES (_idccf,...)
UNLOCK
*// ARCHIVO LIBERADO, OTROS USUARIOS AHORA PUEDEN GRABAR EN EL