Como voltar a ligar tabelas back-end com o controlo de diálogo comuns no Access 2000

Traduções de Artigos Traduções de Artigos
Artigo: 209862 - Ver produtos para os quais este artigo se aplica.
Para obter uma versão de Microsoft Access 97 deste artigo, consulte 181076.
Avançado: Requer conhecimentos avançados sobre codificação, interoperabilidade e multi-utilizador.

Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb).

Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo mostra como utilizar o controlo de Caixa de diálogo comum para actualizar tabelas ligadas a base de dados. O controlo de Caixa de diálogo comum está disponível nas ferramentas do Microsoft Office 2000 Developer Edition. As tabelas sejam ligadas podem residir num ou vários back-end bases de dados.

Para um exemplo de um método diferente para voltar a ligar tabelas que utiliza funções da interface (API) programação aplicação Microsoft Windows, consulte o programa de exemplo Solutions Developer (Solutions9.mdb.) Para obter Solutions9.mdb, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
248674ACC2000: Encomendas e bases de Solutions Developer dados de exemplo disponíveis no Microsoft Developer Network (MSDN)
Abra a base de dados Solutions9.mdb seleccione utilizar várias bases de dados na caixa Seleccione uma categoria de exemplos e, em seguida, clique em ligação de tabelas durante o arranque na caixa Seleccione um exemplo .

Mais Informação

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador. Um programa que utiliza dividir a estrutura de base de dados tiver respectivas tabelas de uma base de dados numa localização de rede partilhada (a base de dados back-end) e todos os respectivos consultas, formulários, relatórios, macros e módulos na outra base de dados em cada computador cliente (de dados front-end). A base de dados front-end liga todas as respectivas tabelas na base de dados back-end. Se for movido para a base de dados back-end, ocorrem erros no programa. Pode activar o programa detectar que o ficheiro de base de dados back-end está em falta da respectiva localização esperada e, em seguida, pede ao utilizador a nova localização.

O exemplo seguinte mostra como voltar a ligar dados da tabela no programa. Este método utiliza um formulário que um utilizador pode abrir para voltar a ligar as tabelas back-end e outro formulário opcional que pode verificar automaticamente a ligação de back-end quando a base de dados é aberta.

Este artigo pressupõe que tem o controlo de Caixa de diálogo comuns do Microsoft, que está disponível nas ferramentas do Microsoft Office 2000 Developer Edition. Se não tiver este controlo, ignore a função Browse() o exemplo.

Nota : Se utilizar o controlo de Caixa de diálogo comum e que planeia distribuir o programa de base de dados, tem de utilizar o Package and Deployment Wizard para incluir o controlo de caixa de diálogo comuns de ficheiros, Comdlg32.ocx e respectivas suporte dll com os ficheiros de configuração. Para obter mais informações sobre como utilizar o Package and Deployment Wizard, consulte os artigos listados na secção "Referências" deste artigo.

Método para ligar novamente tabelas de base de dados back-end

atenção : Se seguir os passos neste exemplo, modificará a base de dados de exemplo Adamastor.mdb. Convém cópia de segurança do ficheiro de base de dados Adamastor.mdb e siga estes passos numa cópia da base de dados.

  1. Crie um novo ficheiro de base de dados do Access em branco e o nome FrontEnd.mdb .
  2. No menu ficheiro , aponte para Obter dados externos e, em seguida, clique em Ligação de tabelas .
  3. Localize e seleccione a base de dados de exemplo Adamastor.mdb e, em seguida, clique em ligar . Na caixa de diálogo Ligar tabelas , clique em Seleccionar tudo e, em seguida, clique em OK .
  4. Crie o seguinte novo formulário não baseado em qualquer tabela ou consulta na vista de estrutura:
    formulário: frmNewDataFile

    Caixa de texto:
    Nome: txtFileName
    Largura: 3 "
    Controlo de caixa de diálogo comuns:
    Nome: xDialog
    Botão de comando:
    Nome: cmdBrowse
    Legenda: Procurar...
    Ao clicar: =Browse()
    Botão de comando:
    Nome: cmdLinkNew
    Legenda: Actualizar ligações
    Ao clicar: =Processtables()
    Botão de comando:
    Nome: cmdCancel
    Legenda: Cancelar
    AoFazerClique: [Procedimento de evento]
    Cancelar: Sim
  5. No menu Ver , clique em código .
  6. Escreva ou cole o seguinte procedimento:
    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. No menu Debug , clique em Compilar FrontEnd .
  8. Guarde o formulário frmNewDataFile e fechá-lo.
  9. Na janela Base de dados, clique em módulos e, em seguida, clique em Novo .
  10. No menu Ferramentas , clique em References , seleccione Microsoft DAO 3.6 Object Library se não estiver já seleccionada e, em seguida, clique em OK .
  11. Escreva ou cole o seguinte 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. No menu Debug , clique em Compilar FrontEnd .
  13. Guarde o módulo como RelinkCode e, em seguida, feche.
  14. Mudar o nome de base de dados de exemplo Adamastor.mdb ou mova-lo para outra pasta no disco rígido para que as tabelas ligadas na FrontEnd.mdb terá de ser actualizados.
  15. Abra o formulário frmNewDataFile e, em seguida, clique no botão Procurar .
  16. Na caixa de diálogo Please Seleccionar novo ficheiro de dados , localize base de dados Adamastor.mdb na pasta nova e, em seguida, clique em Abrir .

    Note que o caminho e ficheiro o nome da base de dados aparece na caixa de texto no formulário.
  17. Clique no botão Actualizar hiperligações no formulário.

    Repare que receberá a seguinte mensagem quando o procedimento estiver concluído:
    Ligar ao novo ficheiro de dados back-end foi bem sucedida.

Criar um formulário de arranque para verificar tabelas ligadas

Para verificar as hiperligações para tabelas back-end automaticamente sempre que abrir a base de dados FrontEnd.mdb, pode criar um formulário oculto para esse fim, seguindo estes passos:
  1. Criar um novo formulário não baseado em qualquer tabela ou consulta na estrutura vista.
  2. No menu Ver , clique em código .
  3. Escreva o seguinte procedimento para executar quando o formulário é aberto:
    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. No menu Debug , clique em Compilar FrontEnd .
  5. Guarde o formulário como frmCheckLink e, em seguida, fechá-lo.
  6. Para definir frmCheckLink como o formulário de arranque, no Ferramentas menu clique em arranque , seleccione frmCheckLink na lista Mostrar formulário/página e, em seguida, clique em OK .
  7. Para tornar frmCheckLink formulário oculto, clique com o botão direito do rato frmCheckLink na janela Base de dados, clique em Propriedades no menu de atalho, clique para seleccionar a caixa de verificação oculto na caixa de diálogo frmCheckLink propriedades e, em seguida, clique em OK .
  8. Mova a base de dados de exemplo Adamastor.mdb para outra pasta no disco rígido para que as tabelas ligadas na FrontEnd.mdb terá de ser actualizados.
  9. Feche e reabra FrontEnd.mdb.

    Repare que receberá a seguinte mensagem de erro
    Não é possível localizar o ficheiro de back-end database file. Seleccione o novo ficheiro de dados.
    onde database file é o nome ficheiro e caminho da base de dados back-end.

    Se clicar em OK , o formulário frmNewDataFile abre para seleccionar uma nova base de dados back-end e, em seguida, actualiza as ligações da tabela. Se clicar em Cancelar , receberá a seguinte mensagem de erro:
    As tabelas ligadas não consegue localizar a origem. Inicie sessão para rede e reinicie o programa.

Referências

Para obter informações adicionais sobre como personalizar o exemplo para actualizar tabelas ligadas na amostra Solutions Developer (Solutions9.mdb) do programa, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
154397ADT/ODE como modificar RefreshTableLinks módulo no Solutions.mdb
Para obter informações adicionais sobre o Package and Deployment Wizard, clique os números de artigo existente abaixo para visualizar os artigos na base de dados de conhecimento da Microsoft:
240956MOD2000: Package and Deployment Wizard agora utilizado para criar uma aplicação distribuível
236143MOD2000: Como iniciar o Package and Deployment Wizard

Propriedades

Artigo: 209862 - Última revisão: 23 de junho de 2005 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kbprogramming kberrmsg kbhowto kbinfo KB209862 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 209862

Submeter comentários

 

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