【发布时间】:2018-02-10 20:19:56
【问题描述】:
我有一个在 MS Access 2010 中开发的简单数据库,其中我有一个带有“查看特定”命令按钮和“查看全部”命令按钮的表单。两个按钮都将运行查询:特定的按钮应将条件应用于其中一个字段,而所有按钮应在没有条件的情况下运行查询,或者在该字段中使用 * 条件。还有另一个字段需要两个查询的条件,因此基本上特定按钮应该运行具有两个条件的查询,而所有按钮应该运行一个具有一个条件(或一个和一个 * 条件)的查询。该查询是我通过设计视图创建的存储查询。 “all”SQL 语句的作用是:
SELECT tableA.field1, tableA.field2, tableB.field1, tableB.field2
FROM tableA INNER JOIN tableB ON tableA.field3=tableB.field2
WHERE tableB.field1=True;
我希望根据表单组合框中选择的选项运行特定查询,因此它的 SQL 语句应该看起来相同,除了 WHERE 子句将更改为:
WHERE tableB.field1=True AND tableB.field2=Forms!ViewQryResults!comboSelectSpecific;
问题
我的问题是,我将其称为 Query2 的特定查询按预期工作,但所有查询 Query1 不会改变查看的结果在表格上。两个查询都没有抛出错误消息,并且似乎查询正在再次运行,因为屏幕底部的记录总数消失了,然后在查询完成后返回并再次获取记录总数。
尝试的解决方案
我已经尝试了多种不同的解决方案来尝试让它工作,但都没有。
我首先尝试建立一个参数,但是 Access 一打开表单就提示用户输入参数值,这是我不想要的。如果我只是在查询的设计视图中使用功能区中的参数按钮声明参数,但不将其分配给作为设计网格中的标准的字段,Access 不再提示我输入参数值,我可以分配它的值通过 VBA,但是我不知道如何使用 VBA 将参数分配给字段条件。我的尝试引发错误,提示 Access 无法识别我的参数名称。
-
然后我尝试更改查询的 SQL 字符串,然后重新查询。我使用文本操作函数来查找 WHERE 子句,并将其替换为具有两个条件的 WHERE 子句,然后重新查询。为了确定 SQL 字符串的正确上下文,我在设计视图中更改了查询以执行我想要的操作,然后切换到 SQL 视图并复制 Access 创建的用于表示查询的 SQL 字符串。
然后我插入了
Debug.Print行以在每一步打印 SQL 字符串,并逐个字符地比较它们并且它们完全匹配,这意味着文本操作正在做它应该做的事情并正确地创建 SQL 字符串,或者至少如果我根本不惹他们的话,Access 会这样。我从两个方向都尝试了这个,即我以一个按钮的方式进行存储的查询,然后使用代码为另一个按钮更改它,然后交换,但是两种方法都没有成功地让两个查询工作.我尝试操作 SQL 字符串的基本代码如下:Private Sub Query2_OnClick() Dim d As Database Dim q As Query Dim strSQL As String Dim strSQLSelectFrom As String Dim strSQLWhereNew As String Set d = CurrentDb Set q = d.QueryDefs("Query2") strSQL = q.SQL 'Saves original SQL statement 'Text Manipulations to create strSQLSelectFrom as just the SELECT and FROM portions strSQLWhereNew = "tableB.field1=True AND tableB.field2=Forms!ViewQryResults!comboSelectSpecific;" q.SQL = strSQLSelectFrom & strSQLWhereNew DoCmd.Requery Me.Refresh Debug.Print q.SQL 'Verify text manipulations created SQL String I expect q.SQL = strSQL 'Returns SQL to original statement Debug.Print q.SQL 'Verify SQL statement properly returned to original statement End Sub
这种安排可以让我根据我的组合框查询细节。当我单击另一个按钮时,其代码只是重新查询,因为第一个按钮应将 SQL 重置为原来的方式,结果不会改变。查询似乎按照总记录计数器的消失和返回指示运行,但它从不更改结果。如果我返回并从我的组合框中选择另一个选项并查询特定,结果将更新为新的特定选择。
同样,如果我单击“所有查询”按钮,结果仍将基于组合框的选择。如果我更改组合框选择,然后单击所有查询(它根本不关心组合框,因为它没有在该按钮的代码中的任何位置列出),结果将更改为新选择,就像两者一样按钮正在运行特定的查询。那部分是最令人费解的,我可以弄清楚它为什么会这样做。
我知道一个简单的解决方案是创建第二个查询并停止尝试来回更改一个,但我真的觉得我错过了一个我需要在某个时候理解的基本部分,所以我我真的在寻找能够完成这项工作的基础部分。
【问题讨论】: