如何从数据库查询中填充组合框?

时间:2014-03-31 04:56:17

标签: access-vba

我想用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         限制列表=是         允许值列表编辑=是         继承值列表=是         仅显示行来源=否

查询只有一个名为“序列号”的可见列

提前致谢

3 个答案:

答案 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:)