none
¿Como evitar que se rompan los vinculos de las tablas al crear un Instalador? RRS feed

  • Pregunta

  • Buenas tardes.

    Utilizando tanto Access 2007 como 2010 ahora me encuentro que al crear un Paquete de Instalacion del programa, me he dado cuenta que en el ordenador que lo he generado va perfecto pero a la que quiero instalar ese paquete en otro PC, (siendo en las mismas carpetas que el original) los vinculos de las tablas se rompen generando un error en tiempo de ejecucion. 

    Recordar que tengo vinculos porque tengo la base de datos dividida en dos, por un lado las Tablas y por el otro el resto, Frm, Con., Inf, etc.

    Y claro no tiene ningun sentido tener que generar el paquete en cada PC en el que vaya a ser instalado, es una gran burrada.

    Bueno si alguien tiene alguna propuesta o solucion, muchas gracias de antemano.

    sábado, 15 de diciembre de 2012 22:42

Respuestas

  • Hola

    Crea una tabla con los nombres de las tablas vinculadas, y una función que es ejecutada desde la macro AutoExec.
    Esta función puede ser así:

    <pego>

    Public Function DSNLess()
        On Error GoTo Error_Conexion
        Dim sConnect As String
        Dim db As DAO.Database, tdf As DAO.TableDef, rs As DAO.Recordset
        
        'Cadena conexión
        sConnect = "XXXXXXXXXXXXXXXXXXXXXXXXXXXx" 'Valor de la propiedad Connect de las tablas vinculadas
        
        Set db = CurrentDb
        Set rs = db.OpenRecordset("tblTablas", dbOpenForwardOnly)
        'Borro la tabla vinculada y la vuelvo a vincular. De este modo, se actualiza cualquier cambio realizado en el servidor
        Do Until rs.EOF
            db.TableDefs.Delete rs.Fields("Tabla")
            db.TableDefs.Refresh
            Set tdf = db.CreateTableDef(rs.Fields("Tabla"), dbAttachSavePWD, rs.Fields("Tabla"), sConnect)
            db.TableDefs.Append tdf
            Set tdf = Nothing
            rs.MoveNext
            DoEvents
        Loop
        'Actualizo la colección de tabledefs
        db.TableDefs.Refresh
        Set tdf = Nothing
        db.Close
        Set db = Nothing
        
    '    Debug.Print "TERMINADO"
        Exit Function
    Error_Conexion:
        If Err.Number = 3265 Then
            Resume Next
        Else
            Dim sError As String
            sError = "Se ha producido un error al reconectar contra el servidor: " & vbCrLf & _
                     "     Error: " & Err.Number & vbCrLf & _
                     "     Descipcion: " & Err.Description & _
                     "Póngase en contacto con el administrador"
            MsgBox sError, vbCritical + vbOKOnly, "Error crítico"
        End If
    End Function

    </pego>

    Salu2,


    José Mª Fueyo [MS MVP Access]

    • Propuesto como respuesta José Mª Fueyo miércoles, 19 de diciembre de 2012 9:55
    • Marcado como respuesta JM_cat miércoles, 9 de enero de 2013 20:50
    lunes, 17 de diciembre de 2012 17:24