Problema con Acceso exclusivo a un registro mediante ADO

24/09/2004 - 03:51 por nadura | Informe spam
Hola a Todos.
Esta consulta parte de una cuestión ya planteada con
anterioridad a la cual dieron respuesta mediante
transacciones, en cambio deseo contar con vuestra opinión
para realizarlo mediante utilización de código y empleo de
ADO tal y como planteé inicialmente.

Gracias de antemano!

Descripción del Problema:
Se dispone de un Proyecto adp (Base de datos Servidor)con
una tabla de Clientes con dos campos: C_CLIENTE y
N_CLIENTE, código del Cliente y Nombre del cliente
respectivamente, a la cual se conectan otros dos usuarios
distintos (Base de Datos mdb), cada uno desde sus
respectivos equipos desde un formulario de acceso.

El problema se plantea cuando ambos, al mismo tiempo
acceden al registro 1 (por ejemplo)de la tabla clientes en
la Base de Datos Servidor para modificar su nombre,
mediante el siguiente código (Formulario de acceso a la
base de datos servidor):

-
Private Sub Command0_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strText As String
Dim strConn As String
Dim iClienteValorCambiado As String
On Error GoTo err_ADO:
iClienteValorCambiado = InputBox("Introduzca el Valor
nuevo para el registro especificado:")
If Len(iClienteValorCambiado) = 0 Then
Exit Sub
End If

strConn = "Provider=SQLOLEDB.1;Integrated
Security=SSPI;Persist Security Info=False;Initial
Catalog=Base de Datos Servidor ADO SQL Server;Data
Source=WINDOWSXP"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

cn.Open strConn
rs.Open "Select * from [Tabla de Clientes] WHERE
[C_CLIENTE] like '1'", cn, adOpenStatic, adLockPessimistic
Do Until rs.EOF (2)
rs.Fields("N_CLIENTE").Value =
iClienteValorCambiado
MsgBox iClienteValorCambiado (1)
rs.MoveNext
Loop
rs.Close
cn.Close

Exit Sub

err_ADO:

MsgBox "Error: " & Err.Description
Resume

End Sub


Si uno de los usuarios Cliente accede al registro 1, para
modificarlo (encontrandose en la línea de instrucción
(1)), y de manera simultánea el otro usuario ejecuta la
instrucción (2),este se bloquea, no permitiendo su
modificación, hasta que el primer usuario desbloquea dicho
registro.

Pregunta: porqué razón al utilizar un proyecto adp (base
de Datos servidor), para su acceso desde otras bases de
Datos Cliente, en el momento en el que el registro es
bloqueado por uno de ellos mediante el código expuesto, el
otro intenta acceder, quedando bloqueado (Línea de código
(2), hasta que el otro usuario desbloquea el registro) sin
pasar el control a la etiqueta: err_ADO.

Nota importante: Si empleo el mismo código expuesto para
una Base de Datos Servidor(mdb)modificando el strConn, el
bloqueo funciona perfectamente, ya que si uno de los
usuarios bloquea el registro, el otro permanece bloqueado,
pasando el control a la etiqueta: err_ADO, para volver a
intentar realizar el bloqueo.

Otras Cuestiones:

¿El hecho de que no funcione en el proyecto adp es debido
a alguna cuestión no tenida en cuenta?

¿Qué cambios tendría que realizar en el código antes
expuesto para que un usuario pueda realizar un bloqueo de
toda la tabla, para insertar, consultar, modificar o
eliminar sus datos, impidiendo a los demás usuarios
accceder a ésta, hasta que realice el desbloqueo?
 

Leer las respuestas

#1 MAXI
24/09/2004 - 05:48 | Informe spam
Hola, esta pregunta es para el news de Access y no el de SQL :(, ya que el
problema es de la herramienta cliente y no del SQLserver ;-)




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:

"" escribió en el
mensaje news:12e101c4a1d9$0ac71190$
Hola a Todos.
Esta consulta parte de una cuestión ya planteada con
anterioridad a la cual dieron respuesta mediante
transacciones, en cambio deseo contar con vuestra opinión
para realizarlo mediante utilización de código y empleo de
ADO tal y como planteé inicialmente.

Gracias de antemano!

Descripción del Problema:
Se dispone de un Proyecto adp (Base de datos Servidor)con
una tabla de Clientes con dos campos: C_CLIENTE y
N_CLIENTE, código del Cliente y Nombre del cliente
respectivamente, a la cual se conectan otros dos usuarios
distintos (Base de Datos mdb), cada uno desde sus
respectivos equipos desde un formulario de acceso.

El problema se plantea cuando ambos, al mismo tiempo
acceden al registro 1 (por ejemplo)de la tabla clientes en
la Base de Datos Servidor para modificar su nombre,
mediante el siguiente código (Formulario de acceso a la
base de datos servidor):

-
Private Sub Command0_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strText As String
Dim strConn As String
Dim iClienteValorCambiado As String
On Error GoTo err_ADO:
iClienteValorCambiado = InputBox("Introduzca el Valor
nuevo para el registro especificado:")
If Len(iClienteValorCambiado) = 0 Then
Exit Sub
End If

strConn = "Provider=SQLOLEDB.1;Integrated
Security=SSPI;Persist Security Info=False;Initial
Catalog=Base de Datos Servidor ADO SQL Server;Data
Source=WINDOWSXP"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

cn.Open strConn
rs.Open "Select * from [Tabla de Clientes] WHERE
[C_CLIENTE] like '1'", cn, adOpenStatic, adLockPessimistic
Do Until rs.EOF (2)
rs.Fields("N_CLIENTE").Value iClienteValorCambiado
MsgBox iClienteValorCambiado (1)
rs.MoveNext
Loop
rs.Close
cn.Close

Exit Sub

err_ADO:

MsgBox "Error: " & Err.Description
Resume

End Sub


Si uno de los usuarios Cliente accede al registro 1, para
modificarlo (encontrandose en la línea de instrucción
(1)), y de manera simultánea el otro usuario ejecuta la
instrucción (2),este se bloquea, no permitiendo su
modificación, hasta que el primer usuario desbloquea dicho
registro.

Pregunta: porqué razón al utilizar un proyecto adp (base
de Datos servidor), para su acceso desde otras bases de
Datos Cliente, en el momento en el que el registro es
bloqueado por uno de ellos mediante el código expuesto, el
otro intenta acceder, quedando bloqueado (Línea de código
(2), hasta que el otro usuario desbloquea el registro) sin
pasar el control a la etiqueta: err_ADO.

Nota importante: Si empleo el mismo código expuesto para
una Base de Datos Servidor(mdb)modificando el strConn, el
bloqueo funciona perfectamente, ya que si uno de los
usuarios bloquea el registro, el otro permanece bloqueado,
pasando el control a la etiqueta: err_ADO, para volver a
intentar realizar el bloqueo.

Otras Cuestiones:

¿El hecho de que no funcione en el proyecto adp es debido
a alguna cuestión no tenida en cuenta?

¿Qué cambios tendría que realizar en el código antes
expuesto para que un usuario pueda realizar un bloqueo de
toda la tabla, para insertar, consultar, modificar o
eliminar sus datos, impidiendo a los demás usuarios
accceder a ésta, hasta que realice el desbloqueo?

Preguntas similares