2013-10-11 108 views
1

我有一個MS Access數據庫,並且我已經創建了一個窗體,可以在列表框中選擇多個項目。我用管道保存到數據庫中分隔符。我遇到的問題是當有人需要修改表單時,我需要用它的正常值填充列表框,然後基於數據庫中的拉動選擇項目。從數據庫填充選定的項目到MultiSelect列表框

目前,我有,我分裂從數據庫中拉出的記錄的開始,但在那之後我很失落:

temps = Split(records("Pillar"), "|") 

我知道我需要做一個對於每個說法,但我失去了。我曾嘗試過...

For Each varItem In temps 
    Pillar.ItemData(0) = varItem 
Next 

但這並不奏效。就我所知,我可以使用的唯一其他正確值是Pillar.ItemsSelected,但是當我這樣做時,我收到只讀錯誤。

+0

不完全。該列表框已根據訪問屬性字段中的值列表填充。現在我需要做什麼,如果一旦列表框被填充,突出顯示數據庫中的項目。 示例:項目是1,2,3,並且在數據庫中,所選值爲1,因此當顯示列表框時,它將顯示1,2,3,但是1將突出顯示。 我希望我有道理。 – res74

+0

我已經嘗試做一個'對於臨時工Pillar.ItemData(0)= varItem下一個'每個varItem' 但這並不奏效。就我所知,我可以使用的唯一其他正確值是'Pillar.ItemsSelected',但是當我這樣做時,我收到一個_read only_錯誤。 – res74

回答

0

您檢索records("Pillar")這是一個字符串|-分隔的數字。然後將Split()這個字符串轉換成數組。重點是選擇每個列表框行的值匹配其中一個數組成員。我不認爲你真的需要一個數組。將|添加到該字符串的開始和結尾應該更容易,然後使用InStr()檢查修訂後的字符串中是否存在以|字符包圍的列表框值。

該描述可能很難遵循。看看來自立即的這個例子是否澄清它。

cstrPillar = "1|2|3" 
? "|" & cstrPillar & "|" 
|1|2|3| 
strListBoxValue = "3" 
? "|" & strListBoxValue & "|" 
|3| 
? InStr(1, "|" & cstrPillar & "|", "|" & strListBoxValue & "|") 
5 

如果有道理,這裏是我如何在我的命令按鈕的點擊事件中應用它。注意我使用字符串常量cstrPillar作爲您使用records("Pillar")動態檢索的字符串的代理。我將我的多選列表框命名爲lstPillar

Private Sub cmdSelectRows_Click() 
    Const cstrPillar As String = "1|2|3" 
    Dim i As Long 
    For i = 0 To (Me.lstPillar.ListCount - 1) 
     Me.lstPillar.Selected(i) = (_ 
      InStr(1, _ 
       "|" & cstrPillar & "|", _ 
       "|" & Me.lstPillar.ItemData(i) & "|") > 0) 
    Next 
End Sub 

該點擊事件的影響是選擇匹配1,2或3的列表框行並取消選擇所有其他行。

我意識到Me.lstPillar.Selected(i)聲明可能具有挑戰性。我可以建議的最好的方法是參考立即窗口示例,並希望能夠清楚地說明。

+0

謝謝!你真的是一個拯救生命的人:)(我不是說糖果) – res74