¿Access multiusuario?

Estoy desarrollando una aplicación con Visual Basic 5 y Access 97 bajo windows 98, pero tengo problemas con la concurrencia de usuarios cuando van a actualizar un numero de secuencia de una tabla, realmente Access es multiusuario, o es necesario programar esa parte y como hacerlo.

1 Respuesta

Respuesta
En principio no te suele dar problemas que varios usuarios accedan a la misma tabla al mismo tiempo, tendrás que ver si cuando la abres desde visual basic tienes alguna propiedad marcada de forma que te bloquee registros o algo así, puedes tener también una opción en access que pone que trabajas en modo exclusivo de forma que igual solo puedes trabajar tu, vas a herramientas/opciones/avanzadas y en la parte derecha hay un menu que pone algo de como trabajar "compartido/eclusivo" si tienes marcada exclusivo cuando abre uno la base de datos nadie puede trabajar con el.
Prueba las 2 cosas y ya me dirás
HOLA, disculpa que no haya contestado antes.
Te cuento que sigo con el problema, lo que hice fue atrapar el error de bloqueo y crear un "lazo" controlando con una variable booleana que activo o desactivo (true, false) cada vez que ocurre el error. Trato de actualizar dos tablas: SCMM_PARAMETROS que es de donde leo el numero de secuencia(numeroingreso), y SCMM_NOVEDADES donde grabo un registro cuya clave es: código de empresa+'NC'+numeroingreso+codigodecontrato. El error se presenta cuando dos usuarios al mismo tiempo están usando el programa, no me presenta ningún mensaje pero en la tabla SCMM_NOVEDADES no me graba el registro que crea uno de los 2 usuarios. DISCULPA que te moleste, pero te agradecería si revisas el código y me das alguna sugerencia...
Para abrir la base de datos uso:
Set vgoConeccion = OpenConnection("", dbDriverNoPrompt, False, "ODBC;DSN=SMC;pwd=""")
LA RUTINA PARA ACTUALIZAR ES LA SIGUIENTE:
Private Function ObtenerSecuenciaNC() AS STring
Dim sEmpresa AS STring
Dim vlsSql1 As String
Dim vlrConsulta As Recordset
Dim sw As Boolean
Dim ning As Long
On Error GoTo err_ObtenerSecuenciaDoc
ObtenerSecuenciaNc = 0
vlsSql1 = "Select par_secuencia As secuencia From SCMM_PARAMETROS"
vlsSql1 = vlsSql1 & " WHERE par_empresa = '" & sEmpresa & "'"
Set vlrConsulta = vgoConeccion.OpenRecordset(vlsSql1, dbOpenDynaset)
If Isnull(vlrConsulta.Fields(0)) Then
ning = 1
Else
ning = vlrConsulta.Fields(0) + 1
End if
vlrConsulta.Close
sw = True 'variable booleana que uso para el lazo
While sw
sw = False
'Actualizo la secuencia
vlsSql1 = "UPDATE SCMM_PARAMETROS SET par_secuencia = " & ning & ", par_fecha = cdate('" & TSol_Fecha_NC.Text & "') "
vlsSql1 = vlsSql1 & " WHERE par_empresa = '" & sEmpresa & "'"
vlsSql1 = vlsSql1 & " AND par_codigo = 'NC'"
CALL vgoconeccion.Execute(vlsSql1, dbExecDirect)
If Not sw Then
'Inserto en la tabla de Novedades
vlsSql1 = "INSERT INTO SCMM_NOVEDADES VALUES ('" & Var_Empresa & "', 'NC', '"
vlsSql1 = vlsSql1 & CStr(Format(nin, "000000")) & "', "& Trim(TSol_Contrato.Text) & ", 'RES', "
vlsSql1 = vlsSql1 & " CDATE('" & TSol_Fecha_NC.Text & "'), " & CCur(Sdo_Pendiente) & ","
vlsSql1 = vlsSql1 & " '" & Txt_Observacion & "', 'A', "
vlsSql1 = vlsSql1 & CCur(TXTTotalPagado) & ","
vlsSql1 = vlsSql1 & " " & CCur(TXTRetenido.Text) & ")"
Call vgoConeccion.Execute(vlsSql1, dbExecDirect)
If sw Then
ning = ning + 1
End if
End If
Wend
ObtenerSecuenciaNC = ning
Exit Function
err_ObtenerSecuenciaDoc:
If DBEngine.Errors(0).Number = -1605 Then
sw = True
Resume Next
Else
If DBEngine.Errors(0).Number = -1102 Then
sw = True
Resume Next
Else
MsgBox DBEngine.Errors(0).Number & ":" & DBEngine.Errors(0).Description, vbCritical
End If
End Function
Saludos
Blanchi
Igual lo que te falla es el connection echale un vistazo bueno a eso para ver si alguno de los parámetros es en exclusivo.
Prueba de todas formas a conectarte de otra forma con el datacontrol, mira en la ayuda que te indicara como conectarte con esto.
El código aparentemente no parce mal lotendria que ver con más calma yo creo que el problema puede venir de connection

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas