2016-09-30 8 views
1

クエリ内のパラメータへの入力である文字列入力(ここにSQL注入ジョークを挿入)のフォームがあります。とそのクエリの結果を表示するサブフォームです。サブフォームでの更新クエリ

現在のパラメータは、本質的にsomeVar Like "*" & forms!myForm!input & "*"ですが、ユーザー以来、私が本当に欲しいものを、複数の文字列(すなわち文)を入力することができます私はプログラム的にクエリを生成するために必要なパラメータの数が変化するので、someVar Like "*firstWord*" or someVar Like "*secondWord*"... etc

です。入力中の単語をループして、動的にどこ文を生成する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を変更するのではなくRecordSourceがあるクエリを変更しようとしているのAndre's suggestionにピックアップを指しています。