可能是查询设计没做好,请参考如下查询方案:
窗体设计视图如下:
添加未绑定文本框"TEXT1"用于输入学号做精确查询
添加未绑定文本框"TEXT2"用于输入姓名关键字做模糊查询
添加子窗体"students"显示查询结果,并将子窗体的数据源属性设置为下列SQL查询语句:
SELECT * FROM Students WHERE (FORMS!学生查询!TEXT1 Is Null And FORMS!学生查询!TEXT2 Is Null) Or (FORMS!学生查询!TEXT1 Is Not Null And FORMS!学生查询!TEXT2 Is Null And sid=FORMS!学生查询!TEXT1) Or (FORMS!学生查询!TEXT1 Is Null And FORMS!学生查询!TEXT2 Is Not Null And sname Like "*" & FORMS!学生查询!TEXT2 & "*") Or (FORMS!学生查询!TEXT1 Is Not Null And FORMS!学生查询!TEXT2 Is Not Null And sid=FORMS!学生查询!TEXT1 And sname Like "*" & FORMS!学生查询!TEXT2 & "*")这样两个条件文本框,单输入学号就按学号精确查询,单输入名字关键字就按姓名模糊查询,两个条件都输入就按两个条件满足来查询,两个条件都留空就输出所有名单。
分别为两个命令按钮编写下列事件过程:
Option Compare DatabasePrivate Sub Command2_Click()
Me!Students.Requery '执行查询
End Sub
Private Sub Command1_Click()
Text1 = Null '清空条件框
Text2 = Null
End Sub
运行效果
原因很清楚在一个单独的存储查询中,不能使用窗体中控件的值 ,原因为这个查询是可以单独打开的,当单独打开时将不可能取得其中引用窗体控件的值。
事实上,即使把此存储查询作为窗体的数据来源,ACCESS打开这个查询也是单独打开的,也获取不到窗体控件的值。
解决方法,直接把这个查询的SQL语句(引用了控件值的),做为窗体的数据源。
然后在所引用的控件值发生变化时,在合适的控件中用窗体的重新查询和刷新方法刷新窗体就行了。
还有一个解决方法就是,把你修改查询定义语句中的SQL,在合适的事件中
直接赋值给窗体的数据源属性就行了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)