** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Otro usuario modificó este registro
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoOtro usuario modificó este registro

 Responder Responder
Autor
Mensaje
zfeliu Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Febrero/2005
Localización: España
Estado: Sin conexión
Puntos: 209
Enlace directo a este mensaje Tema: Otro usuario modificó este registro
    Enviado: 21/Abril/2011 a las 20:07
Me estoy volviendo loco con el mensaje "Otro usuario modificó este regsitro después de que usted comenzó a modificarlo...."

Tengo una aplicación access con la base de datos MySQL vinculada. Pues bien hay unos registros aleatorios de una tabla que cuando intento modificarlos des de el visualizados de tablas de access o des de un formulario me da este error, en cambio otros registros no hay ningún problema.
Nadie esta modificando esos registros. Es más, si utilizo el MySQlBrowser, herramiento de Mysql que permite hacer cambios en las tablas, puedo modificar esos registros sin ningún problema.

Creo que quizá en algún momento hayan podido quedarse bloqueados, no se porqué motivo, pero no hay manera. Una opción seria borrar la tabla y recuperar de copias, pero no me gustaría tener que llegar a ese extremo. No se si en algun sitio access tiene información de bloqueo de registros.

He echo de todo, unlock tables de MySQL, optimizar las tablas, desvincular la tabla y volverla a vincular a Access, en fin no se me ocurren más cosas por hacer.

Si se os ocurre algo, os lo agradeceré.

Un saludo a todos.


Editado por zfeliu - 21/Abril/2011 a las 20:09
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5152
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 01:04
Hola buenas noches.
 
Por si sirve, yo solía tener el mismo problema en este caso concreto:
 
Formulario1 (en continuo), con los datos del Nombre, calle y teléfono de un cliente. En este mismo formulario puse un botón que me abría un nuevo formulario (emergente y modal) con los datos restantes que tiene dicho cliente (NIF, hijos, padres, etc.).
 
Pues bién, si en cualquiera de los dos formularios (ambos permitían la introducción y modificación de datos) introducía modificaciones me preguntaba lo mismo que te indica a tí.
 
Lo solucioné (quiero decir que dejó de hacerme esta observación el sistema) incluyendo la sentencia de "Guardar registro" (la copié de la que el sistema desarrolla cuando se pone un botón de comando y se le pide que haga lo de "Guardar registro").
 
El truco es simple, si saltaba de registro antes de abrir el formulario modal y emergente que cito antes, ya se guardaba este registro automáticamente (se produce el salvado de las correcciones cuando se cambia de registro, de forma automáticamente), pero ¿que ocurre si modifico algo y pulso el botón para abrir el formulario modal y emergente dicho?. Problema al canto, pues estoy interactuando en el mismo registro a la vez, pero desde distintos formularios.
 
No se si te servirá, pero me dió varios dolores de cabeza hasta que caí en la cuenta de lo que era.
 
Saludos y gracias
 
P.D.:
Edito para aclarar lo de la sentencia de guardar registro, cuando la tengo puesta:
1.- En el botón de abrir el formulario emergente/modal, tenía:
     Docmd.OpenForm "miformulario"
 
     Ahora puse:
     "Guardar registro" (El código que toque, ahora no lo recuerdo)
    Docmd.OpenForm "miformulario"
 
2.- Al cerrar el formulario emergente/modal, también:
    "Guardar registro"
    Aquí ya no hice la prueba de si se guardaba o no automáticamente con el cierre de este formulario, me curé en salud(Si tu quieres probarlo previamente....)
 
Saludos


Editado por VIMIPAS - 22/Abril/2011 a las 01:09
Gracias
Arriba
zfeliu Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Febrero/2005
Localización: España
Estado: Sin conexión
Puntos: 209
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 08:01
Mi caso es diferente, ya que ejecuto un código en el evento después de actualizar, además la tabla que después modifico es otra a la del formulario.
Por si puede dar alguna pista, este es el código:

Private Sub Form_AfterUpdate()
If c_actualiza_tarifas = True Then
   
    MsgBox "Se han modificado los parámetros de cálculo, se recalcularán todas las tarifas del ejercicio " & Me.Ejercicio & ", este procedo puede tardar unos instantes.", vbInformation
   
    Dim dbs As Database, wsp As Workspace, c_sql As String, rst_tarifas As Recordset, rst_conceptos As Recordset, c_tipo_tarifa, c_des_tarifa
    Dim c_imp_bruto_empleado, c_imp_SSO_empleado, c_imp_IRPF_empleado, c_imp_SSO_empresa, c_Epis_curs, i_tot, i, c_importe_EUR_E, c_cod_especialidad
    DoCmd.Hourglass (True)
    'On Error GoTo err_1
    Set wsp = DBEngine.Workspaces(0)
    Set dbs = CurrentDb
    c_sql = "Select * from tarifas_clientes where ejercicio=" & Me.Ejercicio
    'c_sql = "Select * from tarifas_clientes where tipo_tarifa='312'"
    Set rst_tarifas = dbs.OpenRecordset(c_sql)
    If rst_tarifas.RecordCount < 1 Then
        MsgBox "No hay tarifas del ejercicio " & Me.Ejercicio & " para recalcular.", vbInformation
        wsp.Close
        Exit Sub
    Else
        wsp.BeginTrans
        With rst_tarifas
            .MoveFirst
            Me.c_proceso.visible = True
            Me.et_proceso.visible = True
            Do While Not .EOF
                c_tipo_tarifa = !tipo_tarifa
                c_des_tarifa = !des_tarifa
                c_sql = "Select * from tarifa_cl_conceptos where tipo_tarifa='" & c_tipo_tarifa & "'"
                Set rst_conceptos = dbs.OpenRecordset(c_sql)
                If rst_conceptos.RecordCount < 1 Then
                Else
                    With rst_conceptos
                        .MoveLast
                        i_tot = .RecordCount
                        i = 0
                        .MoveFirst
                        Do While Not .EOF
                            i = i + 1
                            Me.c_proceso = "Recalculando tarifa: " & c_des_tarifa & " " & i & " de " & i_tot & " conceptos tarifas"
                            'Me.Repaint
                            c_imp_bruto_empleado = !imp_bruto_empleado
                            c_cod_especialidad = !cod_especialidad
                            c_importe_EUR_E = !importe_EUR_E
                            c_imp_SSO_empleado = !imp_SSO_empleado
                            c_imp_IRPF_empleado = !imp_IRPF_empleado
                            c_imp_SSO_empresa = !imp_SSO_empresa
                            c_importe_EUR_E = !importe_EUR_E
                            c_Epis_curs = !imp_herram_empleado
                            
                            If c_imp_bruto_empleado <> 0 Then
' función que retorna unos cálculos, pero no modifica nada en ninguna tabla
                                If Mod_genco2.importes_SSO_new(c_tipo_tarifa, c_imp_bruto_empleado, c_imp_SSO_empleado, c_imp_IRPF_empleado, _
                                     c_imp_SSO_empresa, c_cod_especialidad, c_Epis_curs) Then
                                End If
                                If !imp_SSO_empleado <> c_imp_SSO_empleado Or !imp_IRPF_empleado <> c_imp_IRPF_empleado _
                                    Or !imp_SSO_empresa <> c_imp_SSO_empresa Or !imp_herram_empleado <> c_Epis_curs _
                                    Or !importe_EUR_E <> c_imp_bruto_empleado - c_imp_SSO_empleado - c_imp_IRPF_empleado Then
                                    .Edit
                                    c_importe_EUR_E = c_imp_bruto_empleado - c_imp_SSO_empleado - c_imp_IRPF_empleado
                                    !imp_SSO_empleado = c_imp_SSO_empleado
                                    !imp_IRPF_empleado = c_imp_IRPF_empleado
                                    !imp_SSO_empresa = c_imp_SSO_empresa
                                    !importe_EUR_E = c_importe_EUR_E
                                    !imp_herram_empleado = c_Epis_curs
' En este update es donde da el error
                                    .Update
                                End If
                            End If
                            .MoveNext
                        Loop
                    End With
                End If
                .MoveNext
            Loop
        End With
        wsp.CommitTrans
        dbs.Close
        wsp.Close
       
        DoCmd.Hourglass (False)
        MsgBox "Proceso realizado correctamente.", vbInformation
        Me.c_proceso.visible = False
        Me.et_proceso.visible = False
    End If
End If
Exit Sub
err_1:
    DoCmd.Hourglass (False)
    wsp.Rollback
    MsgBox Err.Number & "-" & Err.Description
    Me.c_proceso.visible = False
    Me.et_proceso.visible = False
    dbs.Close
    wsp.Close

Me estoy volviendo loco, llevo tres días sin encontrar el problema.
Saludos y gracias
Arriba
raipon Ver desplegable
Moderador
Moderador


Unido: 10/Diciembre/2004
Localización: Desconocida
Estado: Sin conexión
Puntos: 4003
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 10:17

Si puedes, evita el uso de transacciones. Mejor aún : no las utilices para probar si el problema viene por ahí.

Por otra parte, aún cuando las modificaciones que realizas en el código que nos has mostrado, no implican directamente a la tabla orígen de datos del formulario, asegúrate que no hay algún trigger que si la afecte.
 
Adios, un saludo.
 
Ramon desde Terrassa.

Mi blog
Arriba
zfeliu Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Febrero/2005
Localización: España
Estado: Sin conexión
Puntos: 209
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 11:26
Lo de la transacción me da la seguridad o que todo se ha grabado correctamente o que no se ha realizado ningún cambio. También lo he probado sin transacción y pasa lo mismo.

El problema tiene que ser de access. Si abro la tabla vinculada des del Access he intento cambiar un valor de sólo algunos registros me da el error que el registro a sido modificado por otro usuario.... , en cambio si lo hago con el MySQLBrowser o TOADMySQl no tengo ningún problema en modificar el registro que en Access no me permite.

Me estoy volviendo loco ya no se que más hacer, un proceso super senzillo, llevo 32 horas perdidas y sin conseguir nada.

Gracias a  todos y confio que alguién sepa como solucionarlo.
Arriba
raipon Ver desplegable
Moderador
Moderador


Unido: 10/Diciembre/2004
Localización: Desconocida
Estado: Sin conexión
Puntos: 4003
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 12:11

Es que tanto las transacciones como los triggers, repercuten de forma diferente según la aplicación cliente desde donde lanzas la acción. Por tanto, sigo recomendandote que en primer lugar : comprueba que pasa sin la transacción, y verifica si algún trigger de las tablas afectadas por el código, realiza alguna acción sobre la tabla orígen del registro del formulario.

Por otra parte, la tabla confictiva : ¿ tiene algún campo tipo marca de hora ?
 
Adios, un saludo.
 
Ramon desde Terrassa.

Mi blog
Arriba
raipon Ver desplegable
Moderador
Moderador


Unido: 10/Diciembre/2004
Localización: Desconocida
Estado: Sin conexión
Puntos: 4003
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 12:16
... además de lo anterior :  ¿ Me.c_proceso.visible, !tipo_tarifa, ... son campos del formulario ?
 

 
Ramon desde Terrassa.

Mi blog
Arriba
zfeliu Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Febrero/2005
Localización: España
Estado: Sin conexión
Puntos: 209
Enlace directo a este mensaje Enviado: 22/Abril/2011 a las 12:18
Milagro !! pero he solucionado el problema, aunque no sepa el motivo porqué sucede.

He creado un campo del tipo timestamp en la tabla conflictiva, posteriormente des de Mysql he ejecutado un update para que el campo timestamp tuviese valor.

Una vez realizada esta operación, el proceso funciona correctamente, puedo modificar los registros que antes no podía sin ningún problema y todo va perfecto.

Moraleja: todas las tablas creadas en MySQL añadir un campo del tipo timestamp  y se acaban los problemas de registros modificados por otros usuarios. Es así y no se si vale la pena darle más vueltas.

Muchísimas gracias a todos y por mi se puede cerrar el tema.

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable