Office中国论坛/Access中国论坛

标题: 请高手指教一段小程序,谢了 [打印本页]

作者: ge88    时间: 2011-9-17 18:06
标题: 请高手指教一段小程序,谢了
我有两个数据库A和B,现在打开A库的A11窗体,双击一个控件后希望打开B库中的B11窗体,并让数据记录定位与A11窗体记录相同,我用的代码是:
   Dim objappAccess As New Access.Application
     Dim strCN As String
     strCN = "病历号 = [forms].[A11].[病历号]"
If AccessObject("B.mdb").IsLoaded = True Then
    GoTo opdjgx
Else
     objappAccess.OpenCurrentDatabase "F:\Case\B.mdb"
    GoTo opdjgx
End If
opdjgx:
    objappAccess.DoCmd.OpenForm "B11", , , strCN

1.以上代码表现为打开了B库的B11窗体,但数据不认strCN,我理解是两个库strCN并不通用,不知是否理解正确,如何解决?
2.如何判定B库已打开,不需再次打开?

请高手高手高高手指导一下

作者: huangcl    时间: 2011-9-17 20:01
是否可以考虑把另一个数据库中的表或窗体链接到你的A数据库中。你试试看如果可行的话,接下来的事就很简单了,控件向导就能帮你完成你的要求了。
作者: roych    时间: 2011-9-17 20:11
DoCmd.OpenForm "B11" , , strCN, , , acDialog
作者: cjnt007    时间: 2011-9-18 15:03
strCN = "病历号 =" &  [forms].[A11].[病历号]
作者: ge88    时间: 2011-9-18 18:12
试过各位大佬的建议,都不能解决,我想大概是因为同时打开了两个数据库,strCN不被另一个库认
作者: cjnt007    时间: 2011-9-18 20:33
还有一个方法可以尝试下:就是利用docmd.openform方法最后一个参数OpenArgs,可以传递信息到被打开的窗体,你在B库B11窗体的open事件中加入相应代码处理这个传进来的参数me.openargs
作者: cjnt007    时间: 2011-9-18 20:51
我刚才根据楼主提供的代码做了一个测试,如果把代码
strCN = "病历号 = [forms].[A11].[病历号]"
修改成
strCN = "病历号 =" & [forms].[A11].[病历号]
是可以成功打开B11窗体并定位记录的。
楼主原来的那句是在B库B11窗体中应用筛选,需要通过 [forms].[A11].[病历号]这个引用获取A库中的信息,但这是无法实现的。如果修改为我给的那句,在传递筛选条件时,就已经将 [forms].[A11].[病历号]的实际值传递到B库中,B11窗体获得的是形如“病历号 = 119”这样的筛选条件,筛选就可以发挥作用了。

顺便请教下:AccessObject("B.mdb").IsLoaded 这句我在运行时报错,这是自定义对象吗?
作者: ge88    时间: 2011-9-19 16:03
反复试过了,好像不行啊,想做个简单的实例,但很失败,极郁闷。
AccessObject("B.mdb").IsLoaded 是个错误的句子,也是我想咨询大佬们的,原意是想判断B库是否被打开,避免反复重复打开。
现受 roych 老师启发,在acDialog之后运行关闭库命令,虽不尽如人意,但也算解决了这个问题。
作者: ge88    时间: 2011-9-19 16:04
反复试过了,好像不行啊,想做个简单的实例,但很失败,极郁闷。
AccessObject("B.mdb").IsLoaded 是个错误的句子,也是我想咨询大佬们的,原意是想判断B库是否被打开,避免反复重复打开。
现受 roych 老师启发,在acDialog之后运行关闭库命令,虽不尽如人意,但也算解决了这个问题。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3