|
Responder
|
| Autor | |
Soraya
Habitual
Unido: 16/Julio/2008 Localización: España Estado: Sin conexión Puntos: 86 |
Tema: Automatización de Objetos con Runtime de AccessEnviado: 29/Agosto/2019 a las 08:52 |
|
Buenos días a tod@s. Estoy trabajando en un programa que se compone de un Access, que utilizo como programa principal, y que llama a un segundo Access que contiene un Mapa al que se puede acceder desde distintas pantallas del programa principal. Además, el programa principal es el genérico para todos mis clientes y el Mapa es particular para cada cliente, por eso lo tengo separado en dos mdb's. El caso es que en los equipos que tienen instalada la Runtime de Access 2007 no funciona la llamada al segundo Access (el que contiene el mapa). Sin embargo, en los equipos con Access instalado, funciona sin problemas. Por lo que he podido leer por Internet, y si no lo he entendido mal, Las Runtimes de Access no permiten la automatización de otro Objeto Access. ¿Sabéis si esto es así? Hasta el momento sólo he conseguido abrir el Access del mapa, sin que de problemas con la Runtime, usando ShellExecute(), pero necesito crearme un objeto Access.Application al hacer la llamada al mapa para pasarle el usuario validado en el programa principal y su categoría y la pantalla desde la que se hace la llamada al mapa para abrirlo de una manera u otra. Os paso el código que estoy usando por si se os ocurre algo: Dim AplicAccess As Access.Application Dim RutaMapa As String 'Prueba 1: No funciona con Runtime 'Set AplicAccess = GetObject(RutaMapa) '********************************* 'Prueba 2: No funciona con Runtime 'Set AplicAccess = CreateObject(RutaMapa) '********************************* 'Prueba 3: No funciona con Runtime 'Set AplicAccess = New Access.Application 'AplicAccess.OpenCurrentDatabase RutaMapa '********************************* AplicAccess.Run "PonValoresUsuario", glUsuario, glCategoria AplicAccess.DoCmd.OpenForm "Form_Mapa" If EstaCargado("Form_Listado") = True Then AplicAccess.Run "Marcar_Seleccion_Mapa", "Form_Listado", True Else AplicAccess.Run "Marcar_Seleccion_Mapa", "Form_Ficha", False End If ¿Sabéis si hay otra forma de cargar un objeto Access.Application? Por cierto, el código que sí me abre el Access el mapa con la Runtime es: Call ShellExecute(hWndAccessApp, vbNullString, RutaMapa, vbNullString, vbNullString, 1) Muchas gracias por vuestro tiempo. Saludos, Soraya
|
|
|
Saludos
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 29/Agosto/2019 a las 10:28 |
|
Hola Soraya,
Veo lógico que no te deje abrir un Access por automatización, ya que NO tiene Access instalado. A falta de que algún genio nos desvele un camino desconocido ... te propongo varias maneras de pasar los datos de la aplicación principal a la secundaria:- te creas un fichero de texto desde el principal en el que incluyes los datos que necesitas, este fichero lo lee el secundario automáticamente al abrirse (doy por supuesto que tienes un Autoexec o un formulario que se abra automáticamente) - pasas los valores necesarios del principal al secundario escribiéndolos en una tabla parámetros del secundario usando la cláusula IN (ésta es la que yo suelo usar) - pasas los parámetros que necesitas en el comando ShellExecute: Retval = Shell(Obtener_Path_Office("Access.Application") & " """ & ProgramaDestino & """ /cmd ""Produccion""", 1) "Produccion" -> es el valor del parámetro pasado y desde dentro de Access lo recuperas con Command Función Command |
|
![]() |
|
Soraya
Habitual
Unido: 16/Julio/2008 Localización: España Estado: Sin conexión Puntos: 86 |
Enviado: 29/Agosto/2019 a las 10:41 |
|
Gracias Jesús, Mi plan B es el de pasar los valores que necesito en el Access del mapa a través de una tabla. Sólo esperaba que hubiera un genio por ahí que supiera la manera de hacerlo de otra manera... Saludos, Soraya
|
|
![]() |
|
Soraya
Habitual
Unido: 16/Julio/2008 Localización: España Estado: Sin conexión Puntos: 86 |
Enviado: 30/Agosto/2019 a las 11:18 |
|
Hola, Al final lo he solucionado abriendo el mapa con ShellExecute y guardando los valores en una tabla que se encuentra en la BDD del mapa. Para controlar si está abierto el mapa cuando salen de la aplicación principal, y cerrarlo en caso de estar abierto, me he guardado en esa tabla el valor de la variable hWndAccessApp, que se actualiza en la tabla cada vez que se abre el mapa. Os pongo el código que he usado por si le viene bien a alguien: He usado esta API: Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_CLOSE = &H10 Y al cerrar la aplicación principal hago la llamada a la API: If Not IsNull(DLookup("hWndAccessApp", "Consulta_Variables_Apertura_Mapa")) Then Call PostMessage(DLookup("hWndAccessApp", "Consulta_Variables_Apertura_Mapa"), WM_CLOSE, 0, 0) 'Cierra el mapa End If Por mi parte se puede cerrar el hilo. Saludos y gracias, Soraya
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |