Access - Dlookup

 
Vista:
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Dlookup

Publicado por Pablo (328 intervenciones) el 09/08/2022 19:46:05
Hola a todos:
Tengo una duda con la funcion Dlookup, en un formulario puse primero la primera instrucción
'If DLookup("muestreo_muestra", "muestras", "muestreo_muestra=" & Forms!muestreos_form!codigo_muestreo & "") <> Null Then
como no me funcionaba , le puse una comilla simple y escribí la siguiente
If IsNull(DLookup("muestreo_muestra", "muestras", "muestreo_muestra=" & Forms!muestreos_form!codigo_muestreo & "")) = False Then
Esta instrucción sí me funciona
La primera es: si encuentra algún valor entonces...
La segunda es lo mismo?
Por qué una funciona y la otra no?
Gracias
Pablo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dlookup

Publicado por Anonimo (3371 intervenciones) el 10/08/2022 02:20:10
Si la función es la misma, y el referente también:: el resultado es el mismo siempre.

La primera versión condiciona a que muestreo_muestra sea diferente de NULL (al parecer no funciona: ¿error en el DLookup?).

La segunda vez (se le añade la función de error IsNull, esta devolverá True si encuentra un error o False si no lo hay (independiente del valor real del campo o de que no encuentre coincidencia).

La conclusión: se evalúan cosas diferentes, los resultados pueden ser diferentes

Si lo que se pretende es verificar la existencia de ese valor en el conjunto de registros, aconsejo la función DCount que evita los NULL y devuelve un cero (0 = False) o el numero de coincidencias encontradas (<> 0 = True).

Si muestreo_muestra es un dato numerico:
1
IF DCount("*", "muestras", "muestreo_muestra= " & Forms!muestreos_form!codigo_muestreo ) <> 0 Then

Si muestreo_muestra es un dato alfanumerico (texto):
1
IF DCount("*", "muestras", "muestreo_muestra= '" & Forms!muestreos_form!codigo_muestreo & "'") <> 0 Then
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Dlookup

Publicado por Pablo (328 intervenciones) el 10/08/2022 17:53:43
Hola Anónimo
No se me había ocurrido utilizar dcount, claro, si es 0 es que no existe el dato. Probaré a hacerlo con dcount y volveré a revisar las dos instrucciones para saber porque una funciona y la otra no.
Gracias
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dlookup

Publicado por Anonimo (3371 intervenciones) el 10/08/2022 20:24:20
Lo que hay que verificar es si la función (la misma en ambas opciones) devuelve algo y si ese 'algo' tiene relación con lo que se espera obtener.

Por ejemplo así (copia literal):

1
MsgBox  DLookup("muestreo_muestra", "muestras", "muestreo_muestra=" & Forms!muestreos_form!codigo_muestreo & "")

(Personalmente creo que es mas adecuado utilizar DCount para esa funcionalidad).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Dlookup

Publicado por Pablo (328 intervenciones) el 10/08/2022 20:52:58
Hola Anónimo
Utilicé dcount y funciona bien
Puse un punto de interrupción en la segunda instrucción y en la ventana inmediato;
?dlookup("muestreo_muestra","muestras","muestreo_muestra=10") ->10
?isnull(dlookup("muestreo_muestra","muestras","muestreo_muestra=10")) ->False
Con el resultado de false entra en el if then, con el de 10 no, el primero tiene la condición de <> de null, el segundo =False, 10 es distinto de null pero...
Gracias

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar