Cuadro combinado que grabe datos no existentes en la tabla de la que toma información

Tengo un formulario con un Cuadro Combinado en el campo [MODELO] que guarda datos del modelo de un vehículo en la tabla principal de Vehículos.

Ese cuadro combinado lee los datos de una Tabla Accesoria (no relacionada con la primera) llamada

T-Modelos que tiene un sólo campo (que es clave principal) denominado [MODELO]

Como hay cientos de modelos de automóviles, motos y camiones; necesito que cuando el operador ingrese en el campo [MODELO] de la Tabla Principal algún modelo de vehículo que no figure en la tabla accesoria T-Modelos, ese valor se incorpore a esa Tabla accesoria.

Usando la lógica de una ayuda anterior que me dio Sveinbjorn para solucionar otro problema, "construí" de algún modo una sentencia que supuestamente lograría esa finalidad... Pero no, no pasa nada, el nuevo valor no se "guarda" en la tabla accesoria.

¿Podrían revisarla y decirme dónde y en qué me puedo estar equivocando? Esta es la línea:

Private Sub Modelo_NotInList(NewData As String, Response As Integer)

Response = acDataErrContinue

CurrentDb.Execute "INSERT INTO T-Modelos(Modelo) VALUES('" & NewData & "')"

Me.Modelo = DLast("Modelo", "T-Modelos")

Me.Modelo.Requery

End Sub

1 respuesta

Respuesta
1

¿Y si cambias el orden de las dos últimas lineas (no lo he probado)? Es decir:

...

Me. Modelo. Requery

Me.Modelo = DLast("Modelo", "T-Modelos")

End Sub

(Si no te va, antes del requery dale un valor nulo u otro que exista.)

De todos modos, creo que tu planteamiento no es del todo correcto, y deberías relacionar las dos tablas, y además, añadirle un identificador único a la tabla T-Modelos y hacer la relación a través de él.

Si quieres puedes ojear este ejemplo, a ver si alguno de los métodos que explico te sirve: Cuadros combinados inteligentes

Probé lo que me recomendaste y el contenido que incorporo al campo MODELO de la Tabla Vehículos no se graba en la Tabla Modelos. También tengo la sensación de que al planteo "le falta algo", así que voy a hojear los ejemplos que me recomiendas para ver si clarifico un poco el tema. Como siempre muchas gracias Sveinbjorn!

Si quieres que le eche un vistazo a lo que tienes, sube una BD con dos tablas similares (no hace falta que tengan todos los campos que tienes) y con un par de datos inventados. Y un formulario como el que tienes, claro.

¡Gracias Sveinbjorn! Sólo dime cómo subo la base de datos aquí, o cómo y dónde te la envío   

Yo suelo usar filebig.net para intercambiar archivos en esta web. Es muy fácil, accedes a esa web, cargas el archivo, te da un link de descarga (el primero de los 4 que ofrece), y lo pegas aquí. Luego yo lo descargo.

Si usas dropbox, gdrive, onedrive... también tienen la opción de crear un enlace para compartir.

Este es el enlace de Google Drive:

https://drive.google.com/file/d/0BwNor9n21YkJNzVWUC1mcGczd2s/view?usp=sharing 

Recuerda cuando lo mires que en cuánto al manejo de Access lo mío es muy básico. En consecuencia agradecería cualquier recomendación que estimes hacer respecto a lo que veas.

Muchas gracias!

No sé donde habrás cometido un fallo, pero con el código que pones en tu pregunta a mi me funciona... Te resubo la BD con él funcionando: http://filebig.net/files/9upayk5Snv

En cuanto a tu BD, solo le eché un vistazo por encima, y mis recomendaciones (para otra ocasión, porque modificar esta puede ser cosotoso) serían:

1º/ Usa identificadores autonuméricos en todas tus tablas. Además de identificar inequívocamente cada registro, mejora la eficiencia de la BD tanto al usar en una tabla un campo de otra, como al escribir código.

2º/ Relaciona las tablas entre sí: Access es un gestor relacional de base de datos, aprovéchalo. Además, haz las relaciones a través de los identificadores del punto anterior.

Un saludo


Gracias por los consejos Sveinbjorn! Realmente no pensé que fuera necesario relacionar las tablas accesorias a las que sólo uso en reemplazo de listas en los cuadros combinados. 

En lo que respecta al tema original de éste hilo, ya bajé la base de datos. Tu agregaste 2 modelos (ZZZZZ e YYYYY), ambos efectivamente quedaron grabados en el campo [MODELO] de la Tabla Principal. Pero no quedaron grabados en el campo [MODELO] de la Tabla T-Modelos.

Mi idea era: estás en el formulario llenando los campos de la Tabla Principal. Llegas al cuadro combinado de MODELO del vehículo y el mismo te lee los datos precargados en la tabla T-Modelos. Si un modelo no está en dicha tabla, al ingresarlo en el cuadro combinado, que no sólo quede grabado en ese campo de la tabla principal, sino que ese dato también se agregue en la tabla T-Modelos, de manera tal que al cargar un nuevo vehículo (o salir un nuevo modelo de determinada marca) al ingrasarlo el operador sólo una vez en el campo MODELO de la TP, también actualice el listado precargado en la tabla T-Modelos.

Ahí me da la sensación de que -como bien lo aconsejas- debería agregar un identificador numérico a la tabla T-Modelos para poder hacer esa operatoria... y es precisamente en ese punto dónde muere mi escaso saber. 

Vale, había entendido que sí te lo guardaba en T-Modelos y no en T-Vehiculos... disculpa.

Haz lo siguiente:

1º/ Modifica el código para que la SQL te quede así:

"INSERT INTO [T-Modelos](Modelo) VALUES('" & NewData & "')"

2º/ Cambia la propiedad "Limitar a la lista" del cuadro combinado a Sí, para que se ejecute el código.

Y listo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas