Você está offline; aguardando reconexão

Como vincular novamente tabelas back-end ao controle Caixa de diálogo comum no Access 2000

Este artigo foi publicado anteriormente em BR209862
Para obter uma versão deste artigo para Microsoft Access 97, consulte 181076.
Avançado: Requer conhecimentos avançados de codificação, interoperabilidade e habilidades de multiusuário.

Este artigo se aplica somente a um banco de dados do Microsoft Access (.mdb).

Sumário
Este artigo mostra como usar o controle Caixa de diálogo comum na atualização das tabelas vinculadas no banco de dados. O controle Caixa de diálogo comum está disponível no Microsoft Office 2000 Developer Edition Tools. As tabelas vinculadas podem residir em um ou em vários bancos de dados back-end.

Para obter um exemplo de um outro método para vincular tabelas que usam funções de API (interface de programação de aplicativo) do Microsoft Windows, consulte o programa de exemplo Developer Solutions (Solutions9.mdb.) Para obter Solutions9.mdb, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
248674 ACC2000: bancos de dados de exemplo Orders e Developer Solutions disponíveis na MSDN
Abra o banco de dados Solutions9.mdb, selecione Usar vários bancos de dados na caixa Selecionar uma categoria de exemplos e clique em Vincular tabelas durante a inicialização na caixa Selecionar um exemplo.
Mais Informações
A Microsoft fornece exemplos de programação apenas por questões ilustrativas, sem garantias expressas ou implícitas. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um determinado propósito. Este artigo pressupõe que você conhece a linguagem de programação demonstrada e também as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudá-lo, fornecendo a explicação da funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para fornecer funcionalidades adicionais ou construir procedimentos específicos para atender às suas necessidades específicas. Um programa que usa o criador de banco de dados dividido tem suas tabelas em um banco de dados em um local de rede compartilhado (o banco de dados back-end) e todas as consultas, formulários, relatórios, macros e módulos em outro banco de dados em cada computador cliente (o banco de dados front-end). O banco de dados front-end vincula todas as tabelas ao banco de dados back-end. Caso o banco de dados back-end seja movido, ocorrem erros no programa. É possível habilitar o programa para detectar se o arquivo do banco de dados back-end não foi encontrado no local esperado e solicitar ao usuário o seu novo local.

O seguinte exemplo mostra como vincular novamente os dados da tabela no programa. Esse método usa um formulário que um usuário pode abrir para vincular novamente as tabelas back-end e outro formulário opcional capaz de verificar automaticamente o vínculo back-end quando o banco de dados for aberto.

Este artigo pressupõe que você tenha o controle Caixa de diálogo comum da Microsoft, disponível no Microsoft Office 2000 Developer Edition Tools. Caso você não tenha esse controle, ignore a função Browse() do exemplo.

OBSERVAÇÃO: caso use o controle Caixa de diálogo comum e pretenda distribuir o programa do banco de dados, será necessário usar o Package and Deployment Wizard para incluir o arquivo do controle caixa de diálogo comum, Comdlg32.ocx, e suas DLLs compatíveis nos arquivos de instalação. Para obter mais informações sobre como usar o Package and Deployment Wizard, consulte os artigos listados na seção "Referências" deste artigo.

Método para vincular novamente as tabelas do banco de dados back-end

CUIDADO: caso execute as etapas deste exemplo, você modificará o banco de dados de exemplo Northwind.mdb. Convém fazer backup do arquivo Northwind.mdb e seguir estas etapas em uma cópia do banco de dados.

  1. Crie um novo arquivo de banco de dados em branco do Access e nomeie-o FrontEnd.mdb.
  2. No menu Arquivo, aponte para Obter dados externos e clique em Vincular tabelas.
  3. Selecione o banco de dados de exemplo Northwind.mdb e clique em Vincular. Na caixa de diálogo Vincular tabelas, clique em Selecionar tudo e em OK.
  4. Crie o seguinte formulário novo sem nenhuma tabela ou consulta no modo Design:
    Formulário: frmNewDataFile

    Caixa de texto:
    Nome: txtFileName
    Width: 3"
    Controle Caixa de diálogo comum:
    Nome: xDialog
    Botão de comando:
    Nome: cmdBrowse
    Legenda: procurar...
    Ao clicar: =Browse()
    Botão de comando:
    Nome: cmdLinkNew
    Legenda: Atualizar vínculos
    Ao clicar: =Processtables()
    Botão de comando:
    Nome: cmdCancel
    Legenda: Cancelar
    Ao clicar: [Procedimento do evento]
    Cancelar: sim
  5. No menu Exibir, clique em Código.
  6. Digite 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.NameExit_cmdCancel_Click:   Exit SubErr_cmdCancel_Click:   MsgBox Err.Description   Resume Exit_cmdCancel_ClickEnd Sub					
  7. No menu Depurar, clique em Compilar FrontEnd.
  8. Salve e feche o formulário frmNewDataFile.
  9. Na janela Banco de Dados, clique em Módulos e em Novo.
  10. No menu Ferramentas, clique em Referências, selecione Microsoft DAO 3.6 Object Library caso ainda não esteja selecionado e clique em OK.
  11. Digite 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 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. No menu Depurar, clique em Compilar FrontEnd.
  13. Salve o módulo como RelinkCode e feche-o.
  14. Renomeie o banco de dados de exemplo Northwind.mdb ou mova-o para outra pasta no disco rígido para que as tabelas vinculadas em FrontEnd.mdb precisem ser atualizadas.
  15. Abra o formulário frmNewDataFile e clique no botão Procurar.
  16. Na caixa de diálogo Selecione novo arquivo de dados, localize Northwind.mdb na nova pasta e clique em Abrir.

    Observe que o caminho e o nome de arquivo do banco de dados aparecem na caixa de texto do formulário.
  17. Clique no botão Atualizar links do formulário.

    Observe que a seguinte mensagem é exibida quando o procedimento for concluído:
    A vinculação ao novo arquivo de dados back-end foi concluída com êxito.

Criando um formulário de inicialização para verificar as tabelas vinculadas

Para verificar automaticamente os vínculos das tabelas back-end sempre que você abrir o banco de dados FrontEnd.mdb, é possível criar um formulário oculto com esta finalidade executando as seguintes etapas:
  1. Crie um formulário novo sem nenhuma tabela ou consulta no modo Design.
  2. No menu Exibir, clique em Código.
  3. Digite o seguinte procedimento a ser executado quando o formulário for 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.NameExit_Form_Open:      Exit SubErr_Form_Open:      MsgBox Err.Number & ": " & Error.Description      Resume Exit_Form_Open      End Sub					
  4. No menu Depurar, clique em Compilar FrontEnd.
  5. Salve o formulário como frmCheckLink e feche-o.
  6. Para definir frmCheckLink como sendo o formulário de inicialização, no menu Ferramentas, clique em Inicializar, selecione frmCheckLink na lista Exibir formulário/página e clique em OK.
  7. Para ocultar o formulário frmCheckLink, clique com o botão direito do mouse em frmCheckLink na janela Banco de Dados, clique em Propriedades no menu de atalho, marque a caixa de seleção Oculto na caixa de diálogo Propriedades de frmCheckLink e clique em OK.
  8. Mova o banco de dados de exemplo Northwind.mdb para outra pasta no disco rígido para que as tabelas vinculadas em FrontEnd.mdb precisem ser atualizadas.
  9. Feche e reabra FrontEnd.mdb.

    Observe que a seguinte mensagem de erro é exibida:
    Não é possível localizar o arquivo back-end arquivo_do_banco_de_dados. Escolha um novo arquivo de dados.
    no qual arquivo_do_banco_de_dados é o caminho e o nome de arquivo do banco de dados back-end.

    Caso você clique em OK, o formulário frmNewDataFile é aberto para que seja possível selecionar um novo banco de dados back-end e atualiza os vínculos da tabela. Caso clique em Cancelar, a seguinte mensagem de erro será exibida:
    As tabelas vinculadas não podem localizar sua origem. Faça logon na rede e reinicie o programa.
Referências
Para obter informações adicionais sobre como personalizar o exemplo para atualizar as tabelas vinculadas no programa de exemplo Developer Solutions (Solutions9.mdb), clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
154397 ADT/ODE Como modificar o módulo RefreshTableLinks em Solutions.mdb
Para obter informações adicionais sobre o Package and Deployment Wizard, clique nos números abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft (alguns artigos podem estar em inglês):
240956 MOD2000: Package and Deployment Wizard agora usado na criação de um aplicativo distribuível
236143 MOD2000: como iniciar o Package and Deployment Wizard
inf relink reattach reconnect refresh link attach connect ADT ODE
Propriedades

ID do Artigo: 209862 - Última Revisão: 02/21/2007 20:55:58 - Revisão: 3.0

  • Microsoft Access 2000 Standard Edition
  • kbprogramming kberrmsg kbhowto kbinfo KB209862
Comentários