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

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
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
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).

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.NameExit_cmdCancel_Click:   Exit SubErr_cmdCancel_Click:   MsgBox Err.Description   Resume Exit_cmdCancel_ClickEnd 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 WithExit_Browse:    Exit FunctionErr_Browse:    MsgBox Err.Description    Resume Exit_BrowseEnd FunctionPublic 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    NextEnd SubPublic 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_BeginLinkEnd FunctionPublic Sub ClearAll()    Dim x    ' Clear any and all names from the Unprocessed Collection.    For Each x In UnProcessed       UnProcessed.Remove (x)    NextEnd SubPublic 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    NextExit_Relink:    Exit FunctionErr_Relink:    MsgBox Err.Number & ": " & Err.Description    Resume Exit_RelinkEnd FunctionPublic 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 SubErr_BeginLink:    Debug.Print Err.Number    If Err.Number = 457 Then        ClearAll        Resume Next    End If    MsgBox Err.Number & ": " & Err.Description    Resume Exit_BeginLinkEnd 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.NameExit_Form_Open:      Exit SubErr_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
inf vincule reattach volver a conectar el vínculo de actualización adjuntar conectar ODE ADT

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 209862 - Última revisión: 12/05/2015 11:13:32 - Revisión: 3.0

Microsoft Access 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbprogramming kberrmsg kbhowto kbinfo KB209862 KbMtes
Comentarios