Office中国论坛/Access中国论坛

标题: [求助]:关于子窗体的引用问题! [打印本页]

作者: gechunkai    时间: 2006-1-19 17:54
标题: [求助]:关于子窗体的引用问题!
我做了个自用的合同管理软件!

通过合同窗体(frmcontact)进入供应商信息窗口,

在供应商信息资料的窗体(frmcompany)中,有二个子窗体,都在page联系人中。

其中一个联系人子窗体(frmcompany_linkman)是链接子窗体,链接字段是供应商ID

另一个子窗体(frmcompany_contact)是未链接子窗体。我希望通过联系人子窗体选择的联系人显示相应的联系方式。

所以在frmcompany_linkman的current事件中设定me.parent.frmcompany_contact.form.recordsource=……(见附件代码),可是每次运行都出现“您输入的表达式对属性FORM无效”的提示,不知道是什么原因。

希望高手帮忙找找原因!谢谢

(其实我已经通过列表框解决了这个问题,我认为可能是对象的指定出了问题,因为列表框无法增加修改,所以我还是希望用子窗体,现在我很郁闷,希望大家来帮忙)[attach]15470[/attach]


[此贴子已经被作者于2006-1-19 10:20:17编辑过]


作者: zcy0718    时间: 2006-1-19 21:02
用frmcompany_linkman的current事件不行,我是这样做的(不知道如何上传附件,说说我的方法吧)

设置frmcompany_contact记录源为tblcontactinfo,添加好所有控件,窗体格式设为数据表。frmcompany_linkman窗体删除frmcompany_linkman的current事件,在联系人id或联系人姓名文本框的鼠标单击事件中加以下代码

    Me.Parent.frmcompany_contact.Form.Filter = "[联系人ID]='" & Me.联系人ID & "'"
    Me.Parent.frmcompany_contact.Form.FilterOn = True

查看时单击该文本框筛选frmcompany_contact记录集可以达到要求。同样的代码放在current事件中就出错,不知为何。
作者: zcy0718    时间: 2006-1-19 21:12
用current事件只是在打开窗体时出错,打开后就可以正常运行代码。不用上面的方法,只是在current中加上错误处理也可以。只是第一次打开是没有筛选,更上面的方法相比好处是点任意字段都会筛选,而不是某一特定字段。

Private Sub Form_Current()
On Error GoTo 100
Me.Parent.frmcompany_contact.Form.Filter = "[联系人ID]='" & Me.联系人ID & "'"
Me.Parent.frmcompany_contact.Form.FilterOn = True
Exit Sub
100 Exit Sub
End Sub

作者: gechunkai    时间: 2006-1-19 21:30
谢谢zcy老兄!真没想到是CURRENT事件的问题,我还一直以为是对象引用的问题。

我也试验了一下,用RECORDSOURCE在CLICK事件中就一切OK,真是不明白啊。

另外,我总觉得把事件设在某个文本框的鼠标单击事件中有些麻烦,因为不光是姓名被点中,子窗体要刷新,其它所有的比如部门,职务被点中都应该刷新。这是不是有什么事件可以全部包括?

我自己找了一下,什么FORM_CLICK,主体_CLICK等等,都不行。zcy老兄,你有什么高招吗?望不吝赐教!
作者: gechunkai    时间: 2006-1-19 22:00
出了错,我还真没再去试用,没想到并不影响功能的试用。用ON ERROR GOT 果然就OK了。呵呵,今天收获了一个重要的经验,估计以后还能用上。

另外,zcy老兄,我想和你进一步探讨一下,这样frmcompany_contact可以正常出现对应的记录了,但是如果我想增加一个功能就是可以添加相应的记录,比如给张三再加一种联系方式,可以直接在frmcompany_contact中添加。目前因为我们做的只是筛选,添加的记录建立不了联系,可不可以用JION语句或是什么别的方式实现这个功能呢?
作者: zcy0718    时间: 2006-1-20 03:10
添加联系方式按键代码:
Private Sub cmdaddcontact_Click()
    DoCmd.OpenForm "frmcompany_contact", , , , , , Me.frmcompany_linkman.Form.联系人ID'用 openargs 记录  联系人id 字段的值
End Sub
在窗体 frmcompany_contact中添加如下代码
Private Sub Form_Load()'这里可以用msgbox函数询问用户是否确定要添加,否则打开窗体就产生了一条新纪录
    If IsNull(Me.OpenArgs) = fasle Then
        DoCmd.GoToRecord , , acNewRec'默认添加新纪录
        Me.联系人ID = Me.OpenArgs'自动输入 联系人id
   End If
End Sub


Private Sub Form_Close()
    If IsNull(Me.OpenArgs) = fasle Then
DoCmd.RunCommand acCmdSave
       Forms![frmcompany]![frmcompany_contact].Requery'重新查询frmcompany中的contact子窗体
    End If
End Sub

最好把表 tblcontactinfo 中的 contacttype 查阅 由列表框改为 组合框 在frmcompany中 把该字段代表的控件删掉在重新添加一次
我发现是列表框式有时该字段添加不上而且用列表框太受限制,如果要添加 家庭电话 就没有办法加上去。
作者: gechunkai    时间: 2006-1-20 04:33
呵呵。谢谢ZCY老兄。你说的和我目前做的一样。我目前是用列表框显示联系方式,另外用命令按钮通过OPENARGS参数打开新窗体输入新的联系方式。

我一直在研究:怎么只用上面的二个子窗体,就可以实现查看、修改、添加的功能。现在虽然没有达到我的目的,不过,我已经又学到一些了。

谢谢。多交流才能进步啊!

我的QQ:4423370,希望有机会能多联系。
作者: zcy0718    时间: 2006-1-20 05:44
多交流才能进步啊!我也有同感!我的qq 63181450。




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