在一个连续表单中,我可以让一个组合框根据自己记录中的字段或文本框值使用不同的查询吗?

问题描述 投票:3回答:2

编辑:对于那些想知道的人来说,在一个连续表单中,显然不可能让两个不同记录的同一个组合框引用两个不同的查询来填充它的列表。

我有一个连续表单,大概有5条记录。有一个组合框,Laborer1,想让每个表单的下拉框都不同,这取决于一些其他因素。我设法把我想要的精确查询放在每个记录的组合框中,作为该记录中的一个文本字段。下一步是什么?在这一点上,我所能做的就是将一条记录的查询应用到所有的组合框中,但我希望每个组合框都使用它自己的查询。

谢谢!

sql vba ms-access combobox access-vba
2个回答
3
投票

是的,你可以这样做,但有一个折衷:非活动记录的值可能不适合组合框的当前行源。当这种情况发生时,你会得到一个空白的组合框,而不是让它显示当前值。如果你激活记录,该值会再次出现,但这不是一个奇妙的用户体验。

也就是说,有一个选择是在组合框中处理它。Form_Current 事件。由于你已经在数据库字段中存储了行源,所以这个代码真的很短。

Private Sub Form_Current
  Laborer1.RowSource = ReferenceField.Value
  Laborer1.Requery 'I don't believe you need this, but you might.
End Sub

0
投票

我想我有了一个关于连续表格的答案。当你点击combobox时,其他组合变成了空白,但当你选择时,一切看起来都很正常。

我的工作与我的表,所以对不起一个不同的例子。无论如何,我认为这是一个答案。

我有2个组合框,当你选择国家时,城市组合只显示所选国家的城市。

这个代码是为国家组合

Private Sub Country_Change()
Dim dbs As DAO.Database
Dim rsTable As DAO.Recordset
Dim rsQuery As DAO.Recordset


Set dbs = CurrentDb

'Open a table-type Recordset
Set rsTable = dbs.OpenRecordset("Cities", dbOpenTable)

'Open a dynaset-type Recordset using a saved query
Set rsQuery = dbs.OpenRecordset("Select * FROM Cities WHERE Country='" + Country + "'", dbOpenDynaset)
'We created a recordset filtered and set it to city.recordset
Set city.Recordset = rsQuery
city.Requery
End Sub

而这2个子是城市组合的。

Private Sub City_Change()
Dim dbs As DAO.Database
Dim rsTable As DAO.Recordset
Dim rsQuery As DAO.Recordset

Set dbs = CurrentDb

'Open a table-type Recordset
Set rsTable = dbs.OpenRecordset("Cities", dbOpenTable)

'Open a dynaset-type Recordset using a saved query
Set rsQuery = dbs.OpenRecordset("Select * FROM Cities", dbOpenDynaset)

Set city.Recordset = rsQuery
'We created a recordset NOT filtered and set it to city.recordset and after that we focus on a different control to be sure that our city combobox work correctly
city.Requery
Kimlik.SetFocus
End Sub

Private Sub City_Click()

Dim dbs As DAO.Database
Dim rsTable As DAO.Recordset
Dim rsQuery As DAO.Recordset


Set dbs = CurrentDb

'Open a table-type Recordset
Set rsTable = dbs.OpenRecordset("Cities", dbOpenTable)

'Open a dynaset-type Recordset using a saved query
Set rsQuery = dbs.OpenRecordset("Select * FROM Cities WHERE Country='" + Country + "'", dbOpenDynaset)
'We created a recordset filtered and set it to city.recordset
Set city.Recordset = rsQuery
city.Requery
End Sub

而这里是... 我的Access文件

© www.soinside.com 2019 - 2024. All rights reserved.