1

我通过 MS Access 编写了一个“非常”长的查询,其中包含很多联合(大约 30 个)和其他动态变量。

现在,我需要在所有这些联合中插入一个“Where”子句,并且 where 子句将是常量并通过表单生成(选择一些选项,我编写了一个 vb 代码来创建一个包含 where 子句的字符串。

有什么方法可以在 SQL 查询中使用一些变量,以便变量从表单操作的文本结果中获取 where 子句?

说明:我的查询

Select a,b,c,d from
   (select x as a,b,c,d from abc <where clause> union
    select y as a,b,c,d from abc <where clause> union
    select z as a,b,c,d from abc <where clause> union
    select p as a,b,c,d from abc <where clause>)
order by a

应该填充文本框结果,该结果类似于“where b=1”

我想在 VB 代码本身中编写它,但是由于查询的大量换行和变化性质,我不想在每行的末尾手动添加“ & _”。

任何帮助将不胜感激。

问候, 导航

4

3 回答 3

2

您可以像这样编写 WHERE 子句:

WHERE B=[Forms]![FormName]![FieldName]

所以它从表单中获取值。但是,如果我理解正确的话,表格中不仅有条件,还有整个 where 子句,可能是'where b=1'但也可能是'where c=4''where a=2和 b=6'

我认为对此没有完美的解决方案,您不能使用普通 Access,但必须编写一些 VBA 代码,并且可以使用以下内容生成查询字符串:

$src_query = "Select a,b,c from abc <where clause> union select ..."
$src_query = Replace($src_query,
                     "<where clause>",
                     [Forms]![FormName]![WhereClause])

那么您只需以编程方式修改查询:

CurrentDb.QueryDefs("QueryName").SQL = $src_query

现在您的查询已准备好执行。

于 2012-10-17T06:22:24.377 回答
1

您可以将Where子句放在单独的查询中,而不是更改原始

Select * 
from MyQuery
Where (a=1 and b=7) or (c=3 and d="StackOverflow")
于 2012-10-17T19:01:53.117 回答
0

通过很少的家庭作业,我发现了如何将文本文件的内容分配给一个变量。然后,我可以使用“Fthiella”给出的代码片段来更改变量。

于 2012-10-17T07:38:51.173 回答