Office中国论坛/Access中国论坛

标题: 调用存储过程做子窗体的数据源 [打印本页]

作者: adge    时间: 2004-5-6 06:04
标题: 调用存储过程做子窗体的数据源
在主窗体mainForm中建一个子窗体subForm,主窗体中建一个按纽,按纽事件中加入
dim rst as new adodb.recordset
set rst=currentproject.connection.execute("exec pro存储过程 ‘" & 日期1 & "','" & 日期2 & "'")
forms!mainForm.subForm.form.recordsource=rst

proc存储过程是这样写的
alter proedure proc存储过程(@日期1 datetime,@日期2 datetime)
as
select 日期,字段1,字段2
from 表1 where 日期 between @日期1 and @日期
在点击按纽后系统提示"你输入的表达式引用了一个关闭或不存在的对象"
请各位高手帮忙是哪里出错了!!我这样做是想通过主窗体的内容再增加查询条件设置子窗体的数据源,达到各种查询条件下的子窗体内容.多谢!


[此贴子已经被作者于2004-5-5 22:47:59编辑过]


作者: zhuyiwen    时间: 2004-5-6 18:31
在ADP中,你可以这样做:

1、假设你的主窗体mainForm上有两个文本框:“日期1”和“日期2”,有一个按钮为“cmdQuery”,放上一个子窗体控件名为“subForm”,子窗体名为frmDetails,存储过程与你问题中的一致。

2、对子窗体frmDetails的属性进行设置:
    记录源:proc存储过程
    输入参数:@日期1=forms!mainForm!日期1, @日期2=forms!mainForm!日期2

3、对主窗体mainForm进行设置:
    “日期1”文本框:输入掩码:0000-99-99;0;_
    “日期2”文本框:输入掩码:0000-99-99;0;_

4、cmdQuery的事件处理程序:

Private Sub cmdQuery_Click()
    Me.subForm.Form.Requery
End Sub

运行mainForm, OK!达到你的要求!
[此贴子已经被作者于2004-5-6 10:35:44编辑过]


作者: zhuyiwen    时间: 2004-5-6 18:41
下图是我这里的实例:

[attach]4567[/attach]
作者: zhuyiwen    时间: 2004-5-6 18:51
分析你的错误:

forms!mainForm.subForm.form.recordsource=rst

forms!mainForm.subForm.form.recordsource是一个字符串性,因此肯定出错,如果改为:

Set Me.subForm.form.Recordset = rst

则可能通过。(我没有测试)
作者: adge    时间: 2004-5-7 04:36
谢谢zhuyiwen,我将代码改了你最后说的方法,不能通过。第1种方法我以前就是这么做的,但是如果存储过程的参数变动的话,就一定要更改客户端的窗体觉得麻烦。
我想到的可行的方法了;
me.subForm.form.recordsource="exec pro存储过程" & "'" & 日期1 & "','" & 日期2 & "'"

完全通过.再次谢谢zhuyiwen,以后还要多向你们请教!
作者: zhuyiwen    时间: 2004-5-7 05:07
至少又多一种解决问题的方法,呵呵

不过我的方法是测试通过了的.

[此贴子已经被作者于2004-5-6 21:08:18编辑过]


作者: 土豆    时间: 2004-5-10 19:50
form.recordsource可以直接使用SQL语句




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