我在查询中填充的表单上有一个列表框,其中的项目是根据匹配的分隔列表选择的。所以sSystemString
等于“A; B; C”
然后我从SQL Server DB加载记录A,B,C,D,E,F,并且只应选择A,B,C。
在MS Access(2010)中是否有以本机方式执行此操作。我在这种情况下使用ADP。
我是通过代码进行的,但我不能选择的属性不能反映我的更改,也不能反映表单。
这是我的代码:
Dim rs As New ADODB.Recordset
Dim sSystemString As String
If Not IsNull(Me.OpenArgs) Then sSystemString = Me.OpenArgs
' Load this list box with SRC Systems
Call rs.Open("SELECT DISTINCT System FROM dbo.System WHERE System IS NOT NULL", _
CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly)
Do Until rs.EOF
lstSrcSystems.AddItem (rs.Fields(0))
If InStr(sSystemString, rs.Fields(0)) > 0 Then
lstSrcSystems.Selected(lstSrcSystems.ListCount - 1) = True
End If
rs.MoveNext
Loop
我的代码肯定会点击lstSrcSystems.Selected(lstSrcSystems.ListCount - 1) = True
行。
运行此行后,检查即时窗口中的属性仍然返回0(它不会更改)。在表单上,该项目也未被选中。
更新:我刚刚检查了我的代码,现在它正在更新,但下一个AddItem
显然再次取消选择。
我怀疑我有一些奇怪的属性组合使这个只读,但我可以交互选择项目,实际上当我在代码中提取所选项目时,Selected属性按预期工作 - 即我选择一个项目在表格上,它反映在这个属性。
表单未绑定,并使用以下代码从另一个表单上的按钮调用:
DoCmd.OpenForm "fSiteList", acNormal, , , acFormEdit, acDialog, Me.SRCSystems
答案 0 :(得分:0)
问题实际上是lstSrcSystems.AddItem (rs.Fields(0))
正在重置Selected
状态。我找不到任何提及此行为或如何将其关闭。我改变了我的表格如下:
这具有填充列表但不将列表或表单绑定到任何内容的效果。 (我发现绑定它阻止了我交互式编辑数据)
表单背后的 Form_Load
代码已更改为选择已存在的项目:
Private Sub Form_Load()
Dim sSystemString As String
Dim iIndex As Integer
' List is bound to site list (from connections)
' Highlight those that are listed
If Not IsNull(Me.OpenArgs) Then sSystemString = Me.OpenArgs
iIndex = lstSrcSystems.ListCount
Do While iIndex > 0
If InStr(sSystemString, lstSrcSystems.ItemData(iIndex)) > 0 Then
lstSrcSystems.Selected(iIndex) = True
End If
iIndex = iIndex - 1
Loop
End Sub
我仍然很想知道是否有更“内置”的方法来实现这一点:编辑分隔的字符串字段。