同步记录导航控件和记录选择组合框
Synchronizing record navigation control and record selection combo box
我有一个绑定到查询的表单,控件绑定到查询的字段。
我还有一个未绑定的组合框,其 Row Source
是相同的查询,用于通过其 After Update
事件处理程序 select 当前表单记录:
Private Sub Loc_cbo_AfterUpdate()
DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0))
End Sub
组合框有三列:
Bound Column
,一个不可见的ID,
- 一个位置代码,
- 地点名称。
组合的 Row Source
是 SELECT * FROM Sites ORDER BY Loc DESC
。 (最初,它只是 Sites
,但由于我将表单的 Order By
作为 Site.Loc DESC
,我希望顺序匹配。)
它工作正常。
当然,我可以 也 通过其导航控件(First、Previous、Next、Last)浏览表单的记录。
这也行得通。
但是,我希望组合框在通过导航控件更改时与当前记录同步。
我尝试通过表单的 Current
事件处理程序来完成,三种不同的方式。
首先,将组合框的文本值设置为与相应文本框控件的文本值相匹配
Private Sub Form_Current()
Loc_cbo.SetFocus
Loc_cbo.Text = Loc_txt ‘ ERROR
End Sub
但我明白了
Run-time error ‘2101’: The setting you entered isn’t valid for this
property.
其次,设置组合框的 ListIndex 值相对于当前记录
Private Sub Form_Current()
Loc_cbo.SetFocus
Loc_cbo.ListIndex = CurrentRecord - 1 ‘ ERROR
End Sub
但我得到相同的 运行 时间错误“2101”或
Run-time error ‘7777’: You’ve used the ListIndex property incorrectly.
在同一个地方。
第三,(感谢HansUp的早期回答)设置组合框的值属性:
Private Sub Form_Current()
Loc_cbo.Value = Loc_txt.Value
End Sub
这个 "works" 在没有错误消息的情况下,根据 debug.prints,Loc_cbo
的值确实会更改以匹配 Loc_txt
的值。但是,组合框的可见文本框部分现在似乎总是 empty/blank (其中什么都没有)。
如何让记录 select 或组合框在通过记录导航器更改后与当前记录一致?
我不敢相信用户会因为两者不同步而感到高兴。
我也无法相信我在其他任何地方都没有发现这个问题!
分配给组合的 .Value
属性 以更改其选择。对于 .Value
,您不需要 SetFocus
。
Private Sub Form_Current()
Me.Loc_cbo.Value = Me.Loc_txt.Value
End Sub
请注意,此建议假定组合的 .Value
是您要与文本框值匹配的内容。检查以确认您希望组合和文本框之间的匹配基于组合的 .Value
而不是组合的另一个列。
Post 死亡:
文本框的内容旨在匹配组合的其中一列。然而,由于组合的 Bound Column 包含与其他列关联的数字,Martin 使用 DLookup
表达式来获取与文本框内容对应的数字并将该数字分配给组合的 .Value
属性:
Me.Loc_cbo.Value = DLookup("ID", "Sites", "Loc= '" & Me.Loc_txt.Value & "'")
请注意,组合的 .Value
是其所选行的 绑定列 中的值。
我有一个绑定到查询的表单,控件绑定到查询的字段。
我还有一个未绑定的组合框,其 Row Source
是相同的查询,用于通过其 After Update
事件处理程序 select 当前表单记录:
Private Sub Loc_cbo_AfterUpdate()
DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0))
End Sub
组合框有三列:
Bound Column
,一个不可见的ID,- 一个位置代码,
- 地点名称。
组合的 Row Source
是 SELECT * FROM Sites ORDER BY Loc DESC
。 (最初,它只是 Sites
,但由于我将表单的 Order By
作为 Site.Loc DESC
,我希望顺序匹配。)
它工作正常。 当然,我可以 也 通过其导航控件(First、Previous、Next、Last)浏览表单的记录。 这也行得通。 但是,我希望组合框在通过导航控件更改时与当前记录同步。
我尝试通过表单的 Current
事件处理程序来完成,三种不同的方式。
首先,将组合框的文本值设置为与相应文本框控件的文本值相匹配
Private Sub Form_Current()
Loc_cbo.SetFocus
Loc_cbo.Text = Loc_txt ‘ ERROR
End Sub
但我明白了
Run-time error ‘2101’: The setting you entered isn’t valid for this property.
其次,设置组合框的 ListIndex 值相对于当前记录
Private Sub Form_Current()
Loc_cbo.SetFocus
Loc_cbo.ListIndex = CurrentRecord - 1 ‘ ERROR
End Sub
但我得到相同的 运行 时间错误“2101”或
Run-time error ‘7777’: You’ve used the ListIndex property incorrectly.
在同一个地方。
第三,(感谢HansUp的早期回答)设置组合框的值属性:
Private Sub Form_Current()
Loc_cbo.Value = Loc_txt.Value
End Sub
这个 "works" 在没有错误消息的情况下,根据 debug.prints,Loc_cbo
的值确实会更改以匹配 Loc_txt
的值。但是,组合框的可见文本框部分现在似乎总是 empty/blank (其中什么都没有)。
如何让记录 select 或组合框在通过记录导航器更改后与当前记录一致? 我不敢相信用户会因为两者不同步而感到高兴。 我也无法相信我在其他任何地方都没有发现这个问题!
分配给组合的 .Value
属性 以更改其选择。对于 .Value
,您不需要 SetFocus
。
Private Sub Form_Current()
Me.Loc_cbo.Value = Me.Loc_txt.Value
End Sub
请注意,此建议假定组合的 .Value
是您要与文本框值匹配的内容。检查以确认您希望组合和文本框之间的匹配基于组合的 .Value
而不是组合的另一个列。
Post 死亡:
文本框的内容旨在匹配组合的其中一列。然而,由于组合的 Bound Column 包含与其他列关联的数字,Martin 使用 DLookup
表达式来获取与文本框内容对应的数字并将该数字分配给组合的 .Value
属性:
Me.Loc_cbo.Value = DLookup("ID", "Sites", "Loc= '" & Me.Loc_txt.Value & "'")
请注意,组合的 .Value
是其所选行的 绑定列 中的值。