Mensaje de aviso cuando se introduce un dato duplicado en un control (o un campo de tabla)

Manejo una tabla que es dinámica, o sea que siempre consta de 13 registros, los cuales se actualizan con frecuencia. Se trata de una tabla donde los 13 registros corresponden a pacientes internados. Cada registro activo, corresponde a una cama de internación. Se diseño así porque de esa tabla, se sacan los datos de los mismos, para usar de encabezado en otros formularios. Al dar egreso a alguno, éste se elimina de la tabla, mediante un botón de acción, que lo corta de la tabla y lo envía a otra, quedando el "lugar" vacío para que se pueda ingresar otro paciente. El problema surge que seria un error que el usuario se olvida de "egresar" al paciente, e ingresa un nuevo paciente usando un numero de cama que esta repetido. Lo que quisiera poder hacer es que al querer ingresar un paciente nuevo y seleccionar el campo "cama" y que este ya este en uso en la tabla, aparezca un mensaje que indique que ya se encuentra un paciente en esa cama, si desea egresarlo, y que se ejecute el código que ya poseo el cual dejo a continuación:

Private Sub cmdAlta_Click()
If MsgBox("¿Desea dar egreso a este paciente?", vbYesNo, "Gestion de pacientes JANIES") = vbYes Then
   CurrentDb.Execute "INSERT INTO Historial_Paciente (DNI, Nombre_Apellido, Cama, F_Nacimiento, Edad, F_Ingreso, Diagnostico, Obra_Social, Derivado, Tel_Contacto, F_Egreso) VALUES ('" & Me.DNI & "','" & Me.Nombre_Apellido & "'," & Me.Cama & "," & "#" & Format(Me.F_Nacimiento, "mm/dd/yyyy") & "#" & ",'" & Me.Edad & "'," & "#" & Format(Me.F_Ingreso, "mm/dd/yyyy") & "#" & ",'" & Me.Diagnostico & "','" & Me.Obra_Social & "','" & Me.Derivado & "','" & Me.Tel_Contacto & "'," & "#" & Format(Me.F_Egreso, "mm/dd/yyyy") & "#" & ")"
   DoCmd.SetWarnings False
   AllowEdits = True
   DoCmd.RunCommand acCmdDeleteRecord
   Me.Requery
   DoCmd.SetWarnings True
   AllowEdits = False
   End If
End Sub

La tabla se llama Paciente. El formulario de ingreso de pacientes F_Paciente. El control para seleccionar la cama es un combobox. Me salvan con esta, ya es muy complicado para mis conocimientos. Me llevo mejor con la medicina.

1 Respuesta

Respuesta
1

Debes tener la tabla Historial_Paciente el campo "cama" SIN REPETIDOS, y controlar el error mediante el siguiente código al comienzo del Evento :

Private Sub cmdAlta_Click()

 On Error Goto hay_err

If MsgBox("¿Desea dar egreso a este paciente?", vbYesNo, "Gestion de pacientes JANIES") = vbYes Then
   CurrentDb.Execute "INSERT INTO Historial_Paciente (DNI, Nombre_Apellido, Cama, F_Nacimiento, Edad, F_Ingreso, Diagnostico, Obra_Social, Derivado, Tel_Contacto, F_Egreso) VALUES ('" & Me.DNI & "','" & Me.Nombre_Apellido & "'," & Me.Cama & "," & "#" & Format(Me.F_Nacimiento, "mm/dd/yyyy") & "#" & ",'" & Me.Edad & "'," & "#" & Format(Me.F_Ingreso, "mm/dd/yyyy") & "#" & ",'" & Me.Diagnostico & "','" & Me.Obra_Social & "','" & Me.Derivado & "','" & Me.Tel_Contacto & "'," & "#" & Format(Me.F_Egreso, "mm/dd/yyyy") & "#" & ")"
   DoCmd.SetWarnings False
   AllowEdits = True
   DoCmd.RunCommand acCmdDeleteRecord
   Me.Requery
   DoCmd.SetWarnings True
   AllowEdits = False
   End If

hay_error_exit:
   exit sub

hay_error:
   if err.number=3022 then
     msgbox "La cama no está disponible",vbiformation,"Cama no disponible"
   else
     msgbox Err.Description,vbinformation,"Error ...."
   endif
   Resume hay_err_exit

End Sub

Lo que está en negrilla de captura el error.

mmm me parece que hay un error, así lo que pasaría es que no se permitan duplicados en la tabla "Historial_Paciente", pero justamente esa tabla almacena el histórico, y si va a haber duplicados. Yo lo que quisiera es que al ingresar mediante el formulario F_Paciente, que guarda en la tabla "Paciente" (es otra, es la tabla que solo contiene los 13 registros como máximo), si elijo una cama que ya se encuentra ocupada (o sea selecciono del combo el valor de la lista que ya esta en uso de alguno de esos 13 registros), aparezca el mensaje de que ya hay un paciente y si deseo egresarlo (adosándole esa instrucción que puse en la pregunta original, que lo manda a la tabla "Historial_Paciente").

¿Se entiende? ¿O es muy confuso?

Creo estoy confundido, el control de error no va acá.

Otra alternativa es buscar el número de cama con la función dlookup()

Algo como:

IF nz(dlookup("[cama]","pacientes","cama=" & mi_combox,0) >0 then

   msgbox "Ya esta ocupada la cama",vbinformation,"error.."

   Exit sub

else

   ' continuar ...

end sub

Si efectivamente me equivoqué lógicamente el historio debe tener camas repetidas, mira la otra alternativa que te envíe.

¿Y en que evento iría del formulario? En el combo,¿"después de actualizar"?

Donde asigna cama al paciente

Me sale ese mensaje, ¿se omitió algo?

Si disculpa te falta cerrar un paréntesis.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas