none
Habilitar contenido ejecutable en Access 2007 con bbdd no ubicada en sitio de confianza RRS feed

  • Pregunta

  • Hola,

    En access 2007 tengo un formulario de inicio "estandard" y otro que se carga si la base de datos se ejecuta desde una ubicación que no es de confianza. Este formulario no es mas que un mensaje indicando de este error y solicitando la intervención del administrador para su solución. Incorpora un botón "CERRAR" que no funciona ni con Macro (Accion SALIR) ni con código VBA (con DOCMD.QUIT).

    La idea es que al pulsar este boton salgamos de access.

    Os ha surgido este problema? Como puedo solucionarlo?

    Gracias anticipadas,

    martes, 28 de enero de 2014 11:09

Respuestas

  • Hola Zappatones,

    Supongo que la comprobación de si la base de datos se ejecuta desde una ubicación de confianza la realizas con la Macro Autoexec verdad? Si es así prueba a ver si te funciona esto:

    Cuando haces la comprobación, en vez de abrir un formulario abres un cuadro de texto con la información que nos comentas.

    Después, en el mismo "if" de la macro, abres otra acción, "CerrarBaseDeDatos". Con esto conseguimos que se abra el cuadro de texto y al pulsar sobre aceptar, se cierra la base de datos.

    Espero que sea lo que buscabas, si no, trataremos de encontrar otra solución.

    Un saludo


    Edito: A no ser que quieras incorporarlo a ubicaciones de confianza directamente, que también se puede.

    • Editado Arkaitz Arteaga martes, 28 de enero de 2014 13:07
    • Marcado como respuesta Zappatones martes, 4 de febrero de 2014 12:21
    martes, 28 de enero de 2014 13:03

Todas las respuestas

  • Hola Zappatones,

    Supongo que la comprobación de si la base de datos se ejecuta desde una ubicación de confianza la realizas con la Macro Autoexec verdad? Si es así prueba a ver si te funciona esto:

    Cuando haces la comprobación, en vez de abrir un formulario abres un cuadro de texto con la información que nos comentas.

    Después, en el mismo "if" de la macro, abres otra acción, "CerrarBaseDeDatos". Con esto conseguimos que se abra el cuadro de texto y al pulsar sobre aceptar, se cierra la base de datos.

    Espero que sea lo que buscabas, si no, trataremos de encontrar otra solución.

    Un saludo


    Edito: A no ser que quieras incorporarlo a ubicaciones de confianza directamente, que también se puede.

    • Editado Arkaitz Arteaga martes, 28 de enero de 2014 13:07
    • Marcado como respuesta Zappatones martes, 4 de febrero de 2014 12:21
    martes, 28 de enero de 2014 13:03
  • Gracias por la respuesta Arkaitz,

    En efecto, la opción del cuadro de texto desde autoexec funciona como dices, pero no es lo que necesito ya que si bien la bbdd queda cerrada, dejamos abierto el entorno de access.

    Más abajo me apuntas la posibilidad de incorporar directamente la bbdd a una ubicación de confianza.

    Quieres decir que mediante código puedo declarar la ruta en el office local para incorporar la base de datos (en un equipo de red haciendo las veces de servidor) como ubicación de confianza?. Si esto es así te agradecería me indicaras como.

    El problema es que no se cuantos equipos (usuarios) tendrán acceso a la bbdd y habilitarla desde la aplicación de office en cada estación puede resultar tedioso y poco practico.

    Gracias de nuevo,

    miércoles, 29 de enero de 2014 12:56
  • ¿Me podrías dar algún dato más? Supongo que tendrás un archivo de datos en el servidor(BE) y una aplicación en cada cliente (FE) verdad? Supongo que además los clientes tendrán instalado Access.

    Si es así, se podría añadir directamente desde las opciones de Access->"Centro de Confianza". Si lo quieres automatizar o si los clientes utilizan el Run-time de Access, puedes automatizarlo. Por ejemplo lo puedes hacer modificando el registro (con un .reg, con vbs...)

    Revisa también esta función de la wiki de UtterAcess que lo hace con VB. Ojo que modifica el registro (Edito:no se ve muy bien el código, mejor revisa el enlace que hay al final de mi post).:

    Public Function AddTrustedLocation()
    On Error GoTo err_proc
    'WARNING:  THIS CODE MODIFIES THE REGISTRY
    'sets registry key for 'trusted location'

      Dim intLocns As Integer
      Dim i As Integer
      Dim intNotUsed As Integer
      Dim strLnKey As String
      Dim reg As Object
      Dim strPath As String
      Dim strTitle as string
     
      strTitle = "Add Trusted Location"
      Set reg = CreateObject("wscript.shell")
      strPath = CurrentProject.Path

      'Specify the registry trusted locations path for the version of Access used
     strLnKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Format(Application.Version, "##,##0.0") &_
                 "\Access\Security\Trusted Locations\Location"

    On Error GoTo err_proc0
      'find top of range of trusted locations references in registry
      For i = 999 To 0 Step -1
          reg.RegRead strLnKey & i & "\Path"
          GoTo chckRegPths        'Reg.RegRead successful, location exists > check for path in all locations 0 - i.
    checknext:
      Next
      MsgBox "Unexpected Error - No Registry Locations found", vbExclamation
      GoTo exit_proc
     
     
    chckRegPths:
    'Check if Currentdb path already a trusted location
    'reg.RegRead fails before intlocns = i then the registry location is unused and
    'will be used for new trusted location if path not already in registy

    On Error GoTo err_proc1:
      For intLocns = 1 To i
          reg.RegRead strLnKey & intLocns & "\Path"
          'If Path already in registry -> exit
          If InStr(1, reg.RegRead(strLnKey & intLocns & "\Path"), strPath) = 1 Then GoTo exit_proc
    NextLocn:
      Next
     
      If intLocns = 999 Then
          MsgBox "Location count exceeded - unable to write trusted location to registry", vbInformation, strTitle
          GoTo exit_proc
      End If
      'if no unused location found then set new location for path
      If intNotUsed = 0 Then intNotUsed = i + 1
     
    'Write Trusted Location regstry key to unused location in registry
    On Error GoTo err_proc:
      strLnKey = strLnKey & intNotUsed & "\"
      reg.RegWrite strLnKey & "AllowSubfolders", 1, "REG_DWORD"
      reg.RegWrite strLnKey & "Date", Now(), "REG_SZ"
      reg.RegWrite strLnKey & "Description", Application.CurrentProject.Name, "REG_SZ"
      reg.RegWrite strLnKey & "Path", strPath & "\", "REG_SZ"
     
    exit_proc:
      Set reg = Nothing
      Exit Function
     
    err_proc0:
      Resume checknext
     
    err_proc1:
      If intNotUsed = 0 Then intNotUsed = intLocns
      Resume NextLocn

    err_proc:
      MsgBox err.Description, , strTitle
      Resume exit_proc
     
    End Function

    http://www.utteraccess.com/wiki/index.php/AddTrustedLocation



    miércoles, 29 de enero de 2014 15:12
  • Hola Arkaitz,

    Lamento no haber contestado antes, aún continúo sin tener claro como solucionarlo, por un lado, no quiero tocar el registro y por otro, el cliente no dispone de una red con servidor dedicado, por lo que también descarto la aplicación cliente-servidor con sus archivos correspondientes.

    Creo que finalmente optaré por la opción de la Macro.

    Doy por buena tu primera respuesta con esa solución y te agradezco el seguimiento.

    Saludos,

    martes, 4 de febrero de 2014 12:20