Access - Función DBúsq u Herramienta Similar

 
Vista:

Función DBúsq u Herramienta Similar

Publicado por JORGE (4 intervenciones) el 20/11/2019 22:27:40
Buenas Noches.

Una duda muy rápida que me tiene en un callejón sin salida.

Estoy haciendo una Base de Datos de Tareas (Cronograma la llamo yo).

Tengo una Tabla con las TAREAS y sus fechas de elaboración, y tengo en otra Tabla los DÍAS INHÁBILES.

Pretendo crear una Consulta de la Tabla de TAREAS, con una búsqueda en la Tabla de DÍAS INHÁBILES que me informe de si la fecha que estoy poniendo en la tabla de TAREAS es inhábil o no, es decir, si se encuentra en la tabla de DÍAS INHÁBILES.

He tratado de hacerlo con la Función “DBúsq”, de manera análoga a como utilizo en EXCEL la función “BuscarV”, pero no me funciona.

¿Me podrían Vds. dar alguna idea de cómo hacerlo? Mi nivel de Access es de principiante.

Les quedo muy agradecido de antemano.

Atentamente.
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

Función DBúsq u Herramienta Similar

Publicado por Anonimo (3312 intervenciones) el 21/11/2019 01:51:05
La función DLookup debería dar un buen resultado, pero … las fechas pueden ser un problema si no se le dan datos fiables a Access y no logra interpretar si el dato esta en formato europeo o americano (un cruce de mes y día).

Lo que no suele fallar es 'darle' la fecha en formato numérico y es tan sencillo como utilizar una (o dos) funciones que hacen el trabajo.

Normalmente se suele utilizar un campo de tipo fecha para ellas, pero …. según donde se utilicen las fechas se muestran como texto (aunque se representen con números) y este suele ser el problema.

Si se tiene plena seguridad de que el dato (la fecha) es fecha Access (se utiliza y proviene de un campo de tipo Date) no pasa nada Access utiliza el dato real (un numero) y el resultado es fiable.

Que se desconfía de su interpretación … basta convertir la fecha a su numero equivalente (función CDbl ) y adiós a los problemas.

Si la fecha es texto (un cuadro de texto independiente en un formulario ….) dos funciones encadenadas, CDate (que nos convierte el texto en fecha Access) y CDbl que nos convierte la fecha en numero

Con ello se evita la libre interpretación de meses y días que pudiera hacer Access (y que de hecho hace de forma transparente, pues guarda las fechas como numero y tras ello las presenta como texto) y sus primeras intención en la conversión es utilizar el formato americano >> mm/dd/yyyy

El_Dato de fecha Access >>> Cdbl(El_Dato) ==> un numero
El_Dato de fecha en texto >>> Cdbl (Cdate(El_Dato)) ==> un numero

Y los números se trasmiten sin traducciones erróneas

Nota: Si en lugar de CDbl (admite decimales, decimales = horas …..) se utiliza CLong (que no admite decimales) las horas no interfieren en el calculo.

Una alternativa: DCount …
1
DCount("*","la tabla", "la condición")

DCount cuenta registros, no le importa el campo ni su contenido (eso es trabajo de la condición)

.- devuelve CERO si no lo localiza (DLookup devuelve un Null)

.- o la cantidad de elementos encontrados que cumplan la condición

Para Access le vale esa respuesta como un si/no, en el que no= 0 y si <>0
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

Función DBúsq u Herramienta Similar

Publicado por JORGE (4 intervenciones) el 21/11/2019 13:12:33
Las fechas las tengo informadas como texto, con el formato 99/99/9999.

Un saludo.
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

Función DBúsq u Herramienta Similar

Publicado por JORGE (4 intervenciones) el 21/11/2019 20:17:57
Estoy poniendo en una consulta la siguiente expresión:

Expr1: DCont("[F_Inicio]";[DIAS_iNHABILES];0)

Y no me funciona.

[F_Inicio] es un campo en el que tengo la fecha y está abierto en la consulta en la que meto la fórmula

[DIAS_iNHABILES] es una tabla en la que en uno de sus campos he registrado las fechas de días inhábiles

El 0 lo pongo porque no sé lo que puedo poner.

Por favor, me pueden ayudar?

Si es necesario puedo colgar la Base de Datos para que la vean. Es muy sencilla.

Muchas gracias de antemano.

Un saludo.
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

Función DBúsq u Herramienta Similar

Publicado por Anonimo (3312 intervenciones) el 21/11/2019 21:44:16
Lo mejor de las funciones de dominio, es que comparten sintaxis, esto es: un vez que se conoce y domina una de ellas, se las domina a todas.

Aceptamos Expr1 como un nombre para una columna (pero si le llamamos de otra forma, también vale)
Aceptamos también el nombre de la tabla [DIAS_iNHABILES]

pero el cero para el tercer parámetro (que es el fundamental) es inadmisible, el tecer parámetro es una condición que ha de devolver un si/no (o entra en el conjunto o no entra) y aquí se trata de contar a 'los que si entran'.

Reutilizando lo que se conoce
El primer parámetro (a la función DCount) le es indiferente, no contara ningún campo o valor en el campo, contara REGISTROS, un asterisco le vale:
1
Expr1: DCont("*";

El segundo es la tabla, se la aplicamos:
1
Expr1: DCont("*";[DIAS_iNHABILES];

Y viene el apartado que es fundamental: la condición
La condición es: ¿esta el dato de fecha en el campo F_Inicio de cualquier registro de la tabla [DIAS_iNHABILES] ?
… si lo encuentras: dime cuantas veces … se utiliza DCount = cuenta)

Y ahora vendría la fecha (que o se le pone a mano o se referencia a un objeto 'visible' en ese entorno, esto es si esta abierto)

En principio Access intentara 'entender como fecha' el referente a comparar (el campo F_Inicio es de tipo date)
…. pero es muy libre al interpretar y para evitar errores (sobre todo si el dato no procede de un campo de tipo Date) se le debe de aplicar formato
…. lo clásico la función FORMAT (con el formato americano)
…. la alternativa = un numero (que le vale a un americano, a un chino y a un español)

1
Expr1: DCont("*";[DIAS_iNHABILES]; "F_Inicio = " & CDbl(CDate("aquí el valor de fecha")))

Si el referente esta en un formulario (formulario_uno, cuadro de texto La_Fecha)

1
Expr1: DCont("*";[DIAS_iNHABILES]; "F_Inicio = " & CDbl(CDate(Forms.Formulario_uno.La_Fecha)))
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

Función DBúsq u Herramienta Similar

Publicado por JORGE (4 intervenciones) el 22/11/2019 08:12:56
Agradezco tu esfuerzo desinteresado, pero no me funciona. No soy capaz.
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