Función Dcount en subformulario

Dudas sobre Tablas, Consultas, Formularios, Informes...
JUBILADO1940
Nivel 6
Reto03
Mensajes: 245
Registrado: Jue Dic 03, 2015 9:56 pm

Función Dcount en subformulario

Mensajepor JUBILADO1940 » Vie Nov 29, 2019 8:25 pm

Buenas noches a todos/as
Llevo bastante tiempo con esto y no consigo la respuesta. Algún alma caritativa que me quiera ayudar.
Tengo un formulario FrmPresupuesto que se basa en la tabla TblComunidad y en el que hay un cuadro combinado para elegir la Comunidad.
Dentro de FrmPresupuesto hay un SubPresupuesto basado en la tabla TblPresupuesto con los siguientes campos: IdPresupuesto, Concepto (es un cuadro combinado para buscar en la tabla TblConceptos el nombre del concepto), Importe, FechaPresu y IdCdadPresu ( que es el identificador de la Comunidad dentro de la tabla TblPresupuesto).
Las 2 tablas están relacionadas por IdComunidad , IdCdadPresu
Quiero que no me permita añadir ningún concepto al presupuesto de una Comunidad si ya ha sido presupuestado
En el evento “Al perder el foco” del campo Concepto intento lo siguiente al elegir uno nuevo:
Si ya existe en la tabla TblPresupuesto un registro con ese Concepto y ese IdCdadPresu, que me muestre un mensaje. He intentado
If DCount("*", "TblPresupuesto", "'Concepto=" & Me.Concepto & "'" and ) y a partir de aquí es donde quiero añadir la segunda condición, pero no se como relacionar el idComuPresu con el IdComunidad.
Gracias anticipadas.

pitxiku
VIP
Reto02
Mensajes: 369
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Función Dcount en subformulario

Mensajepor pitxiku » Dom Dic 01, 2019 1:30 pm

Suponiendo que ambos campos son numéricos, para buscar el concepto 2 y el presupuesto 5, tendrás esto:

Código: Seleccionar todo

Concepto=2 AND IdCdadPresu=5


Como debemos pasarlo al DCount como texto, hay que entrecomillarlo:

Código: Seleccionar todo

"Concepto=2 AND IdCdadPresu=5"


Y como no queremos valores fijos (el 2 y el 5), tenemos que sacarlo del texto para que tome los datos que tengas en el formulario:

Código: Seleccionar todo

"Concepto=" & Me.Concepto & " AND IdCdadPresu=" & Me.IdCdadPresu


Nota: para crear este tipo de expresiones en VBA, una fórmula es usar una variable a la que ir añadiendo cada parte, y luego usar un Debug.Print o MsgBox para ver cómo vamos o dónde nos hemos equivocado.

JUBILADO1940
Nivel 6
Reto03
Mensajes: 245
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Función Dcount en subformulario

Mensajepor JUBILADO1940 » Dom Dic 01, 2019 10:51 pm

Buenas noches:
Hola Pitxiku. Los campos son Concepto ( texto ) y IdComuPresu ( número ).
Yo he generado lo siguiente
If DCount("*", "TblPresupuesto", "Concepto=" & Me.Concepto & " And IdCdadPresu= & Str(Me.IdCdadPresu") Then
pero me da error de sintaxis ( falta operador) en esta expresión.
Le he dado mil vueltas pero no consigo saber cual es el error.
Gracias por tu ayuda.

Avatar de Usuario
Fayad
Colaborador
Mensajes: 369
Registrado: Mié Oct 28, 2015 9:43 pm

Re: Función Dcount en subformulario

Mensajepor Fayad » Dom Dic 01, 2019 11:04 pm

Hola!
Prueba así:

Código: Seleccionar todo

If DCount("*", "TblPresupuesto", "[Concepto] = '" & Me.Concepto & "'  And [IdCdadPresu] = " & Me.IdCdadPresu Then
Salu2.

JUBILADO1940
Nivel 6
Reto03
Mensajes: 245
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Función Dcount en subformulario

Mensajepor JUBILADO1940 » Lun Dic 02, 2019 11:27 am

Buenos dias Fayad.
Efectuado un copia y pega me dio primero un error de que falta un paréntesis y efectivamente falta al final, lo he puesto y ahora me da el siguiente error 3464. No coinciden los tipos de datos en la expresión de criterios.
Esta es la que yo tenía If DCount("*", "TblPresupuesto", "Concepto=" & Me.Concepto & " And IdCdadPresu= & Str(Me.IdCdadPresu") Then
Y es la que propones If DCount("*", "TblPresupuesto", "[Concepto] = '" & Me.Concepto & "' And [IdCdadPresu] = " & Me.IdCdadPresu Then
a parte de las comillas y corchetes, que ya haré preguntas para enterarme bien como es el sistema, veo que también hay diferencia en el tratamiento del campo IdCdadPresu.
Espero me lo aclares.
Gracias

Avatar de Usuario
Fayad
Colaborador
Mensajes: 369
Registrado: Mié Oct 28, 2015 9:43 pm

Re: Función Dcount en subformulario

Mensajepor Fayad » Lun Dic 02, 2019 6:35 pm

Hola!

Lo del paréntesis fue un fallo al borrar las comillas de tu expresión.

Por lo que comentas del error "No coinciden los tipos de datos en la expresión de criterios." me hace pensar el campo "IdCdadPresu" no es numérico sino de tipo Texto:-

Código: Seleccionar todo

If DCount("*", "TblPresupuesto", "[Concepto] = '" & Me.Concepto & "' And [IdCdadPresu] = "' & Me.IdCdadPresu & "'") Then


Respecto a "IdCdadPresu", mi pregunta porque le añadiste la Función Str
Salu2.

JUBILADO1940
Nivel 6
Reto03
Mensajes: 245
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Función Dcount en subformulario

Mensajepor JUBILADO1940 » Lun Dic 02, 2019 8:30 pm

Hola Fayad.
El campo IdCdadPresu, en la TblPresupuesto es de tipo numérico. El campo Concepto, también es en la misma tabla numérico y en el FrmPresupuesto es un cuadro combinado para elegir el concepto de la TblConceptos.
Con respecto a la función Str lo puse para convertir a cadena el campo. Cosas que se me ocurrieron para intentar solucionar el problema.
Espero que con los nuevos datos se pueda aclarar la situación.
Gracias por tu colaboración
Te adjunto una copia https://www.dropbox.com/transfer/AAAAAD ... OzBeSlvJdo

Avatar de Usuario
Fayad
Colaborador
Mensajes: 369
Registrado: Mié Oct 28, 2015 9:43 pm

Re: Función Dcount en subformulario

Mensajepor Fayad » Lun Dic 02, 2019 10:37 pm

Hola!

1- El campo Concepto es numérico aunque muestre Texto al tratarse de Cuadro Combinado de varias columnas.
2- En el ancho de columnas de campo concepto tienes tres valores para tres columnas (0cm;2,54cm;2,54cm), quiya uno tanto en la tabla presupuestos como en el subformulario.
3- La instrucción queda así:-

Código: Seleccionar todo

If DCount("*", "TblPresupuesto", "[Concepto] = " & Nz(Me.Concepto, 0) & " And [IdCdadPresu] = " & Nz(Me.IdCdadPresu, 0)) Then


4- Pongo la función NZ para que se devuelva cero cuando entres en un campo vacío sin datos y así no dé error.
Salu2.

JUBILADO1940
Nivel 6
Reto03
Mensajes: 245
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Función Dcount en subformulario

Mensajepor JUBILADO1940 » Lun Dic 02, 2019 11:58 pm

Gracias Fayad, funciona perfectamente.
Ahora te quiero pedir un favor. Me podrías indicar algún manual, con ejemplos, donde yo pueda estudiar esto de la unión
de distintos campos para así ver esto de las comillas simples y dobles.
Otro favor, me podrías desmenuzar un poco la expresión (sobretodo lo de las comillas y el 0 final):
"[Concepto] = " & Nz(Me.Concepto, 0) & " And [IdCdadPresu] = " & Nz(Me.IdCdadPresu, 0)
Gracias anticipadas.

Algún manual para la ventana de inmediato. He mirado en la red y no me aclaro.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1124
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Función Dcount en subformulario

Mensajepor Sveinbjorn » Mar Dic 03, 2019 9:09 am

Arístides, revisa este post para la primera parte: viewtopic.php?f=8&t=705&p=4345&hilit=encadenar#p4345

Lo de las comillas simples, dobles, almohadillas... ya debería ser un tema conocido para tí, pues está en todos los manuales (incluidos los de Neckkito y los que seguiste en la Academy)

Sobre la ventana inmediato, además de la propia ayuda de Microsoft, tienes la "mini guía de depuración" de Neckkito, una de las charlas del grupo de AUGE
Sveinbjorn El Rojo


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados