Función Dbúsq en access con varios criterios

Soy Luis Andres,

Mi pregunta es: Necesito traer el Precio unitario a la base Ventas Diarias; donde dicha base de ventas esta en unidades, lista de precio y fecha de factura de cada producto, y tengo la base [Precios] donde está el precio por: lista de precio y fechas de VIGENCIA: DE y VIGENCIA: HASTA, de varios años por lo que todos los códigos tienen varias fechas y listas de precios.

Estoy haciendo la siguiente formula, pero me trae un precio que no corresponde según la fecha de factura:

Precio un: DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]=[Precios].[CODIGO INTERNO]" AND "[FECHA]>=[precios].[VIGENCIA: DE]" AND "[FECHA]<=[precios].[VIGENCIA: HASTA]")

2 respuestas

Respuesta
1

A que te refieres con esta instrucción

[Precios].[CÓDIGO INTERNO]

¿A un subformulario?

Hace referencia al campo [CODIGO INTERNO] dentro la tabla Precios

Lo haremos por 'partes.

DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]=[Precios].[CODIGO INTERNO]")

1. [CODIGO INTERNO]=[Precios].[CÓDIGO INTERNO] <- esta intruccion no puede ser

Por que [CÓDIGO INTERNO] es un campo de tu tabla precios y [Precios].[CÓDIGO INTERNO] al parecer también es un campo de tu tabla precios, no psabra que hacer la instrucción.

2. Si quieres buscar un precio en tu tabla precios cuando el código interno sea igual a un código que tu le asignes. Seria de la siguiente manera.

Por ejemplo:

DBúsq("[Nombre]","Personas,"[Id] = 1")

En el ejemplo anterior me buscara lo que contenga el campo "nombre", en la tabla "Personas" cuando Id = 1.

3. En tu caso para la primera parte seria.

DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]= " & [CODIGO INTERNO] & "")

Suponiendo que [CÓDIGO INTERNO] es un cuadro de texto que tienes en tu formulario.

---

Si no es una consulta seria

DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]= numeroDeCodifgo")

Referencias

Dbusq

https://support.office.com/es-es/article/DB%C3%BAsq-funci%C3%B3n-8896cb03-e31f-45d1-86db-bed10dca5937 

Si quieres mándame tu base y te ayudo.

[email protected]

¡Gracias! 

ok lo envié

Ya te respondí.

Respuesta
1

Cuando encadenas distintos elementos tienes que usar el operador &. En tu caso sería así:

Precio un: DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]=[Precios].[CODIGO INTERNO]" & " AND " & "[FECHA]>=[precios].[VIGENCIA: DE]" & " AND " & "[FECHA]<=[precios].[VIGENCIA: HASTA]")

E incluso no te haría falta ni siquiera usarlo, pues lo puedes escribir todo seguido:

Precio un: DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]=[Precios].[CODIGO INTERNO] AND [FECHA]>=[precios].[VIGENCIA: DE] AND [FECHA]<=[precios].[VIGENCIA: HASTA]")

Otra forma sería así:

Precio un: DBúsq("PRECIO","[Precios]","[CODIGO INTERNO]=" & [Precios].[CODIGO INTERNO] & " AND [FECHA]>=#" & [precios].[VIGENCIA: DE] & "# AND [FECHA]<=#" & [precios].[VIGENCIA: HASTA] & "#")

Un saludo.


Hola,

sale "No encuentra el nombre 'FECHA', le cambié las comillas y dejo pasar pero sale un Precio $11,614 a todas las referencias. 

Pues si te sale eso de que no encuentra el campo FECHA, es que en tu tabla Precios no tienes un campo que se llame así...

la fecha no esta en la base Precios, esta en la Base de Venta

Entonces no entiendes cómo funciona la función DBúsq().

https://support.office.com/es-es/article/DB%C3%BAsq-funci%C3%B3n-8896cb03-e31f-45d1-86db-bed10dca5937 

El primer argumento es el nombre del campo en el que buscas, en tu caso "PRECIO".

El segundo argumento, la tabla en la que buscas, en tu caso "Precios".

El tercer argumento son criterios de filtrado, en tu caso: que el campo [CODIGO INTERNO] sea igual al valor del [CODIGO INTERNO] de la tabla Precios y el campo Fecha este´entre los valores de los campos [VIGENCIA: DE] y [VIGENCIA: HASTA] de la tabla Precios.

Y obviamente, todos los elementos deben estar en una misma base de datos, no lo puedes usar para buscar desde una base de datos en otra...

A OK, que me recomiendas que puedo hacer, para traer el Precio de cada producto 

Usar DBúsq() es lo que necesitas, pero tienes que indicarle bien los argumentos según lo que tu tengas en tu BD

ok, igual no he podido traer el precio a la base

Como no soy adivino, no te puedo dar la fórmula exacta que necesitas, pero insisto, usar DBúsq() es la manera correcta y más fácil y rápida de conseguirlo...

Si pones aquí una imagen del diseño de tus tablas y cómo están relacionadas, intento decirte algo más concreto

si que pena, todo bien, 

Antonio Cuellar me envío una respuesta que me funcionó, agregó el campo precio en la consulta y en los Criterios colocó: Entre [Precios].[VIGENCIA: DE] Y [Precios].[VIGENCIA: HASTA]

y me sirvió, igual muchas gracias por estar atento a mi pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas