Jak znovu propojit tabulky back-end se běžné ovládací prvek dialogové okno v aplikaci Access 2000

Překlady článku Překlady článku
ID článku: 209862 - Produkty, které se vztahují k tomuto článku.
Aplikace Microsoft Access 97 verzi tohoto článku v tématu 181076.
Upřesnit: Vyžaduje odborných kódování interoperability a víceuživatelské dovedností.

Tento článek se týká pouze databáze aplikace Microsoft Access (MDB).

Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

V tomto článku se dozvíte, jak ovládací prvek Společného dialogové okno slouží k aktualizaci propojených tabulek v databázi. Ovládací prvek Společného dialogové okno je k dispozici nástroje sady Microsoft Office 2000 Developer Edition. Tabulky propojena může nacházet ve jednoho nebo mnoha databáze back-end.

Příkladem jinou metodu chcete-li obnovit vazbu tabulky používající programovací rozhraní (API Application Programming interface) funkce aplikace Microsoft Windows naleznete v tématu ukázkový program pro vývojáře řešení (Solutions9.mdb) Chcete-li získat Solutions9.mdb, klepněte článku znalostní báze Microsoft Knowledge Base:
248674ACC2000: Objednávky a vývojáře řešení ukázkové databáze k dispozici služby Microsoft Developer Network (MSDN)
Otevřete databázi, Solutions9.mdb, vyberte použít více databází v rozevíracím seznamu Vybrat kategorii příklady a klepněte na Odkaz tabulky při spuštění v rozevíracím seznamu Vybrat příklad.

Další informace

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo mlčky. To zahrnuje, ale není omezen pouze na předpokládaných záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste je obeznámen s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu však nemohou tyto příklady přidány funkce nebo vytvářet postupy podle svých specifických požadavků. Program, který používá rozdělení návrhu databáze má jeho tabulek v jedné databázi do sdíleného síťového umístění (databáze back-end) a všechny jeho dotazy, formuláře, sestavy, makra a moduly v jiné databázi, v každém klientském počítači (front-end databáze). Front-endovou databázi propojí všechny jeho tabulky databáze back-end. Pokud přesunete databáze back-end, dojít k chybám v programu. Můžete povolit program rozpoznat databáze back-end soubor nebyl nalezen z očekávaných umístění a pak uživateli zobrazit výzvu k zadání nového umístění.

Následující příklad ukazuje, jak znovu propojit data tabulky v programu. Tato metoda se používá formulář, který uživatel může otevřít, chcete-li obnovit vazbu tabulky back-end a jiné volitelné formulář, který můžete automaticky ověřit odkaz back-end, při otevření databáze.

Tento článek předpokládá, že máte ovládacího prvku Microsoft Společného Dialog, protoko nástroje sady Microsoft Office 2000 Developer Edition. Pokud nemáte tento ovládací prvek, přejděte v příkladu funkce Browse().

Poznámka: Pokud použijete ovládací prvek Společného Dialog a chcete distribuovat databázové aplikace, je nutné pomocí Package a Průvodce zavedením zahrnují společné dialog ovládací soubor Comdlg32.ocx a jeho podpůrné soubory DLL se soubory instalace. Další informace o použití Package a Průvodce zavedením naleznete v článcích uvedených v tomto článku v části "Odkazy".

Způsob, pokud chcete znovu připojit tabulky databáze back-end

Upozornění: Pokud budete postupovat podle kroků uvedených v tomto příkladu, změníte ukázkovou databázi Northwind.mdb. Můžete zazálohovat soubor Northwind.mdb a v kopii databáze, postupujte následujícím způsobem.

  1. Vytvořte nový prázdný soubor databáze aplikace Access s názvem FrontEnd.mdb.
  2. V nabídce soubor přejděte na příkaz Načíst externí data a potom klepněte na příkaz Propojit tabulky.
  3. Vyhledejte a vyberte ukázkovou databázi Northwind.mdb a klepněte na odkaz. V dialogovém okně Propojit tabulky klepněte na tlačítko Vybrat vše a pak klepněte na tlačítko OK.
  4. Vytvořit následující nový formulář, které není založený na libovolnou tabulku nebo dotaz v návrhovém zobrazení:
    Formuláře: frmNewDataFile

    Textové pole:
    Název: txtFileName
    Šířka: 3 "
    Běžné ovládací prvek dialogové okno:
    Název: xDialog
    Příkazové tlačítko:
    Název: cmdBrowse
    Titulek: Procházet...
    Při klepnutí: =Browse()
    Příkazové tlačítko:
    Název: cmdLinkNew
    Titulek: Aktualizovat propojení
    Při klepnutí: =Processtables()
    Příkazové tlačítko:
    Název: cmdCancel
    Titulek: Storno
    Při klepnutí: [Událostní procedura]
    Zrušit: Ano
  5. V nabídce Zobrazit klepněte na kód.
  6. Zadejte nebo vložte následující postup:
    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. V nabídce Debug klepněte na příkaz Compile klienta.
  8. FrmNewDataFile formulář uložte a zavřete jej.
  9. V okně Databáze klepněte moduly a poté klepněte na tlačítko Nový.
  10. V nabídce Nástroje klepněte na odkazy, pokud nebylo již vybráno, vyberte KNIHOVNU Microsoft DAO 3.6 Object Library a klepněte na tlačítko OK.
  11. Zadejte nebo vložte následující kód:
    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. V nabídce Debug klepněte na příkaz Compile klienta.
  13. Uložte modul jako RelinkCode a zavřete jej.
  14. Ukázkovou databázi Northwind.mdb přejmenovat nebo přesunout do jiné složky na pevném disku tak, že bude nutné aktualizovat propojených tabulek v FrontEnd.mdb.
  15. Otevřete formulář frmNewDataFile a potom klepněte na tlačítko Procházet.
  16. V dialogovém okně Prosím vybrat nový datový soubor Northwind.mdb v jeho nové složce vyhledejte a klepněte na příkaz Otevřít.

    Všimněte si, že cestu a název databáze je zobrazen v textovém poli ve formuláři.
  17. Klepněte na tlačítko Aktualizovat odkazy ve formuláři.

    Poznámka: Po dokončení postupu zobrazit následující zpráva:
    Propojení nového back-end datového souboru byla úspěšná.

Vytvoření spouštěcí formulář ke kontrole propojené tabulky

Chcete-li automaticky při každém ověřit odkazy na tabulky back-end, u otevření databáze FrontEnd.mdb, můžete vytvořit skrytém formuláři pro tento účel provedením následujících kroků:
  1. Vytvoření nového formuláře nejsou založené na jakékoli tabulce nebo dotazu v návrhovém zobrazení.
  2. V nabídce Zobrazit klepněte na kód.
  3. Zadejte následující proceduru spustit po otevření formuláře:
    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. V nabídce Debug klepněte na příkaz Compile klienta.
  5. Uložte formulář jako frmCheckLink a zavřete jej.
  6. Nabídky frmCheckLink nastavit jako spouštěcí formulář, v nabídce Nástroje klepněte na tlačítko Po spuštění, vyberte v seznamu Zobrazit formulář či stránkufrmCheckLink a klepněte na tlačítko OK.
  7. Chcete-li, aby frmCheckLink skrytém formuláři, klepněte pravým tlačítkem myši na frmCheckLink v okně databáze, klepněte na příkaz Vlastnosti v místní nabídce, zaškrtněte políčko skrytý v dialogovém okně Vlastnosti frmCheckLink a potom klepněte na tlačítko OK.
  8. Přesunout vzorovou databázi Northwind.mdb do jiné složky na pevném disku tak, že bude nutné aktualizovat propojených tabulek v FrontEnd.mdb.
  9. Zavřete a znovu otevřete FrontEnd.mdb.

    Všimněte si, že následující chybová zpráva
    Nelze najít soubor back-end database file. Vyberte nový datový soubor.
    kde database file je cestu a název souboru databáze back-end.

    Pokud klepnete na tlačítko OK, frmNewDataFile formuláře otevře můžete vybrat nové databáze back-end a poté aktualizuje odkazy tabulky. Pokud klepnete na tlačítko Storno, zobrazí následující chybová zpráva:
    Propojených tabulek nemůže najít jejich zdroj. Prosím přihlášení k síti a o restartování programu.

Odkazy

Další informace o přizpůsobení v příkladu aktualizace propojené tabulky ve vzorku řešení pro vývojáře aplikace (Solutions9.mdb) získáte znalostní báze Microsoft Knowledge Base:
154397Funkce ADT/ODE jak změnit modul RefreshTableLinks v Solutions.mdb
Další informace o Package a Průvodce nasazením získáte v následujících článcích v databázi Microsoft Knowledge Base:
240956MOD2000: Package a Průvodce zavedením nyní slouží k vytvoření přenositelného aplikace
236143MOD2000: Jak Start Package a Průvodce zavedením

Vlastnosti

ID článku: 209862 - Poslední aktualizace: 23. června 2005 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Access 2000 Standard Edition
Klíčová slova: 
kbmt kbprogramming kberrmsg kbhowto kbinfo KB209862 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:209862

Dejte nám zpětnou vazbu

 

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