SQL MS Access查询从表单文本框中获取文本值

时间:2012-10-17 05:38:07

标签: ms-access-2007 access-vba

我有一个'非常'长的查询通过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代码本身中编写它,但是对于大量的换行符和chaning查询的性质,我不想手动在每行的末尾添加“&amp; _”。

非常感谢任何帮助。

此致 导航

3 个答案:

答案 0 :(得分:2)

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

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

所以它从表单中获取值。但是,如果我理解正确,那么形式不仅仅是条件,而是整个where子句,可能是',其中b = 1'但它也可能是' c = 4''其中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

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

答案 1 :(得分:1)

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

Select * 
from MyQuery
Where (a=1 and b=7) or (c=3 and d="StackOverflow")

答案 2 :(得分:0)

通过很少的功课,我找到了如何将文本文件的内容分配给变量。然后,我能够使用代码片段“Fthiella”更改变量。