用ADODB记录集填充组合框

我想从Excel Vba(使用ADODB)查询数据库,并用检索到的值列表填充组合框。不幸的是,下拉列表字段中仅显示返回列表的最后一个值。我假设记录集是所有返回的行的完整字符串,因此只有最后一个可见。

我搜索了该主题,但只能找到有关access的信息,这似乎无济于事。

这应该是代码的重要部分,如果需要,我可以提供更多信息:

'-- Create database query
SQLStatement = "SELECT Project_Name FROM ressourceplanning.projects"

'-- Execute query
Recordset.Open SQLStatement,Connection

'-- Write report into combobox (dropdown)
Recordsetarray = Recordset.GetRows
UF_Delete_Project.Cb_DeleteProject.List = Recordsetarray
'UF_Delete_Project.Cb_DeleteProject.RowSourceType = Recordsetarray

使用时,最后一行会导致umatching类型(错误13)。但是到目前为止,我发现的最好的答案是使用“ RowSourceType”。

Recordset包含正确的值,因此DB Connection和查询本身就可以正常工作,它仅与记录集的填充有关。

下面的代码对我有用:

Recordsetarray = Recordset.GetRows

For i = LBound(Recordsetarray,2) To UBound(Recordsetarray,2)
    UF_Delete_Project.Cb_DeleteProject.AddItem Recordsetarray(0,i)
Next i

感谢@braX和@FunThomas

sushe302 回答:用ADODB记录集填充组合框

命令Recordset.GetRows以二维数组的形式返回数据,但是,它以维度的“错误顺序”返回它们:第一维是 FieldIndex ,第二个是 RowIndex

RecordsetArray(0,0)为您提供第一行的第一字段,RecordsetArray(1,0)为您提供第一行的第二字段,而RecordsetArray(0,1)为您提供第二行的第一字段。

comboBox的List属性期望数据为二维数组,但是将行作为第一个索引,将字段作为第二个索引(您可以在comboBox中显示多个列)。因此,您要做的是Transpose您的数组:

UF_Delete_Project.Cb_DeleteProject.List = Application.WorksheetFunction.Transpose(pRecordsetArray)

但是,Transpose方法有一些限制(字段数,字符串的最大长度,不能处理Null值),因此,如果遇到运行时错误13(类型不匹配) ),按照braX在他的评论中建议的那样,遍历记录集或数组可能更容易。

本文链接:https://www.f2er.com/3104629.html

大家都在问