2016-10-13 53 views
1

我有一個Access數據庫,其中有一個帶有文本框(名爲c1)和一個按鈕的窗體。當我點擊按鈕時,它會打開一個數據表格,其中包含由文本框值過濾的信息。訪問具有多個值的文本框以查詢

按鈕VBA看起來是這樣的:

c1.Value = Replace(c1.Value, ",", " Or ") 
DoCmd.OpenForm ("dsForm") 

數據表背後的查詢看起來在設計視圖是這樣的:

Field:  Name1 | Name2 
Criteria:   | Like [Forms]![Menu]![c1].[value] 

這讓我可以在以後出口的這個結果查詢到卓越。

所以我的問題是,我想輸入到文本框中的值,並用逗號分隔它們,這將後來turner成爲一個或vba。爲什麼我用1個文本框不是多個,這是因爲我可以有許多值,我想要搜索。

現在它可以工作,如果我輸入一個值到文本框中,但是當我輸入2個值時它不起作用。我很確定查詢是以整個語句作爲一個字符串,例如,如果我輸入110,220,它應該是「110」或「220」,但在查詢時它會是「110或220」。

我試過把字段設置爲字符串或數字。我如何操縱vba查詢的條件?

回答

0

其實我的第一種方法是可怕的,讀出的值到像這樣的數組:

Sub y() 
a = "a,b,c,d" 

'Split into 1d Array 
b = Split(a, ",", , vbTextCompare) 

For c = 0 To UBound(b) 
    Debug.Print b(c) 
Next c 

End Sub 

你可以通過數組循環作爲debug.print循環,並分別使用各自的價值。

1

我推薦使用IN語句而不是OR來編寫SQL字符串,並使用OpenArgs事件將數據從主窗體傳遞到數據表窗體。

主要形式按鈕代碼

Dim sql as String 

sql = "Select * From [table name] Where Name2 IN (" & c1 & ")" 
DoCmd.OpenForm "dsForm", acFormDS, , , , , sql 

數據表形式(DS甲酸)代碼 - 使用Form_Load事件。

Private Sub Form_Load() 
    Me.RecordSource = Me.OpenArgs 
End Sub 

IN語句允許您使用逗號。 OpenArgs事件允許您將值從一個窗體傳遞到另一個窗體。

+1

爲什麼不能在(「&c1&」)「',然後是'DoCmd.openform」dsform「,acformDS,sql」中使用'sql ='WHERE Name2並將SQL語句放在Where語句應該。那麼你不需要通過任何openargs或以其他形式使用recordource語句 – geeFlo

+0

@geeFlo你是對的,這更符合情況。雖然適當的措詞是在沒有「WHERE」保留字的情況下完成的。 'sql = Name2 in(「&c1&」)「' –