如何在VBA中定义Recordset.GetRows参数?

How to define Recordset.GetRows parameters in VBA?

我正在尝试编写一个宏,我想在其中用 SQL 查询的结果填充用户窗体上的组合框。 查询 returns 两列:设备 ID(整数)列表和名为描述的列中的设备名称。 我有几个问题:

  1. 我有一个包含连接数据库代码的模块,它是 工作了一段时间。我正在尝试使用 VBA 调试部分的“Step Into”工具。以前当我的 宏到达 Application.Run ... 行,它跳到 window 模块没有问题。现在它给了我各种各样的 运行时间错误(最近的错误是'-2147352571 (80020005)': 类型不匹配)。如果我在 Application.Run ... 它可以毫无问题地执行连接。 如果我在连接模块的代码中使用 step into,也是一样。
  2. 我在 Watches 中放了一些表达式 window 试图弄清楚如何调整我的代码。我正在尝试用 for 循环填充组合框。 rst.Getrows returns 一个下拉表达式,展开时显示 GetRows(0) 和 GetRows(1)。每个都分别填充了设备 ID 号和描述,每个元素都有一个附加参数,例如。获取行(0,2)。 有时 GetRows 表达式 returns 值中的错误:,并且它的每个额外的指定版本都会得到一个 Obejct required 或 Operation is not allowed in this context 错误。当我 运行 代码中有一个中断(最初显示具有正确值的表达式),并在 watches window 中拖动一个新表达式而不对代码本身进行任何操作时,就会发生这种情况。

第一个问题主要是使我的故障排除变得复杂。当 step into 方法仍然有效时,我可以看到 GetRows 表达式在 rst.Open strMysql, conn 行之后填充了正确的值,然后在代码继续进入 For 循环后更改为 BOF/EOF 错误行,即使我对打开的记录集没有进一步的操作。

即使在正确显示表达式的状态下,我也无法弄清楚如何制定参数来检索一个描述值。我一直在尝试使用 rst.Getrows(1,i,1).Value,目的是在第二个字段的第 i 行返回 1 个结果。 我的目标是在 Me.combobox.Additem 命令之后的 for 循环中使用它。

任何人都可以帮助解决奇怪的代码中断问题,或者填写组合框的代码公式吗?

这里是如何从 RecordSet 填充 ComboBox 的模板:

Private Sub Test()
   Set Results = "some SQL query"
   Combo.Clear
   
   Do While Not (Results.BOF Or Results.EOF)
      Combo.AddItem Results.Fields(1).Value
      Results.MoveNext
   Loop
   
   Combo.ListIndex = 0
End Sub