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