如何在VBA中定义Recordset.GetRows参数?
How to define Recordset.GetRows parameters in VBA?
我正在尝试编写一个宏,我想在其中用 SQL 查询的结果填充用户窗体上的组合框。
查询 returns 两列:设备 ID(整数)列表和名为描述的列中的设备名称。
我有几个问题:
- 我有一个包含连接数据库代码的模块,它是
工作了一段时间。我正在尝试使用
VBA 调试部分的“Step Into”工具。以前当我的
宏到达
Application.Run ...
行,它跳到
window 模块没有问题。现在它给了我各种各样的
运行时间错误(最近的错误是'-2147352571 (80020005)':
类型不匹配)。如果我在
Application.Run ...
它可以毫无问题地执行连接。
如果我在连接模块的代码中使用 step into,也是一样。
- 我在 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
我正在尝试编写一个宏,我想在其中用 SQL 查询的结果填充用户窗体上的组合框。 查询 returns 两列:设备 ID(整数)列表和名为描述的列中的设备名称。 我有几个问题:
- 我有一个包含连接数据库代码的模块,它是
工作了一段时间。我正在尝试使用
VBA 调试部分的“Step Into”工具。以前当我的
宏到达
Application.Run ...
行,它跳到 window 模块没有问题。现在它给了我各种各样的 运行时间错误(最近的错误是'-2147352571 (80020005)': 类型不匹配)。如果我在Application.Run ...
它可以毫无问题地执行连接。 如果我在连接模块的代码中使用 step into,也是一样。 - 我在 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