Office中国论坛/Access中国论坛

标题: 求助:参数查询 SQL查询(我自己出问题的例子在9楼,拜托大家给看看) [打印本页]

作者: 小鸡快跑    时间: 2010-8-12 10:34
标题: 求助:参数查询 SQL查询(我自己出问题的例子在9楼,拜托大家给看看)
本帖最后由 小鸡快跑 于 2010-8-18 14:36 编辑

http://www.office-cn.net/forum.p ... 2725&extra=page%3D2
我的问题来自于上面这个帖子中的例子。琢磨了好几天没明白。帖子主人也迟迟没出现,只好在这里询问。
在这个例子中,主窗体选择了周次和班级,点击录入后,打开录入窗体。
在录入窗体的加载事件中,定义了缺勤子窗体的数据来源sql。
我发现这个子窗体的查询跟我以前接触的不一样,就是你点击子窗体的记录源,打开的查询界面,会发现:周次和班级的参数不是字段的名字,而是具体字段的值。也就是,每次主窗口选择不同的班级和周次,到这里查看参数都会变成具体的值,比如周次变成'2009-2010-9',班级变成'07高车一'。这是怎么做到的呢?
我自己也试着做一个这样的窗体,也定义了加载时的SQL,但是一直也没成功,因为不知道子窗体的记录源怎么来做?不知问题出在哪里。

在这里向大家请教,希望得到指点!先谢谢了!
作者: styhs    时间: 2010-8-12 11:44
本帖最后由 styhs 于 2010-8-12 11:46 编辑

Private Sub Form_Load()
Me.txt_周次 = Forms!主窗体!cmb_周次
Me.txt_班级 = Forms!主窗体!cmb_班级.Column(1)

SQL = "SELECT * FROM 缺勤表 WHERE 学期周次 =  '" & Me.txt_周次 & "'  And 班级名称 = '" & Me.txt_班级 & "' order by 学号"
Me.缺勤表_子窗体.Form.RecordSource = SQL
End Sub

窗体在加载时,赋值文本框值等于主窗体的相应列表框值,在拼装SQL语句,作为子窗体的数据。
在 Me.缺勤表_子窗体.Form.RecordSource = SQL 语句之前,插入 Debug.Print SQL 就可以清晰看到SQL语句的内容。
赋值窗体数据源(数据来自本地表)一般都是这样做,楼主是采用ADO或DAO记录集赋值(Set Me.缺勤表_子窗体.Form.RecordSet = ADODB.RecordSet)还是其他方法,能否告知?
作者: 小鸡快跑    时间: 2010-8-12 13:19
本帖最后由 小鸡快跑 于 2010-8-12 13:25 编辑

2楼,谢谢你的解答,我有许多还是不明白,因为我没有接触到ADO之类的东东。我现在不明白的是子窗体的记录源是自动加上的sql语句,还是作者写的?关键是他写的原文是什么?原来的参数是怎么定义的。
我也很希望那个帖子的主人尽快出现来解答呢!
作者: 小鸡快跑    时间: 2010-8-12 14:53
我照样子做,怎么子窗体的记录源里的参数不变化呢?到底子窗体的记录源sql该怎么写,或者这里需要调用其他什么功能才能实现子窗体的参数变成具体的值?
作者: 小鸡快跑    时间: 2010-8-13 21:42
没人知道吗?没人知道吗?
作者: styhs    时间: 2010-8-14 17:51
2楼,谢谢你的解答,我有许多还是不明白,因为我没有接触到ADO之类的东东。我现在不明白的是子窗体的记录源 ...
小鸡快跑 发表于 2010-8-12 13:19


2楼已解释得很清楚了,设计子窗体时先编写数据源和控件,然后在子窗体的加载事件中、拼装SQL字符串,再赋值作为子窗体的数据源,怎么会不明白...
将附件上传吧


作者: 小鸡快跑    时间: 2010-8-14 23:49
先谢谢你的回复。我的问题来自一楼链接中的那个帖子。里面有例子。就是这个例子中,缺勤子窗体的记录源你打开看看,是“SELECT * FROM 缺勤表 WHERE 学期周次='2009-2010-9' And 班级名称='07高车一' ORDER BY 学号;”这里的学期周次和班级名称是个具体的值,就是你在主窗口中选择了什么周次和班级,这里的记录源中的参数就会变成什么,我就是想知道这是怎么做到的?最开始写好的记录源内容里,这两个参数是怎么定义的?


2楼已解释得很清楚了,设计子窗体时先编写数据源和控件,然后在子窗体的加载事件中、拼装SQL字符串,再 ...
styhs 发表于 2010-8-14 17:51




作者: styhs    时间: 2010-8-16 14:36
1、开始的定义:SELECT * FROM 缺勤表
2、窗体加载:
Me.txt_周次 = Forms!主窗体!cmb_周次
Me.txt_班级 = Forms!主窗体!cmb_班级.Column(1)
SQL = "SELECT * FROM 缺勤表 WHERE 学期周次 =  '" & Me.txt_周次 & "'  And 班级名称 = '" & Me.txt_班级 & "' order by 学号"
Me.缺勤表_子窗体.Form.RecordSource = SQL
3、结果为:
变量SQL即为"SELECT * FROM 缺勤表 WHERE 学期周次='2009-2010-9' And 班级名称='07高车一' ORDER BY 学号"
作者: 小鸡快跑    时间: 2010-8-17 16:41
我把我的例子发上来,麻烦你看看问题出在哪里?
1、首先,考勤日期201008和201009两个月考勤数据已录入,可是却看不到。
2、我这个子窗体的记录源怎么就是不变?

多谢多谢!

回复 styhs 的帖子
作者: 小鸡快跑    时间: 2010-8-18 14:37
来人哪,帮忙啊
作者: 小鸡快跑    时间: 2010-8-20 08:16
还没人指点啊?顶起来
作者: 小鸡快跑    时间: 2010-8-22 10:35

执着的顶贴,等高人指点
作者: 小鸡快跑    时间: 2010-8-23 11:21

执着的顶贴,等高人指点
作者: todaynew    时间: 2010-8-23 11:30

执着的顶贴,等高人指点
小鸡快跑 发表于 2010-8-23 11:21

请参见《小鸡逃学》一文。
作者: 小鸡快跑    时间: 2010-8-26 13:08
我相当的惭愧!这几天工作很忙,没仔细看论坛,居然错过了你专门为这个问题写的例子,不好意思!
小鸡逃学——有趣的比喻,多谢,我晚上回家仔细琢磨琢磨你的例子,现在工作没时间呢!




请参见一文。
todaynew 发表于 2010-8-23 11:30








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