如何重新使用常见的对话框控件,在 Access 2000 中的后端表的链接

文章翻译 文章翻译
文章编号: 209862 - 查看本文应用于的产品
为这篇文章的一个 Microsoft Access 97 版本,请参阅 181076
高级: 需要专家编码、 互操作性,和多用户技能。

本文只适用于 Microsoft Access 数据库 (.mdb)。

展开全部 | 关闭全部

本文内容

概要

本文介绍如何使用 通用对话框 控件来刷新您的数据库中的链接的表。使用 Microsoft Office 2000 开发版工具与 公共对话框 控件。正在链接表可以驻留在一个或多个后端数据库中。

有关使用 Windows 应用程序编程接口 (API) 函数中的不同的方法重新链接表的示例请参阅开发解决方案示例程序 (Solutions9.mdb)。要获取 Solutions9.mdb,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
248674ACC2000: 订单和 Microsoft 开发人员网络 (MSDN) 上可用的开发解决方案示例数据库
打开 Solutions9.mdb 数据库,在 选择一个类别的示例 框中选择 使用多个数据库,然后单击 链接表,在启动时选择示例 框中。

更多信息

Microsoft 提供的编程示例只,用于说明不附带任何明示或暗示保证。这包括,但不限于对适销性或针对特定用途的适用性的暗示的担保。本文假定您熟悉演示了正在使用的编程语言以及用于创建和调试过程的工具。Microsoft 支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您的具体要求。拆分数据库设计使用的程序在共享的网络位置 (在后端数据库) 中的一个数据库和所有其查询、 窗体、 报表、 宏,和 (前端数据库) 的每台客户端计算机上的另一个数据库中的模块中有其表。在前端数据库链接的表的所有后端数据库。如果移动了后端数据库,在程序中发生错误。您可以启用您的程序来检测的后端数据库缺少该文件从其预期的位置,然后提示用户输入新的位置。

下面的示例演示如何重新链接程序中的表数据。此方法使用一个窗体,用户可以打开要重新链接该后端表和另一个可选的窗体的自动验证后端链接时打开数据库。

本文假定您已提供了 Microsoft Office 2000 开发版工具与 Microsoft 通用对话框 控件。如果您没有此控件,跳过在示例中 Browse() 函数。

: 如果您使用 通用对话框 控件,并且要发布您的数据库程序则必须包含通用对话框控件使用打包和部署向导文件、 Comdlg32.ocx,和与您的安装程序文件及其支持 dll。有关使用打包和部署向导的详细信息请参阅文章在本文的"参考"一节中列出。

若要重新链接后端数据库表的方法

注意: 如果您按照这些步骤在此示例中,您修改示例数据库 Northwind.mdb。您可能希望备份 Northwind.mdb 文件并在该数据库的副本,请按照下列步骤。

  1. 创建新的空白 Access 数据库文件并将其命名 FrontEnd.mdb
  2. 文件 菜单上指向 获取外部数据,然后单击 链接表
  3. 单击浏览以选择示例数据库 Northwind.mdb,然后单击 链接链接表 对话框中单击 全选,然后单击 确定
  4. 创建不基于任何表或查询在设计视图中的,下列新窗体,请执行以下操作:
    窗体: frmNewDataFile

    文本框中:
    名称: txtFileName
    宽度: 3"
    通用对话框控制,请执行以下操作:
    名称: xDialog
    命令按钮:
    名称: cmdBrowse
    标题: 浏览...
    在单击上: =Browse()
    命令按钮:
    名称: cmdLinkNew
    标题: 刷新链接
    在单击上: =Processtables()
    命令按钮:
    名称: cmdCancel
    标题: 取消
    OnClick: [事件过程]
    取消: 是
  5. 视图 菜单上单击 代码
  6. 键入或粘贴以下过程:
    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. 调试 菜单上单击 编译 FrontEnd
  8. 保存 frmNewDataFile 窗体并将其关闭。
  9. 在数据库窗口中单击 模块,然后单击 新建
  10. 工具 菜单上单击 引用,如果它尚未被选中,选择 Microsoft DAO 3.6 对象库,然后单击 确定
  11. 键入或粘贴以下代码:
    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. 调试 菜单上单击 编译 FrontEnd
  13. 将模块保存为 RelinkCode,然后将其关闭。
  14. 重命名 Northwind.mdb 示例数据库,或将其移到另一个文件夹在您的硬盘上,以使 FrontEnd.mdb 中链接的表将需要刷新。
  15. 打开 frmNewDataFile 窗体,然后单击 浏览 按钮。
  16. 请选择新建数据文件 对话框中找到 Northwind.mdb 其新的文件夹中,然后单击 打开

    请注意,该数据库的路径和文件名称出现在表单上的文本框中。
  17. 单击窗体上的 刷新链接 按钮。

    请注意在完成此过程后您将收到以下消息:
    链接到新的后端数据文件已成功完成。

创建一个启动窗体上,以检查链接的表

要验证到后端表的链接自动每次打开 FrontEnd.mdb 数据库,您可以创建实现此目的将隐藏窗体按以下步骤:
  1. 创建不基于任何表或查询在设计一个新窗体视图。
  2. 视图 菜单上单击 代码
  3. 键入要在窗体打开时运行以下过程:
    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. 调试 菜单上单击 编译 FrontEnd
  5. 将窗体保存为 frmCheckLink,然后将其关闭。
  6. 若要将 frmCheckLink 设置为启动窗体的 工具 菜单单击 启动显示窗体/页 列表中选择 frmCheckLink,然后单击 确定
  7. 若要使隐藏窗体 frmCheckLink,frmCheckLink 在数据库窗口中用鼠标右键单击、 单击快捷菜单上的 属性、 单击 frmCheckLink 属性 对话框中选择 隐藏 复选框,然后单击 确定
  8. 到另一个文件夹移动到硬盘上的 Northwind.mdb 示例数据库,以便 FrontEnd.mdb 中链接的表将需要刷新。
  9. 关闭并重新打开 FrontEnd.mdb。

    请注意您将收到以下错误消息
    找不到该文件后端 database file。请选择新的数据文件。
    database file 所在路径和文件名后端数据库的名称。

    如果单击 确定 frmNewDataFile 窗体将打开,您可以选择一个新的后端数据库,然后刷新您的表链接。如果单击 取消 您会收到以下错误消息:
    链接的表中找不到它们的源。请登录到网络,然后重新启动该程序。

参考

有关自定义示例刷新开发解决方案示例中的链接的表的其他信息程序 (Solutions9.mdb) 中,单击以下文章编号,以查看 Microsoft 知识库中相应的文章:
154397ADT/ODE 如何修改在 Solutions.mdb RefreshTableLinks 模块
关于打包和部署向导的其他信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
240956MOD2000: 打包和部署向导现在用于创建可分发应用程序
236143MOD2000: 如何开始打包和部署向导

属性

文章编号: 209862 - 最后修改: 2005年6月23日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft Access 2000 标准版
关键字:?
kbmt kbprogramming kberrmsg kbhowto kbinfo KB209862 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 209862
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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