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