Cómo volver a vincular tablas de back-end con el control del diálogo común en Access 2000

Seleccione idioma Seleccione idioma
Id. de artículo: 209862 - Ver los productos a los que se aplica este artículo
Para obtener una versión de Microsoft Access 97 de este artículo, consulte 181076.
Avanzado: Requiere codificación experto, interoperabilidad, conocimientos y multiusuario.

Este artículo se aplica únicamente a las bases de datos de Microsoft Access (.mdb).

Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo utilizar el control Common Dialog para actualizar tablas vinculadas en la base de datos. El control Common Dialog está disponible con herramientas de Microsoft Office 2000 Developer Edition. Las tablas vinculadas se pueden residir en una o varias bases de datos back-end.

Para un ejemplo de un método diferente para volver a vincular las tablas que utiliza funciones de interfaz (API) de programación de aplicaciones de Microsoft Windows, consulte el programa de ejemplo Developer Solutions (Solutions9.mdb.) Para obtener Solutions9.mdb, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
248674ACC2000: Pedidos y Developer Solutions Sample Databases disponibles en Microsoft Developer Network (MSDN)
Abrir la base de datos Solutions9.mdb, seleccione utilizar varias bases de datos en el cuadro Seleccionar una categoría de ejemplos y, a continuación, haga clic en Vincular tablas en el inicio en el cuadro Seleccione un ejemplo .

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos. Un programa que utiliza dividir el diseño de la base de datos tiene sus tablas en una base de datos en una ubicación de red compartida (la base de datos back-end) y todos sus consultas, formularios, informes, macros y módulos en otra base de datos en cada equipo cliente (la base de datos front-end). La base de datos front-end todas sus tablas de vínculos a la base de datos back-end. Si se mueve la base de datos back-end, se producirán errores en el programa. Puede habilitar el programa para detectar que el archivo de back-end de base de datos que faltan desde su ubicación esperada y, a continuación, solicita al usuario para la nueva ubicación.

En el ejemplo siguiente se muestra cómo volver a vincular datos de tabla en el programa. Este método utiliza un formulario que un usuario puede abrir para volver a vincular las tablas de back-end y otro formulario opcional que puede comprobar automáticamente el vínculo de servicios de fondo cuando se abre la base de datos.

Este artículo se supone que tiene el control Microsoft Common Dialog , que está disponible con herramientas de Microsoft Office 2000 Developer Edition. Si no tiene este control, omita la función Browse() en el ejemplo.

Nota : si utiliza el control Common Dialog y planea distribuir el programa de base de datos, debe utilizar el Asistente de empaquetado y distribución para incluir el control del diálogo común de archivo, Comdlg32.ocx y su DLL compatibles con los archivos de instalación. Para obtener más información acerca del uso del Asistente de empaquetado y distribución, vea los artículos enumerados en la sección "Referencias" de este artículo.

Método para volver a vincular tablas de base de datos back-end

Precaución : Si sigue los pasos descritos en este ejemplo, modificará la base de datos de ejemplo Neptuno.mdb. Quizás desee hacer una copia de seguridad del archivo Neptuno.mdb y realizar estos pasos sobre una copia de la base de datos.

  1. Cree un nuevo archivo de base de datos de Access en blanco y asígnele el nombre FrontEnd.mdb .
  2. En el menú archivo , elija Obtener datos externos y, a continuación, haga clic en Vincular tablas .
  3. Busque y seleccione la base de datos de ejemplo Neptuno.mdb y, a continuación, haga clic en vínculo . En el cuadro de diálogo Vincular tablas , haga clic en Seleccionar todo y, a continuación, haga clic en Aceptar .
  4. Cree el siguiente formulario nuevo no basado en ninguna tabla o consulta en la vista Diseño:
    formulario: frmNewDataFile

    Cuadro de texto:
    Nombre: txtFileName
    Ancho: 3 "
    Control del diálogo común:
    Nombre: xDialog
    Botón de comando:
    Nombre: cmdBrowse
    Título: Examinar...
    En el clic: =Browse()
    Botón de comando:
    Nombre: cmdLinkNew
    Título: Actualizar vínculos
    En el clic: =Processtables()
    Botón de comando:
    Nombre: cmdCancel
    Título: Cancelar
    OnClick: [Procedimiento de evento]
    Cancelar: Sí
  5. En el menú Ver , haga clic en código .
  6. Escriba o pegue el siguiente procedimiento:
    Private Sub cmdCancel_Click()
       On Error GoTo Err_cmdCancel_Click
     
       MsgBox "Link to new back-end cancelled", vbExclamation, "Cancel Refresh Link"
       DoCmd.Close acForm, Me.Name
    
    Exit_cmdCancel_Click:
       Exit Sub
    
    Err_cmdCancel_Click:
       MsgBox Err.Description
       Resume Exit_cmdCancel_Click
    
    End Sub
    					
  7. En el menú Depurar , haga clic en Compilar de aplicaciones para usuario .
  8. Guarde el formulario frmNewDataFile y ciérrelo.
  9. En la ventana base de datos, haga clic en módulos y, a continuación, haga clic en nuevo .
  10. En el menú Herramientas , haga clic en referencias , seleccione Biblioteca de objetos Microsoft DAO 3.6 si no está ya seleccionada y, a continuación, haga clic en Aceptar .
  11. Escriba o pegue el siguiente código:
    Dim UnProcessed As New Collection
           
    Public Function Browse()
        ' Prompts user for back-end database file name.
        On Error GoTo Err_Browse
        
        Dim strFilename As String
        Dim oDialog As Object
        Set oDialog = [Forms]![frmNewDatafile]!xDialog.Object
        
        With oDialog                    ' Ask for new file location.
            .DialogTitle = "Please Select New Data File"
            .Filter = "Access Database(*.mdb;*.mda;*.mde;*.mdw)|" & _
            "*.mdb; *.mda; *.mde; *.mdw|All(*.*)|*.*"
            .FilterIndex = 1
            .ShowOpen
            If Len(.FileName) > 0 Then  ' user responded, put selection into text box on form.
               [Forms]![frmNewDatafile]![txtFileName] = .FileName
            End If
        End With
    
    Exit_Browse:
        Exit Function
    
    Err_Browse:
        MsgBox Err.Description
        Resume Exit_Browse
    
    End Function
    
    Public Sub AppendTables()
    
        Dim db As DAO.Database, x As Variant
        Dim strTest As String
        ' Add names of all table with invalid links to the Unprocessed Collection.
        Set db = CurrentDb
        ClearAll
        For Each x In db.TableDefs
            If Len(x.Connect) > 1 And Len(Dir(Mid(x.Connect, 11))) = 0 Then
            ' connect string exists, but file does not
                 UnProcessed.Add Item:=x.Name, Key:=x.Name
            End If
        Next
    
    End Sub
    
    Public Function ProcessTables()
    
        Dim strTest As String
        On Error GoTo Err_BeginLink
        
        ' Call procedure to add all tables with broken links into a collection.
        AppendTables
        
        ' Test for existence of file name\directory selected in Common Dialog Control.
        strTest = Dir([Forms]![frmNewDatafile]![txtFileName])
        
        On Error GoTo Err_BeginLink
        If Len(strTest) = 0 Then   ' File not found.
            MsgBox "File not found. Please try again.", vbExclamation, "Link to new data file"
            Exit Function
        End If
        
        ' Begin relinking tables.
        Relinktables (strTest)
        ' Check to see if all tables have been relinked.
        CheckifComplete
        
        DoCmd.Echo True, "Done"
        If UnProcessed.Count < 1 Then
             MsgBox "Linking to new back-end data file was successful."
        Else
             MsgBox "Not All back-end tables were successfully relinked."
        End If
        DoCmd.Close acForm, [Forms]![frmNewDatafile].Name
        
    Exit_BeginLink:
        DoCmd.Echo True
        Exit Function
        
    Err_BeginLink:
        Debug.Print Err.Number
        If Err.Number = 457 Then
            ClearAll
            Resume Next
        End If
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_BeginLink
    
    End Function
    
    Public Sub ClearAll()
        Dim x
        ' Clear any and all names from the Unprocessed Collection.
        For Each x In UnProcessed
           UnProcessed.Remove (x)
        Next
    End Sub
    
    Public Function Relinktables(strFilename As String)
    
        Dim dbbackend As DAO.Database, dblocal As DAO.Database, ws As Workspace, x, y
        Dim tdlocal As DAO.TableDef
        
        On Error GoTo Err_Relink
        
        Set dbbackend = DBEngine(0).OpenDatabase(strFilename)
        Set dblocal = CurrentDb
        
        ' If the local linked table name is found in the back-end database
        ' we're looking at, Recreate & Refresh its connect string, and then
        ' remove its name from the Unprocessed collection.
         For Each x In UnProcessed
            If Len(dblocal.TableDefs(x).Connect) > 0 Then
                For Each y In dbbackend.TableDefs
                    If y.Name = x Then
                        Set tdlocal = dblocal.TableDefs(x)
                        tdlocal.Connect = ";DATABASE=" & _
                        Trim([Forms]![frmNewDatafile]![txtFileName])
                        tdlocal.RefreshLink
                        UnProcessed.Remove (x)
                    End If
                Next
            End If
        Next
    
    Exit_Relink:
        Exit Function
    
    Err_Relink:
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_Relink
    
    End Function
    
    Public Sub CheckifComplete()
    
        Dim strTest As String, y As String, notfound As String, x
        On Error GoTo Err_BeginLink
        
        ' If there are any names left in the unprocessed collection,
        ' then continue.
        If UnProcessed.Count > 0 Then
            For Each x In UnProcessed
                notfound = notfound & x & Chr(13)
            Next
            ' List the tables that have not yet been relinked.
            y = MsgBox("The following tables were not found in " & _
            Chr(13) & Chr(13) & [Forms]![frmNewDatafile]!txtFileName _
            & ":" & Chr(13) & Chr(13) & notfound & Chr(13) & _
            "Select another database that contains the additional tables?", _
            vbQuestion + vbYesNo, "Tables not found")
            
            If y = vbNo Then
                Exit Sub
            End If
            
            ' Bring the Common Dialog Control back up.
            Browse
            strTest = Dir([Forms]![frmNewDatafile]![txtFileName])
            If Len(strTest) = 0 Then   ' File not found.
                MsgBox "File not found. Please try again.", vbExclamation, _
                "Link to new data file"
                Exit Sub
           End If
           Debug.Print "Break"
           Relinktables (strTest)
        Else
           Exit Sub
        End If
        
        CheckifComplete
        
    Exit_BeginLink:
        DoCmd.Echo True   ' Just in case of error jump.
        DoCmd.Hourglass False
        Exit Sub
    
    Err_BeginLink:
        Debug.Print Err.Number
        If Err.Number = 457 Then
            ClearAll
            Resume Next
        End If
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_BeginLink
    
    End Sub
    					
  12. En el menú Depurar , haga clic en Compilar de aplicaciones para usuario .
  13. Guarde el módulo como RelinkCode y ciérrelo.
  14. Cambiar el nombre la base de datos ejemplo de Neptuno.mdb o muévalo a otra carpeta del disco duro para que las tablas vinculadas en FrontEnd.mdb se necesite actualizarse.
  15. Abra el formulario frmNewDataFile y, a continuación, haga clic en el botón Examinar .
  16. En el cuadro de diálogo , Seleccione Nuevo archivo de datos , busque Neptuno.mdb en su nueva carpeta y, a continuación, haga clic en Abrir .

    Observe que la ruta de acceso y el nombre de la base de datos aparece en el cuadro de texto en el formulario.
  17. Haga clic en el formulario en el botón de Actualizar vínculos .

    Observe que recibe el mensaje siguiente cuando finalice el procedimiento:
    Vincular a nuevo archivo de datos back-end tuvo éxito.

Crear un formulario de inicio para comprobar las tablas vinculadas

Para comprobar los vínculos a tablas de back-end automáticamente cada vez que abra la base de datos de FrontEnd.mdb, puede crear un formulario oculto para ese propósito; para ello, siga estos pasos:
  1. Cree un nuevo formulario que no esté basado en ninguna tabla o consulta de la vista Diseño.
  2. En el menú Ver , haga clic en código .
  3. Escriba el siguiente procedimiento para ejecutar cuando se abre el formulario:
    Private Sub Form_Open(Cancel As Integer)
          ' Tests a linked table for valid back-end.
          On Error GoTo Err_Form_Open
          Dim strTest As String, db As DAO.Database
          Dim td As DAO.TableDef
          Set db = CurrentDb
          For Each td In db.TableDefs
             If Len(td.Connect) > 0 Then   ' Is a linked table.
                On Error Resume Next   ' Turn off error trap.
                strTest = Dir(Mid(td.Connect, 11))   ' Check file name.
                On Error GoTo Err_Form_Open   ' Turn on error trap.
                If Len(strTest) = 0 Then   ' No matching file.
                   If MsgBox("Couldn't find the back-end file " & _
                      Mid(td.Connect, 11) & ". Please choose new data file.", _
                      vbExclamation + vbOKCancel + vbDefaultButton1, _
                      "Can't find backend data file.") = vbOK Then
                         DoCmd.OpenForm "frmNewDataFile"   ' Open prompt form.
                         DoCmd.Close acForm, Me.Name
                         Exit Sub                          ' to refresh links
                   Else
                      MsgBox "The linked tables can't find their source. " & _
                      "Please log onto network and restart the application."
                   End If
                End If
             End If
          Next   ' Loop to next tabledef.
          DoCmd.Close acForm, Me.Name
    Exit_Form_Open:
          Exit Sub
    Err_Form_Open:
          MsgBox Err.Number & ": " & Error.Description
          Resume Exit_Form_Open
          End Sub
    					
  4. En el menú Depurar , haga clic en Compilar de aplicaciones para usuario .
  5. Guarde el formulario como frmCheckLink y ciérrelo.
  6. Para establecer frmCheckLink como el formulario de inicio, en las Herramientas de menú haga clic en Inicio , seleccione frmCheckLink en la lista Mostrar formulario/página y, a continuación, haga clic en Aceptar .
  7. Para hacer frmCheckLink un formulario oculto, haga clic con el botón secundario en frmCheckLink en la ventana base de datos, haga clic en Propiedades en el menú contextual, haga clic para seleccionar la casilla de verificación oculto en el cuadro de diálogo frmCheckLink propiedades y, a continuación, haga clic en Aceptar .
  8. Mover la base de datos de ejemplo Neptuno.mdb a otra carpeta del disco duro para que se tenga que actualizar las tablas vinculadas en FrontEnd.mdb.
  9. Cierre y vuelva a abrir FrontEnd.mdb.

    Observe que recibe el siguiente mensaje de error
    No puede encontrar el database file de archivo back-end Elija nuevo archivo de datos.
    donde database file es el nombre ruta de acceso y de la base de datos back-end.

    Si hace clic en Aceptar , el formulario frmNewDataFile abre para que seleccione una nueva base de datos back-end y, a continuación, actualiza los vínculos de tabla. Si hace clic en Cancelar , recibirá el siguiente mensaje de error:
    Las tablas vinculadas no encuentra su origen. Inicie sesión en red y reinicie el programa.

Referencias

Para información adicional sobre cómo personalizar el ejemplo de actualización de tablas vinculadas en el ejemplo de soluciones de desarrollo del programa (Solutions9.mdb), haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
154397ADT/ODE cómo modificar el módulo de RefreshTableLinks en Solutions.mdb
Para obtener información adicional acerca del Asistente de empaquetado y distribución, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
240956MOD2000: Asistente de empaquetado y implementación que ahora se utiliza para crear una aplicación distribuible
236143MOD2000: Cómo iniciar el Asistente de empaquetado y distribución

Propiedades

Id. de artículo: 209862 - Última revisión: jueves, 23 de junio de 2005 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Access 2000 Standard Edition
Palabras clave: 
kbmt kbprogramming kberrmsg kbhowto kbinfo KB209862 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 209862

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com