Acceso compartido en red

Estoy modificando mi aplicación que antes era monopuesto para que sea multipuesto. Tengo la BD en un servidor y la aplicación instalada en las pcs de los diferentes usuarios que la van a utilizar. Cualquier usuario pueden conectar a la BD. Añadir, guardar, modificar, etc pero de forma independiente. Cuando hay varios suuarios conectados y coinciden en añadir o modificar un registro de una tabla, me aparece el error"Código de indice violado". Desearía, si fueses tan amable de enviarme algún ejemplo para poder realizar estas operaciones sin problemas.
La BD esta abierta en modo compartido, las tablas lo mismo. Para añadir un nuevo registro utilizo APPEND BLANK, al guardar, REPLACE. Para trabajar con las tablas CURSORSETPROP y al actualizar la tabla después del replace TABLEUPDATE.
Te agradecería el envío de un ejemplo que me servirá como guía. Mi correo es: [email protected]
Un cordial saludo
1

1 respuesta

Respuesta
1
El método Buffering 3 como estas haciendo no es muy practico para programación en modo compartido, el mensaje de error no es tu culpa, este mensaje le da fox al usuario, si no quieres puedes hacerlo tu mismo, lo que debes hacer es antes de dar el tableupdate() buscas primero y si ya existe le adversis al usuario y le dices que debe ingresar un dato más, o vos mismo le sumas un valor, el control se hace antes del tableupdate() siempre, eso creo que es lo único que te falta para que no salga el mensaje.
El problema que surge es que mi tabla libros tiene clave principal autonomerica. Cuando inserto un nuevo registro y en el botón guardar sucede los siguiente:
SELECT libros
if namecaption = "I"
GO BOTTOM
STORE cod_registro+1 TO Rcodregistro
ELSE
GO nfila
ENDIF
IF namecaption <> "E"
IF !EMPTY(Rtitulo)&&si Rtitulo no esta vacia
=CURSORSETPROP("buffering",3,"libros")
IF namecaption="I"
APPEND BLANK
replace cod_registro WITH Rcodregistro
replace titulo WITH Rtitulo
ENDIF
&&RECALL
=TABLEUPDATE(2,.f.,"libros")&&confirmamos los datos a guardar
MESSAGEBOX("Registro Se ha Guardado", 0+64,"Información")
Endif
Hasta alli todo bien, entonces sucede que si dos usuarios estan guardando a la vez, por ejemplo al usuario 1 el cod_registro=22 y para el usuario 2 el cod_registro tambien es =22. Cuando visual foxpro guarda allí es donde se produce el error, ya que se supone que al ser clave principal no puede estar duplicada. Mi pregunta es, ¿cómo puedo hacer para soluionar esto?
Te agradecería tu ayuda.
Buenos días Experto:
He modificado tal y como me dices, cuando realizo una búsqueda para comprobar si existe el código duplicado, si no lo encunentra al momento de realizar la actualización me guarda el codregistro con un valor =0
Poer favor, si eres tan amable, puedes modificar el código que pase anteriormente.
Te lo voy a agardecer.
Un saludo
te guarda sero por que una busqueda sin éxito queda en EOF(), entonces no puedes guardar datos asi, buscar el dato, por ej
locate for dato=x
if found()
ya existe
else
      append blank
      replace campo with dato
Endif
No puedo sugerirte un código si no veo como ha quedado desde la ultima modificación. La clave esta
Primero obtener el ultimo valor, tu haces con GO BOTTOM y le sumas 1, luego hay que buscar, yo hice con locate, puedes hacer seek si tienes indices que es mucho más rapido, luego pones el pedazo que expuse.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas