我想用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 限制列表=是 允许值列表编辑=是 继承值列表=是 仅显示行来源=否
查询只有一个名为“序列号”的可见列
提前致谢
答案 0 :(得分:4)
感谢所有人的建议。我已经解决了这个问题并找到了一个非常简单的解决方案。将组合框的Row Source Type属性设置为Table / Query,我需要做的就是将Row Source属性设置为有效的SQL字符串。 e.g:
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
答案 1 :(得分:2)
下面的代码将表字段插入到组合框中。在组合 的 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
答案 2 :(得分:1)
我想你可能需要先做一个记录&#39;在开始循环之前。
尝试在Do-While循环之前使用RS.MoveFirst
吗?
我认为您可能还需要在.MoveNext
语句之前在循环中执行Loop
;自从我在VBA中做了这样的事以来已经有很长一段时间了,但在我看来它只是一遍又一遍地添加相同的项目,直到内存不足为止?我不认为AddItem会自动将记录指针移动到下一条记录。
如果MoveNext离开记录集的末尾,您可能还需要检查会发生什么......
HTH:)