2016-03-21 21 views
1

我想提示用戶輸入一個範圍並顯示子窗體中該範圍內的所有工具。VBA ACCESS比較字符串,因爲它們是整數

問題:上限和下限是文本字段(因爲某些範圍不能用整數表示)。如截圖所示,比較只比較字段的第一個字符。

用戶輸入:5 - 3 子窗體: 6 - 4 它比較5和3,而不是36

我知道VBA是做什麼它已被告知,但我怎麼能實現我想要的結果?

enter image description here

這裏是我的requering子窗體代碼:

Dim Up As Integer 
    Dim Low As Integer 

     If Me.Text_L = "" Or IsNull(Me.Text_L) Or Me.Text_U = "" Or IsNull(Me.Text_U) Then 
      MsgBox ("Please choose a valid range!") 
     Else 
      Up = Me.Text_U 
      Low = Me.Text_L 

      SQL = SQL_Origin & " WHERE [qry_View_Search].[Upper_Range] <= '" & Up & "' " _ 
      & "AND [qry_View_Search].[Lower_Range] >= '" & Low & "';" 


      subform_View_Search.Form.RecordSource = SQL 
      subform_View_Search.Form.Requery 
     End If 
+0

你正在比較它們作爲字符串,我認爲你需要說[上限] <=「&cint(up)&」AND [qry_view_search ... –

+1

如果你讓'Upper'和'Lower'字段爲浮點數據類型(例如Single或Double),而不是文本,它們可以存儲十進制值。然後你可以用實際的數字來代替文本進行數字比較。 – HansUp

+0

@Nathan_Sav它給了我相同的結果:( –

回答

0

我已經成功了這些情況下使用瓦爾只:

Value: Val([FieldName]) 

或:

Value: Val(Nz([FieldName])) 
2

所以我做了一個新的列在查詢 IIf(IsNumeric([Upper]), Val([Upper]), Null) 得到所有的數字結果。

然後在VBA中,我重新查詢子窗體如下

SQL = SQL_Origin & " WHERE [qry_View_Search].[Upper] <= cint(Forms![frm_View_Search]![Text_U]) " _ 
            & "AND [qry_View_Search].[Lower] >= cint(Forms![frm_View_Search]![Text_L]);" 

感謝@HansUp!