En un formulario me aparece el número de un campo vinculado en vez del texto asociado

Tengo un formulario "Envios" basado directamente en una tabla del mismo nombre. No hay consulta intermedia ya que quiero que la tabla se actualice con los datos que voy poniendo en el formulario.

El formulario carga 2 informaciones:

  • Datos sobre un producto
  • Datos sobre el destinatario del producto

En ambos casos, la forma de introducir los datos es mediante la selección en un cuadro combinado que "chupa" los datos de terceras tablas. Una vez seleccionado dicho cuadro combinado, tengo un procedimiento de evento que "copia" el resto de los datos asociados. Es decir:

  • Paso 1): Selección en el cuadro combinado del "código de producto", asociado a la tabla "productos". El sistema copia en varios otros campos datos relacionados con el producto (denominación, referencias internas, ... Y proveedor)
  • Paso 2): Selección en otro cuadro combinado del "código del destinatario", asociado a la tabla "clientes". El sistema copia en varios campos datos relacionados con el destinatario (nombre, dirección, telefono, mal,...).

Hasta ahí todo bien.

El problema que tengo es en el dato del PROVEEDOR, asociado al producto y su selección en el paso 1. Y es que el nombre del proveedor no se almacena en la tabla "productos" sino en una tabla secundaria "proveedores". De tal manera que cuando el sistema copia los datos, no me aparece el nombre del proveedor, sino el código numérico (id) asociado.

Si el formulario estuviese basado en una consulta, ya se cómo resolver el problema, añadiendo a la consulta la tabla "proveedor" y cogiendo el dato de ahí, en vez de la tabla "productos", pero al no ser así,...

Mi consulta:

  • ¿Tengo qué cambiar el planteamiento y generar una consulta previa obligatoriamente? ¿Estoy haciendo el indio con esto?
  • ¿Puedo coger el dato de algún otro sitio sin tener que desmontar todo? A este respecto, cuando en el cuadro combinado del paso 1 escojo el producto, ahí si que tengo una consulta asociada a dicho cuadro combinado donde sí que he podido meter la tabla "proveedor" y me aparece correctamente el nombre del proveedor, pero no sé si puedo hacer referencia a esa consulta ni cómo.
Respuesta
2

Quiero pensar que tienes las dos tablas relacionadas por el ID de la tabla Proveedor.

La solución fácil, sería que en la tabla productos configures el campo proveedor como cuadro de búsqueda o "asistente para búsquedas" y lo configures para que coja el id y el nombre del proveedor, y muestre solo el nombre (la primera columna le pones de ancho 0).
Aquí tienes un ejemplo de lo que te digo:

 http://siliconproject.com.ar/neckkito/index.php/component/content/article/96-ejemplos-explicados/ejemplos-de-controles/279-cuadros-combinados 

Muchas gracias Sveinbjorn, realmente así es como lo tengo, pero el tema es un poco más complicado. Te explico:

En la tabla de "productos" si que tengo el combo "proveedor", vinculado a la tabla secundaria de "proveedores" como cuadro de búsqueda, especificando como columna dependiente la segunda, de tal manera que cuando abro esa tabla o un formulario basado en ella, sí que me aparece el nombre del proveedor, ya que lo coge de esa segunda tabla de proveedores --> Correcto.

Pero por otro lado tengo un formulario "envíos" vinculado a través de un combo "id_producto" con la tabla de productos. Cuando despliego el combo (en el que tengo varios campos descriptivos del producto, entre ellos el proveedor) sí que me aparece correctamente el NOMBRE del proveedor). Una vez seleccionado en el combo el id_producto, uso un procedimiento de evento después de actualizar donde a través de varios DLookup copio en el formulario (y por ende en la tabla) los diferentes campos que extraigo de la tabla productos. AQUÍ viene el problema, cuando copio el campo de proveedor en un cuadro de texto normal y corriente, me copia el número!!!

Claro, en la tabla productos lo que se almacena es el número correspondiente al id del proveedor. Realmente sería como "insertar una búsqueda" dentro del comando DLookup, pero no sé si esto se puede hacer, ni cómo.

AQUÍ viene el problema, cuando copio el campo de proveedor en un cuadro de texto normal y corriente, me copia el número!

En el enlace que te adjunté lo explico:

Los cuadros combinados trabajan sólo con un valor, que es el que devuelven. Cuando cogen varias columnas de la tabla (como tu caso), por defecto trabajan con el de la primera columna. Esto lo puedes cambiar en la propiedad "Columna dependiente".

En tu caso, presumo que el origen de la fila de tu combo será algo como "SELECT ID, NombreProveedor FROM Proveedores", por lo que el valor con el que trabaja y que devuelve el combo es el ID, aunque visualmente muestre el nombre del proveedor (eso lo controlas con la propiedad ancho de columna).

En el documento, también explico cómo hacer para sacar el valor de una columna "no dependiente", ya sea a través de la propiedad Columna (Column en VBA) o buscando el dato con DLookUp que se corresponde a ese id.

Como no dices cómo haces para pasar el valor del combo al cuadro de texto, no te puedo decir nada más concreto.

Un saludo!


1 respuesta más de otro experto

Respuesta
2

Alberto: En el Combo de Proveedor, seguro que tienes un Origen de Fila en el que la Columna dependiente es la que te guarda, independientemente e donde te la guarde.

Si tienes el Id del Proveedor y el Nombre, en las Propiedades >> Datos >>Columna Dependiene le pones 2 o el que quieras que te guarde.

Como origen de datos le pones el que correspoda.

No obstante lo anterior, te comento que siempre es mejor guardar un Id que un Nombre.

De modo que según yo lo veo ya lo estás haciendo bién y cuando quieras "Externalizar el Nombre hay varios métodos de hacerlo.

Mis saludos >> Jacinto

Muchas gracias Jacinto, pero el tema está en que no se trata de un combo sino de un cuadro de texto normal y corriente. Te explico:

En la tabla de productos si que tengo el combo "proveedor", vinculado a la tabla secundaria de proveedores. Como bien dices, al definir la columna dependiente, cuando abro esa tabla o un formulario basado en ella, sí que me aparece el nombre del proveedor, ya que lo coge de esa segunda tabla de proveedores --> Correcto.

Pero por otro lado tengo un formulario "envíos" vinculado a través de un combo "id_producto" con la tabla de productos. Cuando despliego el combo (en el que tengo varios campos descriptivos del producto, entre ellos el proveedor) sí que me aparece correctamente el NOMBRE del proveedor). Una vez seleccionado en el combo el id_producto, uso un procedimiento de evento después de actualizar donde a través de varios DLookup copio en el formulario (y por ende en la tabla) los diferentes campos que extraigo de la tabla productos. AQUÍ viene el problema, cuando copio el campo de proveedor en un cuadro de texto normal y corriente, me copia el número!!!

Claro, en la tabla productos lo que se almacena es el número correspondiente al id del proveedor. Realmente sería como "insertar una búsqueda" dentro del comando DLookup, pero no sé si esto se puede hacer, ni cómo.

Alberto: Te resumo una manera práctica de Trasladar los valores de un Combo a valores de TextBox.

Intento aproximarme a los Nombres que tu citas: Formulario >> Envios, Combo CboProductos.

Como Origen de la fila:

SELECT IdProducto, NombreProducto, PrecioProducto, IdProveedor, NombreProveedor FROM Productos ORDER BY IdProducto;

Con ésta situación el valor de los Indices es el siguiente:

IdProducto >> 0 ... NombreProveedor >> 4

Si ahora Tengo 5 TextBox en el Formulario que se llamen:

TxtIdProducto, TxtNombreProducto, Txt... etc

Para que me muestre en cada uno su valor según el IdProducto elegido hacemos

Private Sub CboProductos_AferUpdate()
Me.TxtIdProducto = Me.CboProductos.Column(0)
...
...
Me.TxtIdProveedor = Me.CboProductos.Column(3) 'Este sería el Número
Me.TxtNombreProveedor = Me.CboProductos.Column(4) 'Este sería el Texto
End Sub

Y aquí segun yo aprecio, no necesitas buscar. Aunque también hay otras formulas entre ellas la de Buscar.

Mis saludos >> Jacinto

¡Gracias!

Guau! Impresionante como siempre Jacinto. Desconocía lo de de referir a las distintas columnas de un combo con la propiedad .column() Solución muy clara y sencilla.

Resuelto! Muchísimas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas