Como puedo relacionar un evento de un cuadro combinado?

Tengo un formulario con un cuadro combinado "Proveedor". Cuando selecciono proveedor "Pepe" se rellenan solos el C.I.F. Y otros datos. Esto es lo que he puesto en el evento del cuadro combinado para el CIF: CIF_Proveedor = DLookup("C_I_F", "Proveedores", "id_proveedor=" & Proveedor.Value). Hasta aquí todo ok.

El problema es que en la tabla "Factura" se me registraba el Id_proveedor y no el "Nombre". He cambiado la columna dependiente de 1 a 2. Ahora me registra el nombre pero el evento ya no funciona.

"error de sintaxis (falta operador) el la expresión de consulta "id_proveedor=Pepe"

¿Cómo puedo arreglar esto?

1 respuesta

Respuesta
2

Cuando el criterio es de texto, tienes que ponerlo entre comillas simples, así:

CIF_Proveedor = DLookup("C_I_F", "Proveedores", "id_proveedor=¡" & Proveedor.Value & "'")

Un saludo.


     bit.ly/ForoNkSv 

Llevo haciendo varias pruebas y no se donde colocas las dobles comillas y donde simples. No lo distingo bien en lo que me has contestado. Tu expresión es la misma que la mía menos que:

- has insertado un punto de exclamación al revés después de id_proveesor= (¿como se inserta?)

- al final de mi expresión ....Value) has añadido & + una serie de comillas (no se cuantas son ni de que tipo)

Gracias

Disculpa, que se me coló una admiración donde no era:

CIF_Proveedor = DLookup("C_I_F", "Proveedores", "id_proveedor='" & Proveedor.Value & "'")

La cosa va así:

Después del signo igual, va comilla simple y luego comilla doble.

Y antes del paréntesis de cierre, va comilla doble - comilla simple - comilla doble

Ahora me sale otro mensaje: "Se ha producido el error '3464' en tiempo de ejecución: No coinciden los tipos de datos en la expresión de criterios."

Probablemente sea porque id_proveedor es un número y no un texto...

Si me explicas bien el problema y cómo tienes montadas y relacionadas las tablas, te daré una solución, porque no me queda claro lo que quieres y me parece que andas "mezclando peras con manzanas"... y cambiar la columna dependiente del cuadro combinado no es la solución...

O mejor aún, si me puedes adjuntar una copia de tu BD para verlo... (puede subirla a dropbox, filebig...) y poner aquí el enlace de descarga

Tengo:

Tabla1 Proveedores: campo 1 "id_proveedor" clave y autonumérico, campo2 "Nombre" tipo Texto, campo3 "C_I_F" tipo Texto,....

Tabla 2 Facturas: campo1 "id_facturas" clave y autonumérico,..., campo5 "Proveedor" tipo Texto, campo6 "CIF_Proveedor" tipo texto,....

Formulario "Registro_factura": campo6 cuadro combinado "Proveedor" origen del control "Proveedor" origen de la fila SELECT [Proveedores].[Id_proveedor], [Proveedores].[Nombre] FROM Proveedores ORDER BY [Nombre]; tipo origen de la fila Tabla/Consulta columna dependiente 2 limitar a la lista y heredar lista de valores SI

campo7 cuadro de texto CIF_Proveedor - Origen del control CIF_Proveedor

¿Te puede ayudar esto?

La relación entre las tablas "Proveedores" y "Facturas" es de "id_proveedor" a "Proveedor"

Según lo que dices, tal como lo tenías en un principio tendría que funcionarte perfectamente:

El cuadro combinado trabajaba con el id_proveedor (aunque muestre el Nombre), porque tenía como columna dependiente la 1.

Al poner:

CIF_Proveedor = DLookup("C_I_F", "Proveedores", "id_proveedor=" & Proveedor.Value)

Te pondrá en el campo CIF_Proveedor el valor del campo CIF de la tabla Proveedores del proveedor cuyo id_proveedor sea el seleccionado en e l cuadro combinado.

Para el nombre habrías de hacer lo mismo con:

Proveedor = DLookup("Nombre", "Proveedores", "id_proveedor=" & Proveedor.Value)

Pero insisito, dejando como columna dependiente la primera (el id) en el cuadro combinado.

Efectivamente si dejo la columna dependiente 1, los diferentes campos vinculados con eventos, entre los cuales el CIF, funcionan perfectamente. El problema es que en el campo proveedor se me graba el id_proveedor y no el nombre del proveedor. Si cambio a columna dependiente 2 no funcionan los vínculos pero si graba correctamente el nombre del proveedor.

Obviamente, porque estás relacionando las dos tablas por un número, el id_proveedor. Si quieres guardar el nombre, has de usar otro campo, y hacer lo mismo que con el cif.

Lo que puedes hacer es configurar el campo proveedor de Facturas como cuadro combinado y que muestre (modificando la propiedad ancho de columnas) el nombre del proveedor...

En cualquier caso, desde un punto de vista de base de datos relacional, lo que haces es incorrecto: si ya tienes los datos del proveedor en la tabla Proveedores, no deberías repetirlos en la tabla Facturas, tan solo registrar en ella el id_proveedor, y a partir de la relación entre las tablas, ya obtienes los datos cuando los necesites.

Hola Sveinbjorn,

Al final pude resolverlo añadiendo otro campo Proveedor2 en facturas. El cual relacionase el id_proveedor con el nombre y dejando el otro campo proveedor invisible.

Hacia mucho tiempo que no usaba access y estoy algo verde todavía. El hecho de tener 2 campos "proveedor" es que uno, el de la tabla "proveedores" me sirve para el cuadro combinado restringiendo la elección de los usuarios a una lista cerrada de proveedores, y el otro campo "proveedor" de la tabla facturas me sirve para ir registrando los datos de las facturas con el proveedor elegido de la otra tabla. No se si es la manera correcta?

Un saludo y gracias por la ayuda. 

P.S. Todavía no he podido ponerme con la otra ayuda que me has prestado respecto a filtrar consultas. En cuanto me ponga te informo de como me ha ido

Me alegra ver que lo has solucionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas