Informes de Access fuera de la ventana de la BD

Estoy empezando con este tema de las macros y formularios de Access y no se mucho de programación.
La consulta que te quiero hacer es porque estoy armando un tablero de control sobre la base de Access 2007 (sobre un archivo convertido a 2003) y tengo un formulario al que le incorpore un botón que ejecuta un par de informes.
El problema es que cuando lo pruebo desde el diseño se ve perfecto, pero cuando intento ejecutarlo desde el entorno que debiera hacerlo el usuario (sin visualizar la ventana de la base de datos), no funciona. Se cuelga y tengo que forzar el cierre de la aplicación.
Ya intente cambiarle las propiedades al informe (Modal, si y Emergente, si) pero sigue sin funcionar. ¿Tiene algo que ver con el modulo que estoy utilizando para ocultar la ventana de la BD o hay alguna otra propiedad a modificar que se me está escapando?
Respuesta
2
Access da muchos problemas de vez en cuando, sobretodo si modificamos un formulario y guardamos muchas veces.
Yo tengo muchas malas experiencias como las que me indicas, con lo que cuando realizo un trabajo voy versionando cada cambio para poder volver a una funcional sin problemas y perdiendo el menor trabajo posible.
Dicho esto, cuando tienes ese tipo de errores solo tienes dos opciones.
1) Utilizar COMPACTAR Y REPARAR LA BD, eso a veces soluciona problemas de esta índole.
2) Borrar el formulario que da los problemas y realizarlo desde 0 sin copiar nada del anterior.
¿Por otro lado cuando dices "sin visualizar la ventana de la base de datos" a que te refieres exactamente? ¿Qué cambios estas realizando entre una y otra?
Hola! Muchas gracias por tomarte el tiempo para contestar!
Te cuento que probé las dos alternativas y ninguna me funcionó.
El tema de la ventana de la BD, es así: Cuando uno usa el access aparece la información contenida en la ventana de Access, donde esta el menu y la barra de exploración de objetos (consultas, tablas, etc).
El tablero que estoy armando es para usuarios para los que no quiero que tengan la posibilidad de acceder a configuraciones o que puedan editar los objetos. Es un tablero solo de consulta. (Y ademas le quiero poner restricciones por usuario, pero todavía no llegue ahí).
Encontré en estos mismos foros, un código para poder hacer desaparecer la ventana de Access y que solo se vea sobre el escritorio el formulario, que ya contiene la información y todos los botones de acción que el usuario necesita para navegarlo. Por supuesto que para editarlo, tengo que abrirlo sin ejecutar el autoexec que contiene la macro que oculta la ventana y con acceso exclusivo.
Entonces, acá esta mi problema. Cuando lo abro para editarlo y pruebo los formularios para ver si funcionan, el botón de acción que abre el informe, funciona bien y puedo visualizar sin problemas el reporte. Ahora cuando lo ejecuto directamente (como lo verían los usuarios) y hago click en el botón del formulario que me abre el reporte/informe, el informe no aparece y encima se queda colgado el access y tengo que forzar el cierre.
Espero haberme expresado lo más clara posible y avisame si se te ocurre alguna otra forma de resolverlo.
Desde ya muchas gracias!
Pega el código que oculta los botones y el contenido del autoexec del que me hablas.
Seguramente ese sea el problema ya que es la única diferencia entre uno y otro.
El código que me oculta la ventana es el siguiente:
Option Compare Database
Option Explicit
Global Const SW_HIDE = 0
Global Const SW_SHOWMINIMIZED = 2
Global Const SW_SHOWMAXIMIZED = 3
Global Const SW_SHOWNOACTIVATE = 4
Private Declare Function apiShowWindow Lib "user32" _
    Alias "ShowWindow" (ByVal hWnd As Long, _
          ByVal nCmdShow As Long) As Long
Function fSetAccessWindow(nCmdShow As Long)
Dim loX  As Long
Dim loForm As Form
        loX = apiShowWindow(hWndAccessApp, nCmdShow)
End Function
y en la macro Autoexec tengo lo siguiente:
Ejecutar codigo      fSetAccessWindow (0)
Abrirformulario (donde tengo el formulario de presentacion)
Este formulario tiene un botón que dice ingresar que lo que hace es abrir otro formulario tipo tablero de control con varios botones y uno de ellos en el evento al hacer click hay una macro incrustada para el comando Abririnforme.
Cuando ejecuto ese botón el informe no se abre y no puedo hacer más nada en el formulario, se cuelga y tengo que cerrar todo desde el administrador de tareas.
¿Ves algo que se pueda modificar para que funcione?
Gracias!
Bien, me he empapado un poco en estos temas que tenia demasiado olvidados.
Me parece que el problema es la función FSetAccessWindow(0) que en los informes tienes que ser FSetAccessWindow(3) porque si no dan problemas.
Investiga por ese camino y a ver si entre los dos damos con la solución.
Un saludo.
Enlaces de interés para este tema:
http://grupos.emagister.com/debate/no_funciona/6411-359461
http://www.forosdelweb.com/f21/acces-2003-a-561510/
Estuve mirando los enlaces que me pasaste y una de las alternativas es crear una nueva BD e importar todo... lo probé y sigue sin funcionar... sigo mirando, pero si encontrás algo más, por favor avisame.
Gracias!
Hola! Ya lo pude resolver! Gracias a los enlaces que me pasaste, me di cuenta que en los informes tengo que poner en el evento al abrir fSetAccessWindow (3) y en el evento al cerrar fSetAccessWindow (0).
Muchas gracias por tomarte el tiempo de ayudarme!
Saludos

1 respuesta más de otro experto

Respuesta

Mostar Informes con base oculta access 2016

Los métodos mencionados funcionan pero muchas veces no como uno lo imagina y toca implementar su propia malicia

Ej:

Teniendo la base oculta toca visualizar la base para poder ver los informes

Los informes deben tener en la propiedad emergente y modal en Sí

Yo llamo desde un formulario los informes que necesito

=========================================

Private Sub Articulo1_Click()
On Error GoTo Err_Articulo1_Click

Dim stDocName As String

DoCmd.Minimize
stDocName = "Articulos"
DoCmd.OpenReport stDocName, acPreview

Exit_Articulo1_Click:
Exit Sub

Err_Articulo1_Click:
MsgBox Err.Description
Resume Exit_Articulo1_Click
End Sub

============================================

Y esto va en los informes

============================================

Option Compare Database
Option Explicit
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3
Const SW_SHOWNOACTIVATE = 4
Private Declare PtrSafe Function apiShowWindow Lib "user32" _
Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Sub Report_Close()
Dim lngRetCode As Long
lngRetCode = apiShowWindow(hWndAccessApp, SW_HIDE)
DoCmd.OpenForm "MenuPrincipal", windowmode:=acDialog
End Sub

Private Sub Report_Open(Cancel As Integer)
Call apiShowWindow(hWndAccessApp, SW_SHOWNORMAL)
DoCmd.Maximize
End Sub

==================================================
Espero les sea útil o les de una buena idea para implementar sus funciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas