Imprimir página | Cerrar ventana

Cuadro de diálogo 'importar objetos'

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84567
Fecha de impresión: 28/Marzo/2024 a las 11:33


Tema: Cuadro de diálogo 'importar objetos'
Publicado por: simbad
Asunto: Cuadro de diálogo 'importar objetos'
Fecha de publicación: 20/Junio/2019 a las 01:29
Hola:

Alguien sabe decirme cómo puedo invocar al cuadro de diálogo 'importar objetos' desde VBA?

Necesito poder seleccionar gráficamente la tabla, consulta, etc. que quiero importar a la BD actual.





Respuestas:
Publicado por: jilo
Fecha de publicación: 20/Junio/2019 a las 08:24
hola Simbad,
Esto es algo inusual, bajo mi experiencia. Me interesaría saber el propósito. Ya que si necesitas importar lo puedes hacer en modo diseño (sólo hay que hacer una importacion por objeto)y no dejas abierto a que nadie importe lo que no deba, por ejemplo.
De todos modos, mira el método DoCmd.TransferDatabase el parametro acObjetType

DoCmd.TransferDatabase (TransferType, DatabaseType, DatabaseName, ObjectType, Source, Destination, StructureOnly, StoreLogin)



-------------
Espero te sirva !!!!!!
Iñaki


Publicado por: simbad
Fecha de publicación: 20/Junio/2019 a las 09:40
Hola jilo:

Gracias por tu respuesta.

La finalidad es, por ejemplo, poder importar (o vincular) una tabla de la que no se conoce el nombre con certeza. Mediante el método 'DoCmd.TransferDatabase...' es necesario darle un nombre 'fuente' que si no coincide con ninguno de los objetos devolverá 'error'.

Lo que necesito es poder visualizar los objetos de la fuente para poder elegir el que necesito y así capturar su nobre para poder importarlo. Con el cuadro de diálogo entiendo que lo podría hacer desde un formulario en ejecución.

El tema seguridad lo puedo garantizar con una contraseña de administrador para no dejar nada abierto y al azar, evitando que alguien pueda importar lo que no debe. 

Atentamente,
Simbad.


Publicado por: xavi
Fecha de publicación: 20/Junio/2019 a las 11:47
DoCmd.RunCommand acCmdImportAttachAccess

En cualquier caso yo también tengo mis reservas en dejar esa puerta abierta a los usuarios. 


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: simbad
Fecha de publicación: 20/Junio/2019 a las 12:38
Gracias Xavi:

Gracias a tu respuesta 'DoCmd.RunCommand acCmdImportAttachAccess' he encontrado la solución:

'DoCmd.RunCommand acCmdLinkTables'

Respecto a la seguridad, insisto, la aplicación que desarrollo es para el administrador, es decir que los usuarios no tendran acceso a ella con lo que no debiera haber peligro. El administrador tendrá acceso a las tablas en modo vinculado para evitar que la aplicación de administración aumente de peso. Los usuarios, por su lado tendran su aplicación sin opciones de modificación ni de diseño.

Gracias Xavi


Publicado por: simbad
Fecha de publicación: 20/Junio/2019 a las 12:57
Upss!, en caso de pinchar en la opción cancelar del diàlogo salta el error '2501' (la acción RunCommand se canceló).

¿Como capturo la cancelación para decirle que acabe con End o Exit sub?, ¿sólo se puede hacer con control de errores?.


Publicado por: xavi
Fecha de publicación: 20/Junio/2019 a las 13:14
A mi lo que no me funciona es acCmdLinkTables....

-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: simbad
Fecha de publicación: 25/Junio/2019 a las 00:08
Siguiendo con el cuadro de diálogo para importar objetos, al usar 'DoCmd.RunCommand acCmdLinkTables', ¿es posible capturar el nombre de la tabla seleccionada?, ¿y la ruta a la BD de la tabla?


Gracias.


Publicado por: xavi
Fecha de publicación: 25/Junio/2019 a las 09:42
Hasta dónde yo se, los cuadros de dialogo de importaciones y asistentes varios creo que están asociados a un complemento llamado ACWMAIN (o algo parecido). Es posible que, destripando ese complemento, obtuvieras lo que buscas.

Personalmente, y viendo el control que pretendes implementar, me decantaría por crear mi propio asistente de vinculación. Tampoco es tan complicado.

Un saludo



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: buho
Fecha de publicación: 25/Junio/2019 a las 10:15
Siempre puedes ver las tablas de una base de datos en una ruta conocida: Y las puedes cargar en un cuadro combinado, por ejemplo.
Y si las puedes cargar en un cuadro combinado, puedes seleccionarla. Y si la puedes seleccionar etc etc

Mira este ejmplo. No es exactamente lo que buscas, pero lo podrías acoplar a tus necesidades.

Quisiera tener en un formulario, todos los objetos que componen mi base de datos. Es decir, ver en unos cuadros combinados, todos los formularios, todos los reportes, las tablas etc e incluso dar opción al usuario para que interaccione con dichos objetos, les abra en modo diseño etc etc ¿Como se hace eso?
http://www.mvp-access.es/buho/ficheros/estructura.zip
<< Todos los objetos de una MDB >>

En mi Web, seguro, encuentras las piezas para rellenar el Puzzle completo:
Como localizar la BD donde están las tablas
Como abrir esa BD y cargar en un combo las tablas.
Una vez localizada una tabla...actuar....

Y como dice Xavi, en efecto, esos asistentes (Al menos existentes en Access 2003, desconozco ahora) daban bastante juego. Tambien en mi web existen ejempos de estos asistentes

En cualquier caso, se puede hacer lo que pides, al margen de comandos de access. Y construirte tu tu propio asistente...


-------------
El búho es un pajarraco


Publicado por: happy
Fecha de publicación: 25/Junio/2019 a las 17:35
Intentar capturar un cuadro de diálogo de Windows o de Access y sus controles, junto con los valores y métodos ejecutables en ese cuadro de diálogo normalmente pasan por utilizar el API de Windows. Si no lo manejas bien, suele ser tedioso, difícil y seguramente no vale la pena liarse con tanta historia.

Si quieres emular la utilidad de importar objetos de Access tampoco tendría que ser tan difícil:

1. Muestras el cuadro de diálogo de abrir ficheros con la utilidad del FileDialog del Office, poniendole el filtro para bases de datos access.
2. Una vez seleccionada la base de datos, abres una conexión (método DAO.OpenDatabase) con la base de datos y creas un objeto Database
3. Mediante la Database, capturas los nombres de las tablas de esa base de datos utilizando la colección TableDefs del objeto Database (un bucle For each ... Next)
4. Creas un formulario con un cuadro de lista y llenas el cuadro de lista con los nombres de las tablas
5. Capturas el nombre de la/s tabla/s que aparecen en el cuadro de lista. Ahora ya tendrás todos los ingredientes:
    - Ruta y nombre de la base de datos (Database.Name)
    - Nombre de la/s tabla/s seleccionada/s en el cuadro de lista
6. Usas el método que quieras para importar la tabla a tu base de datos

Ya ves, sin complicaciones y utilizando métodos estandard de Access ...

Espero que te sirva

Editado: Por cierto, yo recuerdo haber visto el código interno de los asistentes de Access (estaban disponibles para la versión 97, pero creo que ya no circulan por ahí) y vi que los asistentes hacían servir una serie de funciones, módulos estandar y formularios de Access, todo hecho con herramientas propias de Access. Habían algunas excepciones, como el uso del API de Access y de Windows, así como algún objeto y controles de formularios no disponbiles normalmente. Pero ya digo, el resto, la gran mayoría de cosas estaban hechas con código VBA normal y objetos propios de Access.


-------------
Saludos,

Juan M. Afan de Ribera


Publicado por: simbad
Fecha de publicación: 28/Junio/2019 a las 10:36
Gracias a todos: Handshake

Mi gozo en un pozo!.

Ya me figuraba que no iba a resultar fácil. Sólo pretendía aprovechar el diálogo para ahorrar tiempo. Pero meterse en en lo meandros de las APIs hace difícil lo fácil.

Probaré con las soluciones que me dais para manejar los objetos. No es muy complicado.

Gracias a todos.



Imprimir página | Cerrar ventana