Abrir formulario mediante un ID diferente

Os comento. Tengo dos tablas, sedes y contactos. Tengo en un formulario los datos de la sede y mediante un cuadro de lista (Se visualiza como una tabla) visualizo los diferentes contactos que tiene la sede.

Gracias al aporte recibido en este foro gracias a Sveinbjorn, conseguí relacionar los dos IDs que tienen las tablas (IdSede y IdContacto, con una relación común, IdSede) y poder visualizar los contactos según la sede en que me encuentre.

El problema que tengo es para crear el código para agregar nuevos contactos y que se asocien a la sede actual. Es decir, tengo un botón que me permite crear registros y que se asocien al IdSede 05. Si me voy al IdSede 06, me crea registros para el IdSede 06.

El problema es que el botón no funciona. Cuando lo creo el registro, me lo guarda pero hace un refresco y me envía al registro anterior. Además que no asocia el IdContacto con el IdSede.

Este es el código, me permite usar el mismo formulario para crear y para visualizar, pero se que falta algo, pero por más que pruebo no doy con ello.

DoCmd.OpenForm "FichaContacto", acNormal, "", "1=0", , acDialog, WHERE IdSede=" & Me.IdSede & "
On Error Resume Next
DoCmd. Requery ""

1 respuesta

Respuesta
2

Sandro: Para abrir un Formulario >>

DoCmd.OpenForm "FichaContacto", acNormal, , "IdSede = " & Me.IdSede, acFormAdd

Si la sede es un Número.

Si fuera un dato de tipo Texto tendrias que poner >>> "IdSede = '" & Me.IdSede & "'"

Un saludo >> Jacinto

Buenos días Jacinto,

Sigue sin funcionar. He introducido tu código y sigue sin relacionar el IdSede con el IdContacto.

Si me voy a la tabla contactos, veo que se ha creado el registro pero no tiene IdSede... No sé porque no se relacionan de manera automática al crear el nuevo registro...

Gracias de antemano.

Sandro: Ignoro como tienes hecho el montaje para esas operaciones, porque con la explicación de arriba inicial al menos a mí me queda alguna laguna.

En mi caso haría un "Equivalente" a la introducción de Líneas de Productos en un Pedido.

Si quieres dale una mirada a la Base Neptuno de Microsoft, que entre otros sitios la puedes encontrar en la cabecera de ésta Página de la Web de Emilio Sancha.

Podrás ver las relaciones entre Tablas y el tratamiento de datos que hace. Saludos >> Jacinto

Buenas Jacinto,

Perdón por mi explicación tan banal... A veces no es tan fácil explicar lo que se pretende. La idea es que tengo dos tablas: Sedes y Contactos. Sedes tiene el IdSede y Contactos tiene IdContacto más otro IdSede (Formato numero) y con una relación a la primera tabla.

Tengo un formulario Sedes. Dicho formulario contiene un cuadro de lista que esta asociado a la tabla Contactos. Lo que pretendo es que cuando este en este formulario viendo, por ejemplo, los datos de la sede 06, me permita añadir los contactos. Es decir, los contactos serán almacenados en la tabla Contactos con su Id correspondiente pero asociados al IdSede 06.

Eso es lo que no consigo. La base de datos Neptuno ya la había revisado, pero le echaré un ojo de nuevo.

Si te ocurre alguna idea te lo agradeceré enormemente. 

Gracias de antemano.

Sandro: Me tomo nota y a la que tenga un hueco te preparo un ejemplo del proceso y te pongo aquí el enlace. Un saludo >> Jacinto

Buenos días Jacinto

Muchas gracias de corazón por la ayuda brindada. Esperaré tu ejemplo aunque intentaré por mi lado encontrar una solución.

Gracias de nuevo.

Sandro: Te dejo el nlace con el ejemplo que te comenté.

http://www.mediafire.com/file/z1xe40ro2y7qdwd/SedesContactSandro.rar/file 

Lo he hecho lo más simplificado que he podido, pero sin seguir el camino que ya tienes.

No dré que no se correcto, pero a mi modo de ver no es el más indicado. Saludos >> Jacinto

Buenas Jacinto,

Acabo de ver tu ejemplo. Aunque está genial, siento decirte que no es lo que ando buscando. Es decir, tu método esta genial pero me han dicho que lo quieren como te explique antes: Cuadro de lista personalizado con botón para que se abra un nuevo formulario y añadir más contactos.

Lo que necesito es comprender porque no se relacionan los IDs entre Sede y Contacto. Que es lo que le falta a mi código para que se relacionen.. Y me están presionando.

De verdad, gracias por el ejemplo, pero necesito un código para el botón que me permita relacionar estos dos parámetros.

Sigo indagando pero no hay manera.

Gracias.

Sandro: Debe ser algo sencillo, pero sin tener los objetos delante a mi se me hace difícil darte la solución adecuada. Si quieres y tu Base no tiene aún datos personales/confidenciales, es poner aquí un enlace para descargarla e intentar darte la solución.

Si tienes datos del tipo que menciono arriba, puedes cambiarlos por algunos inventados.

Y otra alternativa si no quieres colgar la BD aquí es enviármela a [email protected]

Un saludo >> Jacinto

Buenas Jacinto,

Te envío mi BBDD modificada. Todos los datos son ficticios y he quitado todo aquello que pueda relacionar a mi empresa.

http://www.mediafire.com/file/fdy1c1bsn75ei5b/BBDD_Sedes_Sandro.zip/file 

Como verás, en la ficha Sede hay dos pestañas. En la segunda pestaña está el cuadro de lista para mostrar los contactos, pero el botón para crear uno nuevo no asocia los IDs Oficina y Sede.

Si algún código falla te pido disculpas, he tenido que modificarlos y puede que haya tenido algún despiste. 

Gracias de antemano.

Bueno Sandro: Ahi tienes la BD modificada, "solo" en el proceso de Alta de nuevos contactos.

http://www.mediafire.com/file/s6cy81lr3pkry7c/BBDDSedesSandroModif.rar/file 

Las modificaciones las tienes comentadas en el Código.

Antes de ver los Objetos que intervenían en ese proceso ya te comenté que me parecia un poco raro. Ahora opino que "a mi" me parece muy raro, pero por supuesto que es correcto.

Supongo que para acceder al resto de Sedes que no sea la primera tendrás alguna metodología, porque de acuerdo a lo que veo solo puedes mostrar una.

Por último verás que te he añadido unos cuadros de Texto que identifiquen el IdDelegación. Puedes ocultarlos si quieres, pero no quitarlos. Un saludo >> Jacinto

Buenas Jacinto,

Muchísimas gracias por toda tu ayuda... Ahora si funciona como debería de funcionar.

Admito que es extraño la metodología que utilizo, pero en mi trabajo es la que necesitamos para poder visualizar los datos.

Para acceder al resto de sedes es lo mismo, doble click, abres su formulario de datos, los compruebas, cierras y vas al siguiente. Tiene que ser así debido a la cantidad de datos que contienen nuestras sedes. 

No obstante, guardaré tus consejos por si alguna vez tengo que aplicarlos.

Muchas gracias de nuevo.

De acuerdo Sandro: Me alegra que al final te funcione como tu necesitabas.

Lo demás entonces es secundario. Por aquí andamos. Saludos >> Jacinto

Buenas Jacinto,

Perdona que te moleste nuevamente, pero ahora estoy creando el código para eliminar el contacto. Me he dado cuenta que para eliminar la sede antes tengo que eliminar los contactos asociados a la sede.

Para ello, he creado este código.

 If MsgBox("¿Está usted seguro que desea eliminar el registro seleccionado?", 1 + 32, "AVISO") = vbOKCancel Then
        CurrentDb.Execute "DELETE * FROM Contactos WHERE Contactos.IdDelegacion = " & Me.IdDelegacion & "
        CurrentDb.Execute "DELETE * FROM Sedes WHERE Sedes.IdDelegacion = " & Me.ListaMadrid & "", dbFailOnError
        Me.ListaMadrid.Requery
        MsgBox "El registro seleccionado fue eliminado satisfactoriamente", vbInformation, "AVISO"
        Me.Refresh
    Else
        MsgBox "El registro seleccionado no fue eliminado", vbInformation, "AVISO"
    End If

Pero por algún motivo no funciona en la sentencia de DELETE * FROM Contactos. Sé que hay algo que está mal concatenado pero no lo veo.

Si conoces alguna otra forma o idea te lo agradeceré también.

Perdona de verdad las molestias.

Saludos.

Sandro: Deduzco que ese código lo quieres poner en un Botón del Formulario Sedes.

Si eso es así debes identificar de forma concreta dónde está el IdDelegacion.

If MsgBox("Has elegido ELIMINAR la Delegación marcada y TODOS sus Contactos." & vbCrLf & vbCrLf & "¿Quieres seguir con el proceso?", vbYesNo) = vbYes Then
        CurrentDb.Execute "DELETE * FROM Contactos WHERE Contactos.IdDelegacion = " & Me.ListaMadrid.Column(0), dbFailOnError
        CurrentDb.Execute "DELETE * FROM Sedes WHERE Sedes.IdDelegacion = " & Me.ListaMadrid.Column(0), dbFailOnError
        Me.ListaMadrid.Requery
        MsgBox "El registro seleccionado fue eliminado satisfactoriamente", vbInformation, "AVISO"
        Me.Refresh
    Else
        MsgBox "El registro seleccionado no fue eliminado", vbInformation, "AVISO"
    End If

Si van surgiendo dudas, mi sugerencia es que generes nuevas preguntas y de esa manera tu puedes beneficiarte de más de una respuesta y otros usuarios se benefician también, porque si se va alargando la letra de una sola pregunta, casi nadie va aleerla. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas