ACCESS 主窗体非绑定文本输入查询条件后,查询得到正确结果,但主窗体下的子窗体(表格形式)结果错误

ACCESS 主窗体非绑定文本输入查询条件后,查询得到正确结果,但主窗体下的子窗体(表格形式)结果错误,第1张

可能是查询设计没做好,请参考如下查询方案:

窗体设计视图如下:

添加未绑定文本框"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 Database

Private Sub Command2_Click()

    Me!Students.Requery  '执行查询

End Sub

Private Sub Command1_Click()

    Text1 = Null  '清空条件框

    Text2 = Null

End Sub

运行效果

原因很清楚

在一个单独的存储查询中,不能使用窗体中控件的值 ,原因为这个查询是可以单独打开的,当单独打开时将不可能取得其中引用窗体控件的值。

事实上,即使把此存储查询作为窗体的数据来源,ACCESS打开这个查询也是单独打开的,也获取不到窗体控件的值。

解决方法,直接把这个查询的SQL语句(引用了控件值的),做为窗体的数据源。

然后在所引用的控件值发生变化时,在合适的控件中用窗体的重新查询和刷新方法刷新窗体就行了。

还有一个解决方法就是,把你修改查询定义语句中的SQL,在合适的事件中

直接赋值给窗体的数据源属性就行了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11933728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存