如何从数据库查询中填充组合框?
Posted
技术标签:
【中文标题】如何从数据库查询中填充组合框?【英文标题】:How can I populate combo box from a database query? 【发布时间】:2014-03-31 04:56:16 【问题描述】:我想用 Access 中的查询结果填充组合框。我只是不知道该怎么做。据我了解,必须首先创建一个记录集,将查询结果读入记录集,然后将记录集写入组合框的行源属性。它是否正确?我可以在某个地方学习一个简单的例子吗?我还没有在任何其他线程中找到一个。
这是我目前的尝试:
Dim RS As Recordset
Dim myDB As Database
Set RS = myDB.OpenRecordset("SourcesNotDisposed", dbOpenDynaset)
Do While Not RS.EOF
With Me.cmbSN
RowSource.AddItem
End With
Loop
使用此代码,我在 RowSource 行收到“需要对象”错误。 cmbSN 具有数据属性: 行源类型 = 表/查询 绑定列 = 0 限制列表 = 是 允许值列表编辑 = 是 继承值列表 = 是 仅显示行源 = 否
查询只有一个名为“序列号”的可见列
提前致谢
【问题讨论】:
不错的教程fontstuff.com/vba/vbatut10.htm 【参考方案1】:感谢大家的所有建议。我已经解决了,并找到了一个非常简单的解决方案。将组合框的 Row Source Type 属性设置为 Table/Query,我需要做的就是将 Row Source 属性设置为有效的 SQL 字符串。例如:
strSQL = "SELECT Sources.[Serial Number] FROM Sources " & _
"WHERE (((Sources.Nuclide)='Cf-252') " & _
"AND ((Sources.[Location / Status])<>'Disposed')) " & _
"ORDER BY Sources.[Serial Number];"
Me.cmbItem.RowSource = strSQL
Me.cmbItem.Requery
【讨论】:
【参考方案2】:下面的代码将表格字段插入组合框中。在 combo
的 onEnter 事件下添加此代码 Private Sub CM_Enter()
'CM is combobox name
Dim strItem1 As String
Dim strItem2 As String
On Error Resume Next
Dim i As Integer 'Index for loop
With Me.CM
.RowSourceType = "Value List" 'Set rowsource type as Value list
.RowSource = "" 'Clean combo contents
End With
'Loop through field names of table and add them to your combo:
For i = 1 To CurrentDb.TableDefs("table1").Fields.Count - 1
Me.CM.AddItem (CurrentDb.TableDefs("table1").Fields(i - 1).Name)
Next i
'/***Delete unwanted items from the combo
strItem1 = "col1"
strItem2 = "col2"
'CM.RemoveItem strItem1
'CM.RemoveItem strItem2
End Sub
【讨论】:
【参考方案3】:我认为您可能需要在开始循环之前“先读取一条记录”。
尝试在 Do-While 循环之前使用RS.MoveFirst
?
我认为您可能还需要在循环中执行.MoveNext
,就在Loop
语句之前;自从我在 VBA 中做这样的事情已经有很长时间了,但在我看来,它只会一遍又一遍地添加相同的项目,直到内存不足?我不认为 AddItem 会自行将记录指针移动到下一条记录。
您可能还需要检查如果 MoveNext 离开记录集的末尾会发生什么...
HTH :)
【讨论】:
谢谢。我忽略了这些命令。它有点帮助,但我仍然在“.RowSource.AddItem”处收到“无效的限定符”错误。如果我删除“.RowSource”,我会在“.AddItem”中得到“Argument not optional”。我需要指定要添加的项目。以上是关于如何从数据库查询中填充组合框?的主要内容,如果未能解决你的问题,请参考以下文章