2013-10-11 110 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