Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

ADO - Error en la comprobación optimista de simultaneidad

Estas en el tema de ADO - Error en la comprobación optimista de simultaneidad en el foro de SQL Server en Foros del Web. Hola a todos. Recurro nuevamente a ustedes para preguntarles si a alguien le ha pasado y cómo lo ha solucionado. En algunas ocaciones, cuando invoco ...
  #1 (permalink)  
Antiguo 23/01/2006, 04:34
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
ADO - Error en la comprobación optimista de simultaneidad

Hola a todos.

Recurro nuevamente a ustedes para preguntarles si a alguien le ha pasado y cómo lo ha solucionado.
En algunas ocaciones, cuando invoco el evento "update" se genera el error:

Error en la comprobación optimista de simultaneidad. La fila ha sido modificada fuera de este cursor.


Código:
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.ActiveConnection = DSN
oRs.Source = "SELECT TOP 1 cpo1, cpo2 FROM tabla WHERE id = X" 
oRs.CursorType = 1
oRs.LockType = 3
oRs.Open
			  
If NOT oRs.EOF AND NOT oRs.BOF then
    oRs("cpo1") = "valor1"
    oRs("cpo2") = "valor2"
    oRs.Update
end if

oRs.Close(): Set oRs = Nothing

Muchas gracias.
  #2 (permalink)  
Antiguo 23/01/2006, 08:25
Avatar de Mplus  
Fecha de Ingreso: agosto-2003
Ubicación: colgando de un trebol
Mensajes: 157
Antigüedad: 20 años, 8 meses
Puntos: 0
No me ha pasado nunca, pero me temo que se debe a la manera en que abres el recordset para la consulta.

Revisa estas constantes..

oRs.CursorType = 1
oRs.LockType = 3

Tpco creo que este bien esta parte:

oRs.Close(): Set oRs = Nothing

deberia ser:

oRs.Close
Set oRs = Nothing
__________________
Daría todo lo que sé por la mitad de lo que ignoro
  #3 (permalink)  
Antiguo 23/01/2006, 11:41
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Muchas gracias por tu intención de ayudar.

Te comento que el valor 1 para la propiedad CursorType es adOpenKeyset.
Y el valor 3 para la propiedad LockType es adLockOptimistic.

También te comento que se utiliza los ":" (dos puntos) para poner en una sola línea, el código de dos ó mas líneas. No tiene ninguna ventaja ni desventaja de ponerlo separadas, solo sirve para que el código quede un poco mas claro.

El código funciona bien, solo que en algunas oportunidades genera el error que comenté en el mensaje anterior.
Se me ocurre que esto sucede en el momento que dos usuarios ó mas invocan el evento "Update" al mismo tiempo.


Gracias nuevamente.
  #4 (permalink)  
Antiguo 24/01/2006, 06:06
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Bueno, parece que nadie se ha encontrado con este problema.

Muchas gracias de todas formas.
  #5 (permalink)  
Antiguo 24/01/2006, 09:13
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años
Puntos: 4
que manejador de base de datos usas ?
Cual es el código de error exactamente que te genera ?
  #6 (permalink)  
Antiguo 24/01/2006, 11:19
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
La base de datos que utilizo es MS-SQL.

El error es:

Microsoft OLE DB Provider for ODBC Drivers.
[Microsoft][ODBC SQL Server Driver][SQL Server]Error en la comprobación optimista de simultaneidad. La fila ha sido modificada fuera de este cursor



Y la línea que genera el error es:

oRs.Update


Ahora que lo pienso bien, quizas esta pregunta la tendría que haber expuesto en el foro de SQL.
Estaría bueno que algun moderador la mueva.

Saludos.
  #7 (permalink)  
Antiguo 24/01/2006, 14:59
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Cambia al valor de LockType para que no sea Optimistic.

Ese error me sucedió en un componente sobre el cual use campos de tipo float/real (valores aproximados). La solución fue cambiar el LockType o cambiar el tipo Float por algo como el tipo decimal
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #8 (permalink)  
Antiguo 25/01/2006, 06:58
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Los tipo de datos que modifico son: SmallInt, Int y Date.

Con respecto al cambio de LockType ¿si utilizo adLockPessimistic, no me va a generar mas errores que los que me genera ahora cuando dos ó mas usuarios intenten acceder a la misma tabla al mismo tiempo?


Muchas gracias.
  #9 (permalink)  
Antiguo 25/01/2006, 15:31
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Probablemente, lee la socumentación de pros/contras de cada tipo de candado. De cualquier forma puedes hacer el cambio a nivel de pruebas y asegurar que por ahi va el error.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #10 (permalink)  
Antiguo 26/01/2006, 05:55
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Lo he resuelto utilizando un procedimiento almacenado.

Muchas gracias por todo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:37.