** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Cuadro de diálogo 'importar objetos'
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCuadro de diálogo 'importar objetos'

 Responder Responder
Autor
Mensaje Invertir el orden de clasificación
simbad Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 27
Enlace directo a este mensaje Tema: Cuadro de diálogo 'importar objetos'
    Enviado: 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.
Arriba
happy Ver desplegable
Moderador
Moderador


Unido: 29/Enero/2005
Localización: España
Estado: Sin conexión
Puntos: 3192
Enlace directo a este mensaje Enviado: 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.


Editado por happy - 25/Junio/2019 a las 17:42
Saludos,

Juan M. Afan de Ribera
Arriba
buho Ver desplegable
Administrador
Administrador
Avatar
Nada en la palabra

Unido: 10/Abril/2004
Localización: Valladolid
Estado: Sin conexión
Puntos: 11330
Enlace directo a este mensaje Enviado: 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
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
simbad Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 27
Enlace directo a este mensaje Enviado: 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.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 20/Junio/2019 a las 13:14
A mi lo que no me funciona es acCmdLinkTables....
Xavi, un minyó de Terrassa

Mi web
Arriba
simbad Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 27
Enlace directo a este mensaje Enviado: 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?.


Editado por simbad - 20/Junio/2019 a las 13:02
Arriba
simbad Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 27
Enlace directo a este mensaje Enviado: 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
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
simbad Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 27
Enlace directo a este mensaje Enviado: 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.
Arriba
jilo Ver desplegable
Colaborador
Colaborador


Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 959
Enlace directo a este mensaje Enviado: 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
Arriba
simbad Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 27
Enlace directo a este mensaje Enviado: 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.


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable