Actualización

En una aplicación de pedidos de compras, tengo 2 tablas, encabezado y lineas. Encabezado está en un formulario donde pido el código de proveedor por un cuadro combinado. Lineas es un subformulario donde pido código de producto y cantidad. El código de producto es otro cuadro combinado que tiene en el origen de la fila lo siguiente:SELECT PRODUCTOS. Cod_producto, PRODUCTOS. Nom_prod, PRODUCTOS. Marca, PRODUCTOS. Desc_prod, PRODUCTOS. Cod_prov FROM PRODUCTOS WHERE (((PRODUCTOS. Cod_prov) like Formularios!cabezapedido![cod_proveedor])) ORDER BY PRODUCTOS. Nom_prod;. Cuando intento completo el encabezado e intento seleccionar los productos del proveedor indicado en el encabezado, el cuadro combinado de productos no me muestra nada. Pero cuando cambio la vista de subformulario a vista hoja de datos, entonces me muestra los productos de dicho proveedor. Aunque le he puesto que la vista predeterminada sea hoja de datos, tengo que cambiar a vista formulario y otra vez a vista hoja de datos. Ahora mismo estoy un poco estancado en el asunto. Gracias de antemano por lo menos por leer mi problema.
Respuesta
1
Ese tipo de formulario subformulario funciona muy bien en Access. Intentemos resolver tu problema. Lo que sigue supone versión 2003.
1) En la definición de las tablas, ¿tenés encadenados los campos código de productor y código de proveedor?
Es decir en la tabla Encabezado, si la abrís en modo diseño y seleccionás el campo cod_proveedor y mirás la ficha Búsqueda, ¿está conectada a la tabla Proveedor?
Y en la tabla Lineas en el campo cod_producto ¿está conectado con la tabla Productos?
Esto allana mucho
Debajo te pego los pasos para hacerlo (bajo el titulo "Cómo definir una clave foránea") por si no lo has hecho.
Lo que yo hago en casos así:
1) Compactar y reparar, esto hay que hacerlo sistemáticamente para ordenar los datos internamentes (Desde la ventana base de datos Herramientas/Utilidades .../Compactar y reparar)
2) Hacer el formulario y su subformulario de nuevo usando el asistente. A veces elimino el subformulario, lo hago aparte y lo agrego nuevamente al formulario principal.
En caso de que no hayas resuelto el problema contame lo siguiente:
¿Las tablas están relacionadas? ¿Cómo son las claves? ¿El formulario tiene código? ¿Con qué versión trabajás?
Cordialmente, Marciana
Cómo definir una clave foránea
Supongamos que tengo una tabla con una lista Productos, dentro de los campos hay un campo IdProveedor y hay otra tabla que tiene la lista de Proveedores.
Supongamos que la tabla Proveedores tiene el primer campo
IdProveedor de tipo autonumérico y el segundo campo
NombreProveedor de tipo texto
Queremos que desde la tabla Productos se vea el campo IdProveedor como un cuadro combinado que al desplegarlo muestre (y en el caso de alta permita seleccionar) la lista de los Proveedores (los nombres) ordenada alfabéticamente.
Para lograr esto hay que hacer lo siguiente:
1) En la tabla Proveedores el campo IdProveedor debe ser clave
2) En la ventana Relaciones vincular los campos IdProveedor de ambas tablas, Productos y Proveedores con Integridad referencial (se arrastra el campo IdProveedor desde una tabla sobre el otro IdProveedor de la otra tabla). No es necesario que tengan el mismo nombre pero simplifica. Sí es importante (indispensable) que tengan el mismo tipo de datos.
Se debe visualizar una línea que une ambos campos que tienen un 1 del lado Proveedor y el símbolo infinito en el otro extremo.
3) Crear una consulta con la tabla Proveedores que tenga todos los campos en el mismo orden pero seleccionar orden ascendente en el campo Nombre del proveedor. Supongamos que la consulta se llama ProveedoresOrdenados
4) Abrir la tabla Productos en modo diseño
5) Seleccionar el campo IdProveedor
6) Seleccionar la solapa Búsqueda (abajo junto a propiedades Generales)
Se debe ver un solo renglón.
7) Cambiar cuadro de texto a cuadro combinado.
Se deben ver varios renglones.
8) En "Tipo de origen de la fila" Elegir Tabla/Consulta
9) En "Origen de la fila" elegir la consulta ProveedoresOrdenados
10) En "Columna dependiente" dejar 1
11) En "Número de columnas" anotar 2
12) En ancho de columnas escribir (sin las comillas) "0;2"
El 0 dice que no se muestre el campo IdProveedor, el 2 determina el ancho del campo Nombre de Proveedor, si el campo es muy extenso probar con 3 o 4.
13) El resto queda como está.
Poner la tabla en vista Hoja de datos y probar el campo IdProveedor, si se hace una consulta o un formulario sobre esta tabla se verá el campo IdProveedor como un cuadro combinado que muestra la lista de Proveedores ordenada alfabéticamente.
____________________________________________________________________
Creo que no me he explicado bien. Incluso yo mismo me he hecho un lio al leer lo escrito. Espero que ahora lo haga mejor. Tabla encabezado con campos: pedido (autonum-clave), fecha(date) y proveedor(numérico) relacionado con tabla de proveedores cod_proveedor(autonum). Tabla Lineas:línea(autonum-clave), cod_pedido(num) relacionado con encabezado. Pedido, cod_producto (num) relacionado con productos. cod_prod(autonum-clave). Lo que pretendo es que al seleccionar el proveedor en el encabezado, en el campo producto del subformulario solo aparezcan los productos del proveedor del encabezado, ya que solo se creará un documento de pedido por proveedor. Por cierto, tu respuesta ha sido increíble. Como dicen los gabachos ¡Chapeau!.
Bien, necesito que contestes todos los puntos que te envié (compactar y reparar, etc). Mi respuesta anterior no cambia.
Te recomiendo que pongas en práctica los pasos Cómo definir una clave foránea.
En la tabla encabezado el campo proveedor es una clave foránea (relacionada con el campo cod_proveedor de la tabla proveedores)
De todos modos me parece advertir un problema en tus datos (tuve que leerlos varias veces para comprender):
Hay cuatro tablas: Encabezado, Líneas, Proveedores y Productos
Con los datos que alcanzo a comprender me parece que la tabla Líneas debería tener como campo clave dos campos linea y cod_pedido (seleccionas los dos campos y señalás la llave para convertirlos en clave).
Finalmente, es importante que comprendas que las bases de datos son algo así como un mecanismo de relojería, te permiten resultados maravillosos pero hay que respetar las reglas de diseño y de uso, si no lo hacés no funciona.
Aunque un poco tarde te respondo. La versión es 2003. Las tablas están relacionadas de la siguiente forma:Cabeza. Pedido (autonum clave) con Lineas. cod_pedido (num)- Proveedores. Proveedor (autonum clave) con Cabeza. cod_proveedor (num)-Productos. Producto (autonum clave) con Lineas. cod_producto (num). Todas las relaciones tienen integridad referencial. Los formularios no contienen ningún código. He compactado y reparado. He definido la clave foránea como me indicabas. Sigo con el mismo problema, no me aparecen únicamente los productos del proveedor indicado en la tabla Cabeza. Proveedor.
Una vez que hayas redefinido las propiedades de los campos de las tablas deberías generar nuevamente el formulario y subformulario. No olvides que los cambios hechos en la tabla no pasan automáticamente al formulario o informe hecho con anterioridad a dicho cambio.
Te aconsejo usar el asistente para la creación de formularios. Crea nuevamente el formulario y subformulario. No elimines el anterior. Simplemente crealo nuevamente con los campos mínimos para ver que funciona o no.
He hecho lo que me aconsejas. No he borrado formularios y he creado de nuevo formulario y subformulario. Seguimos en las mismas. Selecciono el proveedor en el formulario cabeza y al pasar al subformulario líneas, no aparecen los productos de ese proveedor, sólo al cambiar a vista hoja de datos me aparecen los productos del proveedor seleccionado en la cabeza. Si necesitas que te envíe alguna cosa dímelo. No sé si replantear el problema o volver a empezar desde cero. Gracias de antemano.
Dejame verlo nuevamente. M
Gracias por el esfuerzo y tus consejos. He aprendido algunas cosas que no sabía ni que existían. Tus explicaciones son verdaderamente instruyentes. Un saludo y hasta la próxima. Mi problema continua pero estoy buscando información en los libros que aunque no lo ponen todo, si ponen bastante. Un saludo y hasta la próxima.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas