Crear mde o accde desde vba |
Responder ![]() |
Autor | |
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() Enviado: 07/Febrero/2019 a las 13:25 |
Tengo este codigo que he encontrado y que funciona, pero si hay algun error de compilacion no la crea y tampoco suelta ningun error. Me gustaria poder controlar ese posible error de compilacion. Conoceis otra forma de poder hacerlo, no he encontrado mucha info de esto. Saludos Public Function MakeACCDE(InPath As String, OutPath As String) 'Valido para mde y accde, nos crea mde o accde Dim app As New Access.Application app.AutomationSecurity = 1 'msoAutomationSecurityLow app.SysCmd 603, InPath, OutPath Set app = Nothing End Function Editado por rokoko - 07/Febrero/2019 a las 21:53 |
|
![]() |
|
javier.mil ![]() 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
Colaborador ![]() ![]() Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4273 |
![]() ![]() ![]() ![]() ![]() |
Buenas , Prueba con este código Public Function funEstaCompilada(PonRutaBase As String, Optional PonPassword As String) As Boolean '--------------------------------------------------------------------------------------- ' Procedimiento: funEstaCompilada ' Fecha : 10/10/2006 15:19 ' Autor : Javier Gomez ("Javier.Mil") ' Email : accessdemo@hotmail.com ' WEB : www.accessdemo.info ' Proposito : Comprueba si la Base esta compilada '--------------------------------------------------------------------------------------- On Error GoTo Err_Local Const cAperturaExclusiva As Boolean = True Dim accAppNew As New Access.Application Dim obj As Object DoEvents Access.Application.DoCmd.Hourglass True funEstaCompilada = False SysCmd acSysCmdSetStatus, "Compilando . . ." If Len(Dir$(PonRutaBase, vbArchive)) = 0 Then MsgBox "Error, No existe el fichero", vbExclamation, "Fichero" GoTo Exit_Local End If If Len(Trim(PonPassword)) > 0 Then accAppNew.OpenCurrentDatabase PonRutaBase, cAperturaExclusiva, PonPassword Else accAppNew.OpenCurrentDatabase PonRutaBase, cAperturaExclusiva End If accAppNew.Visible = False If accAppNew.IsCompiled = True Then funEstaCompilada = True Else funEstaCompilada = False accAppNew.DoCmd.RunCommand acCmdCompileAndSaveAllModules funEstaCompilada = True End If Close_Local: On Error Resume Next accAppNew.CloseCurrentDatabase accAppNew.Quit Set accAppNew = Nothing Exit_Local: On Error GoTo 0 Exit Function Err_Local: funEstaCompilada = False MsgBox Err.Description, vbCritical, "Error N°: " & Err.Number Resume Exit_Local End Function Editado por javier.mil - 07/Febrero/2019 a las 15:13 |
|
![]() |
|
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() |
De algo no me estoy enterando, o no lo aplico bien o quizas no funcione, no se Estoy haciendo pruebas con una base datos, que si compilo se que da error de compilacion Lo aplico asi para probar, entiendo que si es False no esta compilada, pero me salta el msgbox de compilado y se queda el raton pensando y abajo en access un mensaje de Compilando...como si quedase un proceso colgado, me imagino que por estas lineas, pero al saltar el msgbox de compilado me deja descolocado. ![]() DoEvents Access.Application.DoCmd.Hourglass True funEstaCompilada = False SysCmd acSysCmdSetStatus, "Compilando . . ." If funEstaCompilada("C:\Users\mons22\Desktop\a\Gestion.mdb") = False Then
MsgBox "Sin compilar" Else MsgBox "Compilada" End If Editado por rokoko - 07/Febrero/2019 a las 17:24 |
|
![]() |
|
javier.mil ![]() 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
Colaborador ![]() ![]() Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4273 |
![]() ![]() ![]() ![]() ![]() |
Buenas, Si analizas un poco el código veras que tal como esta el código casi siempre dará como resultado Compilada = True , ya que con la instrucción accAppNew.DoCmd.RunCommand acCmdCompileAndSaveAllModules lo que hace es compilar y guardar a menos de que se produzca un error durante el proceso de compilación y en ese caso daría como resultado Compilada = False If accAppNew.IsCompiled = True Then funEstaCompilada = True Else funEstaCompilada = False accAppNew.DoCmd.RunCommand acCmdCompileAndSaveAllModules funEstaCompilada = True End If por lo tanto deberías modificar la lineas de arriba y dejarlas asi If accAppNew.IsCompiled = True Then
funEstaCompilada = True Else funEstaCompilada = False End If |
|
![]() |
|
javier.mil ![]() 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
Colaborador ![]() ![]() Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4273 |
![]() ![]() ![]() ![]() ![]() |
Por ciento creo que deberías modificar el TITULO de este hilo donde pone mde o sccdedeberia poner mde o accde |
|
![]() |
|
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() |
He corregido el titulo, tendria los dedos espesos jiji Respecto al codigo, me funciona con unas bases de datos y con otras no, aun sabiendo que estan compiladas y sin errores, me dice no compilado. De hecho si pongo el codigo original las compila sin problemas, es raro, seguire probando a ver....
|
|
![]() |
|
javier.mil ![]() 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
Colaborador ![]() ![]() Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4273 |
![]() ![]() ![]() ![]() ![]() |
Que versiones de Access funciona y que Versiones No funciona ?
|
|
![]() |
|
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() |
En access 2003 me esta funcionando bien. Donde no iba fino era en access 2013, pero mañana probare otra vez a ver.
Lo que si hace al pasarle la funcion es como querer abrir la base de datos, te pregunta si quieres abrirla, se abre el formulario de inicio, pero luego se cierra. Funcionar funciona en 2003, pero no queda muy transparente. Saludos
|
|
![]() |
|
javier.mil ![]() 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
Colaborador ![]() ![]() Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4273 |
![]() ![]() ![]() ![]() ![]() |
Hola Varias cosas: - No entiendo cuando dices que en Access 2003 No queda muy transparente , puedes explicarlo mejor ? - No entiendo cuando dices que en Access 2013 No iba muy fino , puedes explicarlo mejor ? Te aconsejo que inicies una Aplicación desde cero sin código alguno y que luego copies y pegues el siguiente código, y luego lo vuelvas a probar .......... en teoría debería ir bien en cualquier versión de Access ........ Private Function funTets() MsgBox "Esta Compilada= " & funEstaCompilada(Application.CurrentProject.Path & "/" & "PonAquiElNombre.accdb") End Function Public Function funEstaCompilada(PonRutaBase As String, Optional PonPassword As Variant) As Boolean '--------------------------------------------------------------------------------------- ' Procedimiento: funEstaCompilada ' Fecha : 10/10/2006 15:19 ' Modificacion : 12/02/2019 10:52 ' Autor : Javier Gomez ("Javier.Mil") ' Email : accessdemo@hotmail.com ' WEB : www.accessdemo.info ' Proposito : Comprueba si la Base esta compilada (True = Si esta compilada y False = No esta compilada) '--------------------------------------------------------------------------------------- On Error GoTo Err_Local Const cAperturaExclusiva As Boolean = True Dim accAppNew As New Access.Application Dim obj As Object DoEvents Rem Comprueba si la Base Existe If Len(Dir$(PonRutaBase, vbArchive)) = 0 Then MsgBox "Error, No existe el fichero", vbExclamation, "Fichero" GoTo Exit_Local End If If IsMissing(PonPassword) = False Then accAppNew.OpenCurrentDatabase PonRutaBase, cAperturaExclusiva, PonPassword Else accAppNew.OpenCurrentDatabase PonRutaBase, cAperturaExclusiva End If accAppNew.Visible = False If accAppNew.IsCompiled = True Then funEstaCompilada = True Else funEstaCompilada = False End If Close_Local: On Error Resume Next accAppNew.CloseCurrentDatabase accAppNew.Quit Set accAppNew = Nothing Exit_Local: On Error GoTo 0 Exit Function Err_Local: funEstaCompilada = False MsgBox Err.Description, vbCritical, "Error N°: " & Err.Number Resume Exit_Local End Function |
|
![]() |
|
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() |
Aun tengo que probarlo mas, en cuanto a que no era transparente queria decir que al pasarle la funcion es como si quisiera abrir la base de datos, me pide abrirla, se empieza a abrir el formulario que tengo de inicio. En principio eso no seria problema. Y en cuato que en access 2013 no funcionaba bien es porque me decia que no estaba compilada cuando si lo estaba y si errores. En access 2003 no pasaba. Pero lo tengo que probar a fondo y bien, a ver si saco un rato.. Saludos y gracias
|
|
![]() |
|
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() |
A ver vamos por partes Estoy haciendo pruebas con varias bases de datos en access 2013. mdb y accdb 1-unas compiladas 2-unas sin compilar y sin fallos en vba 3-otras sin compilar y con fallos en vba Mi idea es verificar su compilacion, si esta compilada que cree mde o accde, si no lo esta que compile y cree mde o accde, pero si intenta compilar y no puede que salte error diciendo que no se puede crear mde o accde por error en compilacion opcion 1 si esta compilada sale verdadero, perfecto opcion 2 si esta sin compilar sale falso, perfecto para la opcion 3 le he añadido el codigo original esperando que salte el error al no poder compilar, pero no salta.....sale false al principio como tiene que ser accAppNew.DoCmd.RunCommand acCmdCompileAndSaveAllModules funEstaCompilada = True Luego dice verdadero porque lo hemos puesto en true, pero no es real, no se a podido compilar y no salta error. ahora solo he añadido, dice false como es logico y tampoco salra error al no poder compilar accAppNew.DoCmd.RunCommand acCmdCompileAndSaveAllModules Al llegar a esta ultima linea y no poder compilar deberia de saltar un error no???? |
|
![]() |
|
javier.mil ![]() 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
Colaborador ![]() ![]() Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4273 |
![]() ![]() ![]() ![]() ![]() |
En teoría (No lo he probado) creo que podrías "atrapar el error " con la siguiente linea de código: DoCmd.RunCommand acCmdMakeMDEFile Al intentar crear la MDE o ACCDE te debería salta el error. ......... solo tendrías que capturarlo y darle las instrucciones......... Otra opción que podrías probar es con SysCmd 603 (funciona desde las primeras versiones de Access hasta Access 2016) Dim appAccess As Access.Application Set appAccess = New Access.Application appAccess.SysCmd 603, PonAquiNombreMDB, PonAquiNombreMDE appAccess.Quit acQuitSaveNone Set appAccess = Nothing Lógicamente en ambos casos tendrás que poner un On Error GoTo En resumen para poder crear una MDE o ACCDE No es necesario que la base este compilada pero si que obligado para crear el MDE o ACCDE que este libre de errores , osea que en teoría debería funcionar lo que pretendes. Editado por javier.mil - 12/Febrero/2019 a las 22:54 |
|
![]() |
|
rokoko ![]() Colaborador ![]() ![]() Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 1725 |
![]() ![]() ![]() ![]() ![]() |
Despues de probar varias cosas lo que me a funcionado bien es esta forma. Le paso la funcion 2 veces La 1º tiene esta linea de mas accAppNew.DoCmd.RunCommand acCmdCompileAndSaveAllModules si esta sin compilar la compila si puede. La 2º sin esa linea y si sigue sin compilar es que hay errores en codigo vba y detengo codigo y lanzo un aviso. Se puede cerrar. Mucha gracias!!! Por cierto, en centro de confianza en access 2013 me la estaba jugando, le he dado permisos a la carpeta donde estan las bases de datos y bien. Queda asi If funEstaCompilada(varCarpetaTrabajo & "\" & varNombreBD) = False Then
'No hago nada simplemente le paso la funcion y si no esta compilada la compila si puede. End If If funEstaCompilada2(varCarpetaTrabajo & "\" & varNombreBD) = False Then MsgBox "No es posible crear mde o accde, errores en codigo vba(No a sido posible compilar). Abre la base de datos y desde el editor de vba compila para ver los errores.", vbExclamation Exit Sub Else 'No hago nada y sigue corriendo codigo End If Editado por rokoko - 13/Febrero/2019 a las 18:45 |
|
![]() |
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 |