Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 更新子窗体中的查询_Ms Access_Vba - Fatal编程技术网

Ms access 更新子窗体中的查询

Ms access 更新子窗体中的查询,ms-access,vba,Ms Access,Vba,我有一个表单,其中有字符串输入,它是查询中参数的输入(此处插入sql注入笑话),还有一个子表单,显示查询结果 目前该参数本质上是someVar,比如“*”&forms!我的表格!输入&“*”,但由于用户可以输入多个字符串(即一个句子),因此我真正想要的是类似“*firstWord*”的someVar或类似“*secondWord*”的someVar。。。etc 由于参数的数量不同,我需要通过编程生成查询。循环输入中的单词并动态生成where语句在VBA中并不太难: dim sc as varia

我有一个表单,其中有字符串输入,它是查询中参数的输入(此处插入sql注入笑话),还有一个子表单,显示查询结果

目前该参数本质上是
someVar,比如“*”&forms!我的表格!输入&“*”
,但由于用户可以输入多个字符串(即一个句子),因此我真正想要的是
类似“*firstWord*”的someVar或类似“*secondWord*”的someVar。。。etc

由于参数的数量不同,我需要通过编程生成查询。循环输入中的单词并动态生成where语句在VBA中并不太难:

dim sc as variant
sc=split(myInput)
dim where as string
where=""
for c=0 to UBound(sc)
where = where & "like '*" & sc(c) & "*' or "
next

where = left(where, len(where) - 3)

dim qd as querydef

set qd=currentDb.querydefs("myQuery")

qd.sql="select var where " & where

[my subform].requery
但是,当我更新查询时,显示其数据的子窗体不会更新,即使我告诉它重新查询。如果我离开表单并重新输入,它将具有正确的数据。我的方法似乎是错误的。有什么更好的方法来解决这个问题呢?

我会将“myQuery”保存为基本查询,而不使用任何
where
条件。然后你可以选择:

[my subform].RecordSource = "select * from myQuery where somevar like '*" & replace(myInput, " ", "*' or somevar like '*") & "*'"
[my subform].Requery

这样就不需要循环输入字符串中的单词,只需要修改子表单的
RecordSource
,而不是试图修改
RecordSource
所指向的查询。

通常的方法是直接将生成的SELECT sql字符串指定为子表单的RecordSource(而不是查询)。