2016-09-30 44 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回升指向。