Foros del Web » Programación para mayores de 30 ;) » Programación General »

ERROR Access 2007 al usar bloqueo por registro

Estas en el tema de ERROR Access 2007 al usar bloqueo por registro en el foro de Programación General en Foros del Web. Ante todo, y para guardar las buenas costumbres mis Saludos desde Argentina... Un poco de mi? Me Llamo Gastón Godoy, Libriano de nacimiento :), algunos ...
  #1 (permalink)  
Antiguo 28/10/2013, 13:16
 
Fecha de Ingreso: octubre-2013
Ubicación: San Carlos de Bariloche
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
Exclamación ERROR Access 2007 al usar bloqueo por registro

Ante todo, y para guardar las buenas costumbres mis Saludos desde Argentina... Un poco de mi? Me Llamo Gastón Godoy, Libriano de nacimiento :), algunos dicen que buen tipo y un gran entusiasta de adquirir conocimientos. en futuros post y respuestas os conoceré mejor a todos.

El motivo de este post es solicitar su ayuda en algo que me trae rompiendo mi cabecita desde hace ya varios días. y como considero que si lo resolvemos quiza también ayude a alguien mas con mi pregunta, discución y sus respuestas es que he decidido abrir este hilo.

He desarrollado con access 2007 un sistemita de turnos para un lugar donde hacen analisis clinicos; la idea es optimizar el tiempo de los pacientes y que no tengan que esperar en vano en cada analisis; Os explico un poco mejor:

En este lugar se realizan 6 practicas medicas diferentes; a Saber:
* Analisis Clinicos
* Rayos X
* Fonoaudiologia
* Psicologia
* Electrocardiogramas
* Analisis de Laboratorio (Sangre, Etc)

el sistema consta de una base de datos access alojada en una carpeta compartida en un servidor (back End) y un archivo de access independiente en cada terminal (Front End)

Cada paciente puede realizar diferentes practicas medicas, puede sr una, dos o todas, acorde al caso. de modo tal que en las terminales puedan llamar a cada paciente acorde a si éste esta disponible para ser atendido (campo estado) y si no esta siendo atendido en ninguna de las áreas.

En la tabla de practicas médicas tengo por cada paciente los campos:
Nombre, Apellido, Orden de Llegada, Estado, y un campo por cada práctica, osea electro, laboratorio, etc, etc, de modo que voy gurdando registro de donde esta el paciente usando el campo pertinente a cada practica medica y por otro lado si esta disponible para ser llamado (campo estado) este ultimo es consultado y editado por todas las terminales

Básicamente si yo llamo a juan desde electro, y en rayos hacen click en llamar al proximo paciente y el proximo era juan mediante una consulta el sistema ve que juan no esta disponible y lo saltea para llamar a pedro que es el proximo paciente que esta disponible para ser atendido; hasta ahi todo funciona correctamente, escepto por que a veces sucede que en dos terminales se consulta el mismo registro casi al mismo tiempo y mientras uno estaba escribiendo no disponible el otro terminal lo sigue viendo como dsiponible; pense que lo solucionaria con lo de registro bloqueado, pero no ha sido una soluci{on definitiva. puesto que al intentar bloquear el mismo registro ambas terminales me devuelve un error en una de ellas diciendo que el registro no puede ser modificado por estar bloqueado y otras veces me devuelve que el registro ha cambiado; cuando lo que quiero es que ante este error tambi{en saltee el registro.
espero haber sido lo mas explicito posible; copio y pego el codigo que uso a ver si les da una vista un poco mas clara de mi situaci{on

Código:
Private Sub Llamar_Click()
On Error GoTo Err_Llamar_Click

'<<<< Definición de variables >>>>>
Dim varTerminal As String
Dim NoPacientes As String
varTerminal = "Laboratorio"
NoPacientes = "No hay pacientes disponibles por el momento"

Evaluacion:
'evaluamos si hay registros diponibles antes de comenzar con las opciones
If Me.Recordset.RecordCount = 0 Then
    DoCmd.Requery
        If Me.Recordset.RecordCount = 0 Then
        MsgBox NoPacientes
        GoTo Exit_Llamar_Click
        Else
        GoTo Comienzo
        End If
End If

Comienzo:
DoCmd.RunCommand acCmdRefresh 'Refresco los datos por si algun registro cambió
If Me.Estado = varTerminal Then 'chequeo las condiciones del estado para decidir que hago a partir de acá
    GoTo LiberarPaciente
    ElseIf Me.Estado = "1" Then GoTo BloquearPaciente
    Else:
    GoTo BuscarProximo
End If

LiberarPaciente:
    Me.Estado = "1" 'habilito el usuario antes de llamar al próximo
    DoCmd.RunCommand acCmdRefresh 'Guarda y refresca los registros

BuscarProximo:
Me.Recordset.MoveNext 'Voy al siguiente registro
    If Me.Recordset.EOF Then
        'MsgBox "Este es su último paciente por el momento"
        DoCmd.Requery
        GoTo Evaluacion
        Exit Sub
    Else:
    If [Estado] <> "1" Then 'Si ese registro está bloqueado avanzar con el loop hasta el próximo registro disponible
    Do While [Estado] <> "1"
        DoCmd.RunCommand acCmdRefresh 'Refresco datos
        Me.Recordset.MoveNext
        Loop
    End If 'final del loop
End If

'Procedimiento para el bloqueo de un registro de paciente
BloquearPaciente:
    Me.Estado = varTerminal 'bloqueo el nuevo registro
    DoCmd.RunCommand acCmdRefresh 'actualizo registros y guardo los cambios


Exit_Llamar_Click:
Exit Sub

Err_Llamar_Click:
If Err.Number = 3021 Then 'ultimo registro disponible
    DoCmd.Requery
    Resume Evaluacion
    End If
    
If Err.Number = -2147352567 Then
    Resume Exit_Llamar_Click
    End If
    
MsgBox Err.Number & ": " & Err.Description
Resume Exit_Llamar_Click
End Sub

Espero su pronta ayuda, porque mi cabecita ya no da mas
Muchas Gracias

Etiquetas: access, bloqueo, funcion, registro, sistema, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:37.