Access - Añadir dato en tablas relacionadas simultaneamente

 
Vista:

Añadir dato en tablas relacionadas simultaneamente

Publicado por carlos (5 intervenciones) el 12/08/2009 17:44:23
Supongamos que añado como tipo de datos, usando el asistente para búsquedas, una tabla con distintos valores.

Por ejemplo, tengo una tabla ciudadanos al que se le puede aplicar alguna de las poblaciones de la tabla Poblaciones ¿Es posible permitir que se pueda añadir EN LA TABLA CIUDADANOS, al añadir un nuevo ciudadano con una nueva población, una población que no exista en la tabla Poblaciones Y QUE SE AÑADA TAMBIÉN A LA TABLA POBLACIONES SIMULTÁNEAMENTE? ¿Cómo?

Intentaré explicar el mismo ejemplo con otras palabras. Supongamos que tenemos una tabla principal Poblaciones y una secundaria Ciudadanos. Pues bien, queremos que se pueda añadir un nuevo registro en la tabla Ciudadanos con una población que no exista en la tabla Poblaciones Y QUE ESTA NUEVA POBLACIÓN SE AÑADA TAMBIÉN A LA TABLA POBLACIONES AUTOMÁTICAMENTE. ¿Se puede? ¿Cómo?

Espero que alguno pueda responderme mi duda. Un saludo y gracias por leer esto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Añadir dato en tablas relacionadas simultaneame

Publicado por Antonio (83 intervenciones) el 13/08/2009 13:10:19
Hola,

Puedes hacerlo en algunos casos (debes mirar la ayuda para las relaciones entre tablas y la inserción de registros en recordsets producto de joins).

Lo que he probado y funciona es el siguiente caso:

Crea dos tablas nuevas, Tabla1 y Tabla2
Tabla1 tiene los campos Id1 (entero largo) y Nombre1 (text)
Tabla2 tiene los campos Id2 (autonumerico), Nombre2 (text), Id1 (entero largo)
La relacion es de 1 a n en tre tabla1 y tabla2 por Id1

Crea una consulta nueva Consulta1
Select Tabla1.Id1, Tabla1.Nombre1, Tabla2.Nombre2, Tabla2.Id1

Puedes ejecutar la siguiente subrutina

Public Sub AgregarAmbos
dim Db as database
dim Sq as string

Sq = "Insert into Consulta1 (Tabla1.Id1, Tabla1.Nombre1, " & _
"Tabla2.Nombre2, Tabla2.Id1) values " & _
"(1, 'Primero tabla 1', 'Primero tabla 2', 1)"
db.execute sq, dbfailonerror
db.close
set db = nothing
end sub

Y veras que te agrega los dos primeros registros de cada tabla. En particular en Tabla2 verás que te ha puesto automaticamente su Id2 = 1 porque se ha definido como autonumérico. En la Tabla1, delibedaramente he omitido definir Id1 como autonumérico.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Añadir dato en tablas relacionadas simultaneame

Publicado por carlos (5 intervenciones) el 15/08/2009 10:35:09
No acabo de entender el código, dices que en la Tabla2, Id2 se pone a 1 porque está definido como autonumérico, pero creo ver que se pone manualmente aquí:

values " & _"(1, 'Primero tabla 1', 'Primero tabla 2', 1)"

De todas formas soy bastante novato en Access, así que algo habré entendido mal.

____
Por otra parte, otro compañero me dio otra idea que puede ser interesante. Como no, la comparto:

Evento Al no estar en la lista (NotInList).
Ejecuta el procedimiento de evento adjunto cuando ocurre el evento NotInList. Puede utilizar esta propiedad para agregar de forma automática un valor nuevo a la lista. Esta propiedad no está disponible en la ficha Buscar en la vista Diseño de la tabla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Añadir dato en tablas relacionadas simultaneame

Publicado por Antonio (83 intervenciones) el 15/08/2009 18:52:32
Hola,

El texto en la primera parte indica a que campos se le van a añadir los valores que aparecen detras de values. Si te fijas veras que el último 1 en values corresponde al campo Tabla2.Id1 (es por el que se relaciona con la tabla1).

Si te das cuenta, entre los campos no he incluido Tabla2.Id2 (la clave de la tabla 2) para que se registre automáticamente como autonumérico que es.

El procedimiento que me dices en el evento NotInList, es otra forma válida. El usuario, cuando está añadiendo un nuevo registro a la Tabla2 (en mi ejemplo) trata de seleccionar en un cuadro combinado el valor correspondiente al campo Tabla2.Id1 pero al no existir trata de escribir uno nuevo y es entonces cuando se provoca el evento correspondiente y donde puedes poner las instrucciones correspondientes a agregar el registro de la Tabla1. Pero si el usuario no intenta escribir uno nuevo nunca se produce ese evento.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Añadir dato en tablas relacionadas simultaneame

Publicado por carlos (5 intervenciones) el 19/08/2009 16:06:52
Vale, gracias. Muy didáctico todo. En este caso creo que acabaré usando el evento NotInList, básicamente para poder dejar al usuario que decida si quiere añadir el nuevo dato o no (y que mire mejor si ya existe ese dato, esto es, para que no exista un "Casa La" y un "La Casa" cuando vienen a ser lo mismo).

Hasta otra, ya soy feliz :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Añadir dato en tablas relacionadas simultaneame

Publicado por quique (293 intervenciones) el 13/08/2009 21:39:33
NO ENTIENDO ¿PQ? DEBES TENER DOS BD PARA ESO.
HARÍA YO UN CAMPO POBLACIONES EN UNA MISMA BD Y TOMARÍA LOS DATOS DESDE UNA CONSULTA , EN UN CBO, (LA QUE DEBIERA TENER TOTALES ACTIVADA) , A LA CUAL NO LE PONDRÍA LIMITAR A LA LISTA.

ES MI MODO DE VER, PERO PIENSO Q ES MJOR DE LO SIMPLE A LO SENCILLO, ACCESS SUELE HACER LAS COSAS MUY SIMPLES Y NOSOTROS LAS COMPLICAMOS.
VOS VERÁS.

QUIQUE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Añadir dato en tablas relacionadas simultaneame

Publicado por carlos (5 intervenciones) el 15/08/2009 10:11:37
Dos tablas, no dos bases de datos. La idea es cuando un usuario inexperto, en un formulario, vaya a seleccionar un pueblo, pueda elegir entre los existentes o crear uno nuevo. Si lo dejo abierto probablemente provoque que haya varios pueblos repetidos porque por una letra Access crea que son distintos.

Por cierto, tengo entendido que es mejor que escribas en minúsculas porque, si escribes en mayúsculas, algunas personas pueden molestarse porque piensan que les estás gritando y, en cualquier caso, cuesta bastante más leer un texto en mayúsculas.

Bueno, gracias por tu respuesta y un saludo ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar