我正在尝试编写一个宏,希望在其中用SQL查询的结果填充Userform上的组合框。查询返回两列:设备ID(整数(列表和名为description的列中的设备名称。我有几个问题:
- 我有一个模块,其中包含连接到数据库的代码工作了一段时间。我正在尝试使用"Step Into";VBA调试部分的工具。以前当我宏到达
Application.Run ...
行,它跳到窗口,没有问题。现在它给了我各种运行时错误(最近的错误是"-2147352571(80020005(":类型不匹配(。如果我在Application.Run ...
,它执行连接时没有问题。如果我在连接模块的代码上使用步骤,也是如此 - 我在"手表"窗口中放了一些表达式,试图找出如何调整代码。我正在尝试用for循环填充组合框。
rst.Getrows
返回一个下拉表达式,展开后会显示GetRows(0(和GetRow(1(。每个元素分别填充有设备ID号和描述,每个元素都有一个附加参数,例如GetRows(0,2(。有时GetRows表达式会返回值中的错误:<BOF或EOF为true,或者当前记录已被删除。请求的操作需要当前记录>,并且它的每个附加指定版本都会得到一个Obejct必需的或在该上下文错误中也不允许操作。当我运行带有中断的代码(最初显示具有正确值的表达式(,并在监视窗口中拖动新表达式而不对代码本身执行任何操作时,就会发生这种情况
第一个问题主要使我的故障排除复杂化。当step-into方法仍在工作时,我可以看到GetRows表达式在rst.Open strMysql, conn
行之后填充了正确的值,然后在代码继续进入For循环后更改为BOF/EOF错误行,尽管我对打开的记录集没有进一步的操作。
即使在表达式正确显示的状态下,我也无法弄清楚如何公式化参数以检索一个描述值。我一直在尝试rst.Getrows(1,i,1).Value
,目的是在第二个字段的第I行返回1个结果。我的目标是在Me.combobox.Additem
命令之后的for循环中使用它。
有人能帮助解决奇怪的代码中断问题,或者制定代码来填充组合框吗?
以下是如何从RecordSet中填充组合框的模板:
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