更新子窗体中的查询

时间:2016-09-30 20:51:22

标签: vba ms-access access-vba

我有一个表单,其中有一个字符串输入,它是查询(在此处插入sql injection joke)中的参数的输入,以及一个显示查询结果的子表单。

目前该参数基本上是someVar Like "*" & forms!myForm!input & "*",但由于用户可以输入多个字符串(即句子),我真正想要的是someVar Like "*firstWord*" or someVar Like "*secondWord*"... etc

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

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

但是,当我更新查询时,即使我告诉它重新查询,显示其数据的子窗体也不会更新。如果我离开表单并重新输入,则表明数据正确无误。我的做法似乎是错误的。什么是更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会" myQuery"保存为基本查询,没有任何where条件。然后你可以选择:

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

这消除了需要循环输入字符串中的单词并选择Andre's suggestion修改子表单的RecordSource而不是尝试修改RecordSource的查询指向。