Quiero pasar una variable o un literal como criterio de DLOOKUP

Tengo una tabla de consumibles que tiene el campo Id_Modelos, Con_Nombre, Con_Nombre_Cod y Con_Stock.

En un formulario tengo tengo un cuadro de texto llamado txt_Stock_Tambor.

Utilizo el siguiente código:

txt_Stock_Tambor = DLookup("[Con_Stock]", "[tb_Consumibles]", "Id_Modelos='" & cboModelos.Column(2) & "' AND Con_Nombre='" TAMBOR "'")

El primer criterio lo coge sin problema pero el problema es que en el segundo criterio después del AND no consigo hacerlo funcionar.

Con que me asignara el literal TAMBOR o el contenido de una variable tipo string a Con_Nombre creo que sería suficiente.

Quiero mostrar en cuadro de texto el valor numerico que contiene el campo Con_Stock utilizando como criterios de búsqueda el contenido del combo cboModelos. Column(2) y el contenido del campo tipo string Con_Nombre o utilizando una variable intermedia si fuera necesario.

2 Respuestas

Respuesta

El segundo criterio es una constante (mal construida si es texto) pero la cadena comienza finaliza como una única expresión.

"' AND Con_Nombre='" TAMBOR "'"

Si el valor es una constante y es un texto:( TAMBOR) se debería escribir así:

"' AND Con_Nombre= 'TAMBOR' "

Si Tambor es una variable (igualmente de texto) así:

"' AND Con_Nombre='" &  TAMBOR & "'"

Las variables necesitan ser evaluadas en tiempo de ejecución, si forman parte literal del texto (están dentro de las comillas que definen el conjunto) no podrán ser evaluadas.

Es lo mismo que se hace con el primer criterio ¿por qué no se aplicó con el segundo?:

 "Id_Modelos='" & cboModelos.Column(2) & "' 

He puesto lo que me has indicado y sigue dando error. 

Llevo una semana intentando variantes de comillas, asignando literales, usando variables y no consigo que funcione

Este error es utilizando el literal.

Este es utilizando la variable que compruebo que tiene el valor correcto para luego hacer el DLOOKUP.

Muchas gracias.

No aprecio que se esté utilizando la sintaxis publicada como ejemplo (que es correcta)

Al literal TAMBOR le falta una comilla simple para que Access lo interprete como tal (ha de llevar una comilla simple al inicio y otra al final, tiene que ser un texto 'entrecomillado' )

El mensaje que devuelve como error es muy claro al respecto.

Cierto es que le faltaba la comilla simple, pero aún poniéndola, sigue dando error.

¿Qué es lo que dice el error?

Que no coincide el tipo de dato y si partimos de que un dato tiene el tipo correcto (el campo 'con_nombre') y se le impone a TAMBOR como texto, Con_nombre será de otro tipo (posiblemente numérico).
No se puede comparar tipos de datos diferentes, es como utilizar una red de cazar mariposas para transportar agua.

Indicar que tipo de dato es cada uno de los que intervienen (pero el tipo de dato declarado en la tabla a la que pertenece) y así se le podrá asignar el adecuado para que funcione sin errores.

Normalmente la línea con el error se destaca cuando se produce (y más en tiempo de ejecución) ¿No tiene tinta esa máquina? O acaso la línea es otra y por eso no se llega a la solución adecuada.

Buenos días.

A ver si puedo aclarar el tema.

Esta es la estructura de la tabla.

Datos que contiene la tabla.

Este es el error.

Esta es la línea donde da el error.

No se que más información puedo aportar.

Muchas gracias.

Tengo la impresión de que el tambor suena bien...

En la tabla 'tb_consumibles' el campo 'id_modelos' es de tipo numérico, pero en los datos de la tabla se muestra un texto

Lo que hace suponer que se utiliza un combo, se guarda el ID numérico y se muestra el texto asociado, pero el dato real es un número y -en la SQL- se le aplica formato texto (habría que eliminar las comillas) ... siempre y cuando la columna 2 del combo devuelva un número y no un texto si el error es el número de columna se le adjudica el correcto -el que devuelve el ID numérico- y debería funcionar.

Un consejo para una supuesta duda similar:

Cuando exista más de una condición, aplicarlas (en la misma expresión) primero se verifica una, luego la otra y si ambas funcionan ... ambas a la vez con el AND (o el OR si fuera el caso).

Es un método que sigue la línea del Cesar, el gran conquistador romano: "Divide y vencerás".

La expresion deberia quedar asi:

txt_Stock_Tambor = DLookup("Con_Stock", "tb_Consumibles", "Id_Modelos=" & cboModelos.Column(?) & " AND Con_Nombre= 'TAMBOR '")

Solo hay que sustituir el interrogante por la columna adecuada del combo, la que se guarda en la tabla: el numero

Eliminar el espacio que se fue de más en Tambor: 'Tambor ' >>>> 'Tambor'

En base a los datos publicados- me pregunto si no sería más adecuado localizase 'Tambor', pues en ese campo también aparece "tambor - tóner", si bien es en otro modelo de impresora.

Se puede utilizar LIKE (hay muchos ejemplos publicados) o una alternativa "InStr" que localiza el texto en una cadena, de localizarlo indica donde comienza y si no lo localiza devuelve un cero:
= 0  >>>  Falso
<> 0 >>> True

.... And InStr([Con_Nombre], "Tambor")

¡Muchas Gracias! 

Pero soy incapaz de hacer funcionar algo tan sencillo.

¿Podría mandarte la base de datos y le echaras un vistazo?

Gracias.

No comparto la metodología de consultas particulares (y me parece inapropiada la tendencia a imitar una especie de 'servicio de pizza a domicilio').

Puedes publicarla en un servidor ftp (sin datos que puedan ser privados) y es muy probable que obtengas más de una solución, o al menos será un ejemplo de utilidad para más de un lector.

Mantén privada tu dirección de correo electrónico, nunca se sabe quien la puede utilizar como puente para actos ilícitos (generalmente Spam).

Respuesta

¿Has probado a poner simplemente

..........and  Con_Nombre=""TAMBOR""")

Es decir, delante de tambor comillas, comillas y detrás comillas, comillas, comillas. Éstas últimas son las que cierran la instrucción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas