Error 3251 - Recordset en Red

Iniciado por MandingoPC, 27 Abril 2012, 16:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

MandingoPC

Error 3251

El recorset actual no admite actualizaciones, puede ser una limtiacion del proveedor o del tipo de bloqueo seleccionado.

Resulta que quiero usar el mismo programa con la misma base de datos bajo una red, y modificar la base de datos desde 2 pcs bajo la misma red, entonces me tira ese error. Tiene solución? o ya habría que usar algo mas sofisticado que el ADO?

HdM

Buenas.

O estás abriendo el recordset en modo de sólo lectura, o bien la consulta que cargas en el recordset no permite actualizar la bd.

Saludos.

- Nice to see you again -

MandingoPC

Hola gracias por responder. Mira con esto abro la base de datos en el modulo:

Public cn As ADODB.Connection


Public Function Conectar() As Boolean
Conectar = False
Dim strcon As String
        strcon = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
        "Data source =" & App.Path & "\Base.mdb" ' Mi dirección personal de mi base de datos
        On Error GoTo xd
        Set cn = New ADODB.Connection
        cn.Open strcon
       Conectar = True
        Exit Function
xd:         MsgBox "Conexión fallida.", vbCritical, "CRITICAL ERROR FATAL"
End
End Function

Y con esto escribo cada vez que quiero actualizarla:

----------------------------------------------

    Dim rs As ADODB.Recordset
        If Not Conectar() Then Exit Sub
        Set rs = New ADODB.Recordset

                    rs.AddNew
            rs!codigo = txtCod
            rs.Close
            Set rs = Nothing
            Desconectar


Si en una PC esta abierta la base de datos, y simultaneamente en la otar quiero escribir en la misma base, me tira el error arriba mencionado.

HdM

Buenas.

¿Podrías poner la parte de código que omites? Es decir, lo que te comenté en un principio: la apertura del recordset y la consulta a la bd con la que montas el recordset. Además de ese code que veo que falta, no estás haciendo un update, cierras  el rs directamente.

Un saludo.

- Nice to see you again -

MandingoPC

Modulo:


Public CNN As New ADODB.Connection
Public RST As New ADODB.Recordset
Public PRV As String, SQL1 As Variant

Function asg()
PRV = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      App.Path & "\Base.mdb" & ";Persist Security Info=False"
End Function
Function opDB()

    If CNN.State = 0 Then
    CNN.Open PRV
    End If
End Function

Function openRS()

    If CNN.State = 1 Then
    RST.Open SQL1, CNN, adOpenStatic
    End If
End Function
Function cerrar()
    If CNN.State = 1 Then
    CNN.Close
    End If
End Function


Otro modulo:

Public cn As ADODB.Connection


Public Function Conectar() As Boolean
Conectar = False
Dim strcon As String
        strcon = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
        "Data source =" & App.Path & "\Base.mdb" ' Mi dirección personal de mi base de datos
        On Error GoTo xd
        Set cn = New ADODB.Connection
        cn.Open strcon
       Conectar = True
        Exit Function
xd:         MsgBox "Conexión fallida.", vbCritical, "CRITICAL ERROR FATAL"
End
End Function

Public Sub Desconectar()
On Error Resume Next
cn.Close
End Sub



Formulario:


Dim rs As ADODB.Recordset
    If Not Conectar() Then Exit Sub
    Set rs = New ADODB.Recordset
    rs.Open ("Articulos"), cn, adOpenKeyset, adLockOptimistic
    rs.AddNew
    'Base de datos / programa
    rs!Codigo = txtcod
  rs.Update
    rs.Close
    Set rs = Nothing

s00rk

Pues es que no es posible es como desear abrir 2 veces el mismo archivo y modificar uno y el otro y que se guarden los cambios.

Para lograr esto ocupas que para cada cosa que desees hacer abra la conexion, hacer lo que deseas y al final cerrar la conexion, para asi este libre para luego si la otra PC quiere acceder a la DB lo logre y no obtenga ese error.

Bueno creo que esto podria ser no estoy 100% seguro ya que nunca he trabajado con un BD de ese tipo.

HdM

Buenas.

@s00rk, las BBDD deben permitir accesos concurrentes a los datos, y las ediciones de los mismos se controlan mediante bloqueos a nivel de registro o bien a nivel de bloque de registros (depende del SGBD) y eso se puede interceptar y controlar en el código de la app, para que ésta no pete.

@MandingoPC, en el otro equipo donde abres la bd, no lo estarás haciendo en modo exclusivo, ¿no?

Prueba a abrir el rs, en vez de con "adOpenKeyset", con "adOpenDynamic".

Saludos.

- Nice to see you again -

BlackZeroX

Para acceder a una BDD por red tendrás que migrar a otro sistema tu BDD, access no es viable para estos casos... para modificar tu BDD solo necesitas una conexión via ODBC.

Dulces Lunas!¡.
The Dark Shadow is my passion.

HdM

Buenas.

Cita de: BlackZeroX (Astaroth) en  7 Mayo 2012, 18:49 PM
Para acceder a una BDD por red tendrás que migrar a otro sistema tu BDD, access no es viable para estos casos... para modificar tu BDD solo necesitas una conexión via ODBC.

Permíteme que discrepe con eso que dices. Una bd en Access no es la mejor elección ni mucho menos para utilizar en un entorno de red, eso está claro. Pero de ahí a que no se pueda utilizar en red, va un mundo.

Saludos.

- Nice to see you again -

BlackZeroX

#9
Cita de: BlackZeroX (Astaroth) en  7 Mayo 2012, 18:49 PM
access no es viable para estos casos...

Jamas dije que NO se puede, hay que aprender a leer!¡.

Dulces Lunas!¡.
The Dark Shadow is my passion.