Imprimir página | Cerrar ventana

Dcount

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86709
Fecha de impresión: 27/Marzo/2026 a las 04:50


Tema: Dcount
Publicado por: damian_colomb
Asunto: Dcount
Fecha de publicación: 01/Junio/2023 a las 21:13
Buenas tardes! 
Tengo un formulario para registrar pacientes en una tabla internación, la cual tiene una columna SI/NO,que se actualiza desde otro formulario cuando le doy el alta, mediante una casilla de verificación.
El paciente que voy a internar, se encuentra en un cuadro de lista, cuando doy doble click, hago que busque en la tabla internaciones el ID de ese paciente y en caso de que esté el tilde si, me devuelva un cuadro de texto con el mensaje de que está internado. Para ello en la función al hacer doble click de la lista coloco la siguiente instrucción:

Private Sub lstPacientes_DblClick(Cancel As Integer)

Me.TxtIdPaciente = Me.LstPacientes.Column(2) 'Acá hace que un txt coloque el valor de la columna 2, que es el id del paciente'
If DCount("[IdPaciente]", "Internaciones", "[IdPaciente] = [txtIdPaciente]") > 0 And DCount("[Internado]", "Internaciones", "[Internado] = True") > 0 Then 'Acá en teoría haría lo que estoy tratando de hacer'
MsgBox "El paciente ya está internado.", vbOKOnly + vbInformation, "AVISO"
Me.TxtBuscarPaciente.SetFocus
Exit Sub

Else
Me.TxtPaciente = Me.LstPacientes.Column(0)
End If
End Sub

El problema que tengo es que cuando tengo un paciente internado (Cualquiera sea) y por ende tengo la columna de internado algun tilde, me toma como que cualquier paciente está internado y no me lo deja internar. 
No se si fui preciso con mi explicación, creo que el error está en el Dcount, pero me llama la atención porque tengo otra aplicación que hace una función parecida y no me hace el mismo problema.
Espero alguien pueda ayudarme.
Saludos




Respuestas:
Publicado por: joanka
Fecha de publicación: 01/Junio/2023 a las 22:02
La función Dcount no es la correcta creo, has de buscar al paciente que tienes en Txtpaciente si tiene el Internado = True.
Yo usaría Dlookup:

Me.TxtIdPaciente = Me.LstPacientes.Column(2) 'Acá hace que un txt coloque el valor de la columna 2, que es el id del paciente'

Dim vBusqueda as boolean

vBusqueda=DLookup("Internado", "Internaciones", "[IdPaciente] =" & me.txtIdPaciente & "")
'vBusqueda=DLookup("Internado", "Internaciones", "[IdPaciente] ='" & me.txtIdPaciente & "'") 'Si IdPaciente es texto

If vBusqueda = true Then 
MsgBox "El paciente ya está internado.", vbOKOnly + vbInformation, "AVISO"
Me.TxtBuscarPaciente.SetFocus
Exit Sub

Else
Me.TxtPaciente = Me.LstPacientes.Column(0)
End If
End Sub

No lo he probado, pero una vez con esto puedes tener una idea.


Publicado por: xavi
Fecha de publicación: 01/Junio/2023 a las 23:04
Hola,

Tienes que poner las 2 condiciones en el mismo DCount. Además de que la primera la tienes mal construida.

Tu tienes esto:
If DCount("[IdPaciente]", "Internaciones", "[IdPaciente] = [txtIdPaciente]") > 0 And DCount("[Internado]", "Internaciones", "[Internado] = True") > 0 Then

Y puedes probar con esto:
If DCount("*", "Internaciones", "[IdPaciente] = " & Me!txtIdPaciente & " AND [Internado] = True") >0 Then...

Prueba y nos cuentas

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: damian_colomb
Fecha de publicación: 05/Junio/2023 a las 00:08
Buenas tardes! Muchas gracias a ambos por contestar!
Me funcionó perfecto la corrección de Xavi! 
Probé también la otra forma que me sugeriste joanka, pero si el paciente estaba internada, me generaba error "método inválido del null"
Muchísimas gracias a ambos por la ayuda



Imprimir página | Cerrar ventana