设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2517|回复: 8
打印 上一主题 下一主题

[模块/函数] 谁有自动链接同目录下两个后端数据库的代码?

[复制链接]
跳转到指定楼层
1#
发表于 2012-11-15 05:54:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁有自动链接同目录下两个后端数据库的代码?给我一个或给个链接,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2012-11-15 09:44:07 | 只看该作者
这个可能需要你 先建立一个配置表,指明哪些表是对应一个后台数据库,哪些表对应另一个后台数据库
然后 将单个 刷新代码 里连接数据库的 分开两部分
3#
发表于 2012-11-15 09:49:07 | 只看该作者
本帖最后由 todaynew 于 2012-11-15 10:50 编辑

在系统表MSysObjects中有四个字段与此问题有关,即Database、ForeignName、Name、Type,可利用这三个字段来进行多后台的重联处理。

4楼的函数在Autoexec宏中用Runcode宏命令调用多次分别指定不同的后台文件即可。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2012-11-15 09:50:03 | 只看该作者
Function MyTrdb(Fpath As String, Fname As String)
'引用:Microsoft Scripting Runtime
'功能:重建表链接。
'参数:Fname:后台数据库完整文件名
'示例:MyTrdb(CurrentProject.Path & "\","后台.mdb")

Dim myFSO As New FileSystemObject
Dim obj As AccessObject, dbs As Object
Dim tbnmae As String, sname As String
Dim Dname As String
On Error GoTo MyTrdb_Err
     If myFSO.FileExists(Fpath & Fname) = True Then
         Set dbs = Application.CurrentData
         For Each obj In dbs.AllTables
             If InStr(obj.Name, "MSys") = 0 Then
                 If DLookup("Type", "MSysObjects", "name='" & obj.Name & "'") = 6 Then
                     Dname = Nz(DLookup("Database", "MSysObjects", "name='" & obj.Name & "'"), "")
                     If Fpath & Fname <> Dname Then
                         If Dname <> "" Then
                             If Mid(Dname, InStrRev(Dname, "\") + 1) = Fname Then
                                 tbnmae = obj.Name
                                 sname = DLookup("ForeignName", "MSysObjects", "name='" & obj.Name & "'")
                                 DoCmd.DeleteObject acTable, tbnmae                                                        '删除链接
                                 DoCmd.TransferDatabase acLink, "Microsoft Access", Fpath & Fname, acTable, sname, tbnmae, False  '建立链接
                             End If
                         End If
                     End If
                 End If
             End If
         Next obj
     
    End If
MyTrdb_Exit:
     Exit Function

MyTrdb_Err:
     MsgBox Error$
     Resume MyTrdb_Exit
End Function
5#
 楼主| 发表于 2012-12-6 13:02:33 | 只看该作者
试了一下,若链接表是子表就没法更改链接,是什么原因?
6#
发表于 2012-12-6 13:46:31 | 只看该作者

本帖最后由 todaynew 于 2012-12-6 13:48 编辑
静儿 发表于 2012-12-6 13:02
试了一下,若链接表是子表就没法更改链接,是什么原因?

可以呀

比如在后台1中加一个学校表,将年级表作为子表,链接一样正常。
7#
 楼主| 发表于 2012-12-6 16:04:36 | 只看该作者
找到原因了:由于MSysObjects表中存在两条 obj.Name 的记录时只取第一个记录就会出现一些链接表未更新的情况,以下代码加一个条件就可以了。
Dname = Nz(DLookup("[Database]", "MSysObjects", "[name]='" & obj.Name & "' and [type]=6 "), "")
8#
发表于 2012-12-6 16:14:46 | 只看该作者
静儿 发表于 2012-12-6 16:04
找到原因了:由于MSysObjects表中存在两条 obj.Name 的记录时只取第一个记录就会出现一些链接表未更新的情况 ...

点击这里给我发消息

9#
发表于 2013-8-20 19:16:50 | 只看该作者
谢谢 3楼 todaynew 分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-3 15:13 , Processed in 0.097867 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表