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

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”。我需要指定要添加的项目。

以上是关于如何从数据库查询中填充组合框?的主要内容,如果未能解决你的问题,请参考以下文章

从预先存储的参数化访问查询填充组合框

根据填充的表组合框创建查询

访问查询/组合框

EXTJS:如何在组合框上自动完成查询后从数据存储中清除“查询”参数

如何从由 SQL 查询填充的列表框中获取信息?

数据阅读器有行但没有填充组合框