2013-11-26 106 views
0

可以有人親切地幫助我與MS Access?我的問題是一個類似於下面的鏈接:MS Access多字段搜索,空字段或列表框中的多個選項

MS Access multi field search with empty fields

但對我來說,每一個搜索字段是一個列表框,從中我們可以選擇多個事情。

在我的情況下,數據庫應用程序的用戶將輸入開始日期和結束日期(文本框)將從單個數據庫表填充列表框(成本中心,項目編號,員工ID)匹配行時,生效日期從開始日期到結束日期之間。填充列表框後,用戶可選擇選擇多個成本中心或將搜索字段留空,多個項目編號或空白,多個員工編號或空白。選擇後,如果按下命令按鈕顯示結果,我們應該能夠得到滿足所有這些搜索條件的結果。例如,如果我選擇成本中心1301,1302和員工編號492128,492690,492959,並將項目編號搜索字段留空,則在數據表中,匹配這些成本中心和員工編號的所有條目所有搜索字段都是單獨的列)應顯示在開始日期和結束日期之間。

我無法獲得VB中的邏輯。請引導我。

回答

0

您需要在vba中建立一個sql語句,然後使用記錄集運行它,以獲得結果。

顯然,我不知道你需要得到的數據是,或者從表中你;會得到它,但是在where子句需要如下就可以了:

dim wc as string 
wc = wc & iif(lst_costcenter.ItemsSelected.Count = 0, "", " AND " & InClause(lst_costcenter, "tablename.columnname", false)) 
wc = wc & iif(lst_itemnumber.ItemsSelected.Count = 0, "", " AND " & InClause(... 

最後,當構建SQL語句,你需要砍第一「和」 WC &與「WHERE」

wc = iif(wc <> "", " WHERE " & mid(trim(wc), 5), "") 

InClause是,你需要一個模塊中添加,或在查詢的功能取代它的表格本身: 它使用3個參數: 1.用於爲 構建in子句的列表框控件2.包含tablename-dot-columnname的字符串,該字符串是要針對在列表框中選擇的值進行過濾的表/列,& 3.根據是否爲True/False列的數據類型爲字符串(真)或數字(假)

Public Function InClause(lst as ListBox, tblcol as string, isAlpha as boolean) 
    Dim si As String 
    Dim vv As Variant 

    For Each vv In lstBox.ItemsSelected 
     If isAlpha Then 
      si = si & "," & Chr(34) & lstBox.Column(0, vv) & Chr(34) 
     Else 
      si = si & "," & lstBox.Column(0, vv) 
     End If 
    Next vv 

    If si <> "" Then 
     si = "(" & tblcol & " IN (" & mid(si, 2) & "))" 
    End If 
    InClause = si 
End Function 

希望這有助於