ADO : Entorno Multiusuario, Ayuda (Solucionado)
Posted: Fri Sep 14, 2007 4:57 am
Un saludo a todos los colegas del Foro
Estoy largo rato intentando encontrar la solución a este problema y me doy por vencido.
He implementado un BROWSE en el cual se dan las típicas opciones de Modificar, Adicionar y Eliminar Registros, usando los métodos del objeto Recordset de ADO. Funciona Muy bien cuando se trabaja con una sola estación (estacion1); pero cuando desde estacion2 se realiza algún cambio, adición o eliminación, estos no se reflejan en el Browse de estacion1. Entonces si por ejemploi el usuario de estacion1 trata de eliminar lo que estacion2 ya eliminó se produce el consiguiente error devuelto por el proveedor OLEDB.
La localización del Cursor está definido del lado del cliente
oRs:CursorLocation = adUseClient
El Objeto se abre usando estos parámetros
oRs:Open( cQuery , cConnection, adOpenKeyset, adLockOptimistic )
incluso he probado usando adOpenDynamic, que según los manuales permiten ver todo tipo de cambios de otros usuarios, pero nada.
He tratado de probar usando las propiedades OriginalValue y UnderlyingValue (valor que tiene en la base de datos) pero los valores que se obtiene son los mismos que tiene el recordset en ese momento, no permitiéndome controlar el valor actual en la base de datos y el valor actual en el recordset local.
Cómo podría refrescar el BROWSE de estacion1 con los _ ocurridos en El Servidor de Base de Datos y que lo realizó estacion2?
Pienso que si uso Requery() cada momento que me muevo por cada elemento del Browse, en una tabla grande y en internet se volvería muy lenta y el moverme sería un caos, porque en el requery se recargan los datos y el cursor siempre va a la ultima fila.
Una opción que se me ocurre es capturar los mensajes de error del proveedor OLEDB y en base a estos actuar recargando los nuevos datos. Pero esta parte es la que no se como hacerlo aún. Cómo hago con Harbour para capturar los errores de ADO?
Espero que alguien pueda darme alguna pista o si ya lo tiene resuelto me indique cómo controlar _.
Desde ya muy agradecido
Marcelo Jingo
Estoy largo rato intentando encontrar la solución a este problema y me doy por vencido.
He implementado un BROWSE en el cual se dan las típicas opciones de Modificar, Adicionar y Eliminar Registros, usando los métodos del objeto Recordset de ADO. Funciona Muy bien cuando se trabaja con una sola estación (estacion1); pero cuando desde estacion2 se realiza algún cambio, adición o eliminación, estos no se reflejan en el Browse de estacion1. Entonces si por ejemploi el usuario de estacion1 trata de eliminar lo que estacion2 ya eliminó se produce el consiguiente error devuelto por el proveedor OLEDB.
La localización del Cursor está definido del lado del cliente
oRs:CursorLocation = adUseClient
El Objeto se abre usando estos parámetros
oRs:Open( cQuery , cConnection, adOpenKeyset, adLockOptimistic )
incluso he probado usando adOpenDynamic, que según los manuales permiten ver todo tipo de cambios de otros usuarios, pero nada.
He tratado de probar usando las propiedades OriginalValue y UnderlyingValue (valor que tiene en la base de datos) pero los valores que se obtiene son los mismos que tiene el recordset en ese momento, no permitiéndome controlar el valor actual en la base de datos y el valor actual en el recordset local.
Cómo podría refrescar el BROWSE de estacion1 con los _ ocurridos en El Servidor de Base de Datos y que lo realizó estacion2?
Pienso que si uso Requery() cada momento que me muevo por cada elemento del Browse, en una tabla grande y en internet se volvería muy lenta y el moverme sería un caos, porque en el requery se recargan los datos y el cursor siempre va a la ultima fila.
Una opción que se me ocurre es capturar los mensajes de error del proveedor OLEDB y en base a estos actuar recargando los nuevos datos. Pero esta parte es la que no se como hacerlo aún. Cómo hago con Harbour para capturar los errores de ADO?
Espero que alguien pueda darme alguna pista o si ya lo tiene resuelto me indique cómo controlar _.
Desde ya muy agradecido
Marcelo Jingo