PDA

Ver la Versión Completa : Error con la conexión a la BBDD


david.rguez
12-07-2007, 19:01:49
Hola a todos/as:

Utilizamos Borland Delphi 2005 y SQL Server y tenemos un problema cuando hay más de un usuario manejando una misma aplicación.

Sucede en el momento siguiente:

- El usuario A utiliza un ADO para efectuar una serie de inserciones. Deja el ADO abierto porque en el siguiente momento va a introducir más. Está grabando registros para un determinado cliente: 01

- El usuario B accede a la misma pantalla y realiza una inserción por su cuenta. Está grabando registros para el cliente 02.

- El usuario A intenta grabar uno nuevo en su pantalla para el cliente 01 y obtiene el mensaje "No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó".



Hemos intentado de todo: probar distintas combinaciones de cursores y no hemos logrado nada.

¿Alguien sabría darnos una pista?

Gracias.

marcoszorrilla
12-07-2007, 19:25:36
Por si acaso resulta puedes hacer la prueba haciendo un Requery despues de cada inserción.

Creo recordar que esto ya pasaba con D5, ADO y Delphi, en algunos casos se solucionaba actualizando las MDAC.

(se sobreentiende que tienes una clave primaria definida en dicha tabla, pues este era otro caso para que diera este fallo ya que el cursor no lograba resposicionarse por este motivo)

Un Saludo.

david.rguez
13-07-2007, 09:21:09
La última versión del MDAC es la 2.82 ¿no? Si es así, ya estaba actualizada.

Pd: Hemos probado el Requery pero nos sigue dando el problema :(

Neftali [Germán.Estévez]
13-07-2007, 10:10:52
¿Estáis usando tablas o consultas?
Yo creo que lo que estas describiendo aquí es un típico problema de bloqueos; Lo que hay que saber en estas situaciones es, qué deseáis que pase.

Una solución es utilizar SQL para hacer los INSERT o UPDATE, en lugar de mantener "el ADO abierto".
Otra solución es utilizar las propiedades de bloqueo de los componentes ADO.
Deberías leer también algo de transacciones, tanto de SQL server como de ADO.