【问题标题】: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 限制列表 = 是 允许值列表编辑 = 是 继承值列表 = 是 仅显示行源 = 否

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

提前致谢

【问题讨论】:

标签: ms-access vba


【解决方案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”。我需要指定要添加的项目。
      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多