|
本帖最后由 roych 于 2011-5-25 11:40 编辑
这是俺根据一个前辈的代码,自己做的重定位链接表,供参考(详细请看代码注释,如果无法执行的话,请重新引用Office库)。
关键在于打开数据库时应该是带密码的,而不是LZ所以为的那样。
dim dbs as dao.database
set dbs = OpenDatabase(Me.Txt_Path.Value, False, False, ";PWD=" & MyPwd)
- Private Sub Cmd_LnkTbl_Click()
- '定义后台数据库、后台链接表、后台路径以及链接表密码。
- Dim dbs As Database
- Dim Tdf As TableDef
- Dim MyPath As String
- Dim MyFile As String
- Dim MyPwd As String
- '错误处理
- On Error GoTo err1
- '初始化,表示未链接或者链接失败。
- LnkTbl = False
- '删除当前数据库的所有链接表。
- Set dbs = CurrentDb
- For Each Tdf In CurrentDb.TableDefs
- If Len(Tdf.Connect) > 0 Then
- DoCmd.DeleteObject acTable, Tdf.Name
- End If
- Next Tdf
- dbs.Close
- '显示打开对话框以获取后台路径(需要引用Office库才能执行)
- Set fd = Application.FileDialog(msoFileDialogFilePicker)
- With fd
- .Filters.Clear
- .Filters.Add "Access数据库(*.mdb)", "*.mdb"
- .Title = "请浏览文件"
- .ButtonName = "打开"
- .InitialView = msoFileDialogViewDetails
- If .Show = -1 Then
- '获取链接表地址和密码。
- Me.Txt_Path.Value = CStr(fd.SelectedItems.Item(1))
- '
- MyPwd = "后台数据库密码"
- '打开带密码的数据库。
- Set dbs = OpenDatabase(Me.Txt_Path.Value, False, False, ";PWD=" & MyPwd)
- For Each Tdf In dbs.TableDefs
- '如果是非隐藏的本地表就链接(隐藏表会包含系统对象表)。
- If Len(Tdf.Connect) = 0 And Tdf.Attributes = 0 Then
- DoCmd.TransferDatabase acLink, "Microsoft Access", Me.Txt_Path.Value, acTable, Tdf.Name, Tdf.Name, False
- End If
- Next Tdf
- dbs.Close
- Set dbs = Nothing
- LnkTbl = True
- Exit Sub
- Else
- Debug.Print "用户取消"
- End If
- End With
- err1:
- LnkTbl = False
- MsgBox Err.Description, vbExclamation, "错误!"
- End Sub
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|