2016-09-30 42 views
1

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

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

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

+0

通常的做法是直接将生成的SELECT sql字符串作为子表单的记录源(而不是查询)。 – Andre

回答

1

如果没有任何where条件,我会将“myQuery”保存为基本查询。然后,你可以一起去:

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

这摒弃了需要遍历输入字符串的话和修改RecordSource为子窗体,而不是试图修改查询该RecordSourceAndre's suggestion回升指向。