列表框或comboboxADODB导入列表中不可见的十进制项目

我已经多次遇到这个问题,并且一直能够解决这个问题。 而且全能的search引擎并没有帮助我。

问题是,当我从ADODBlogging集填充了一个列表框或combobox时,所有的十进制数据元素都不可见,例如下面的代码(conn是一个ADODB连接):

Private Sub GetFilteredRecords() Dim strSQL As String Dim arr As Variant 'create the SQL strSQL = "SELECT * FROM vwStandard_Fee2" 'execute the SQL and fill the rs ( rsFiltered ) Set rsFiltered = conn.Execute(strSQL) 'Apply recordset to the listbox on the form If Not (rsFiltered.EOF = True And rsFiltered.BOF = True) Then arr = rsFiltered.GetRows() With lbDeeper .ColumnCount = rsFiltered.Fields.Count .List = TransposeArray(arr) End With With cbDeeper .ColumnCount = rsFiltered.Fields.Count .List = TransposeArray(arr) End With End If End Sub 

上面包含6列ID(全部显示Type = Variant / Decimal),其中包含的值由于某种奇怪的原因而没有“显示”。 只有string和date列正常显示,小数点在那里,但是空的!

这里有一些片段:

arr的总体布局

字符串显示,十进制不显示

看到欧元显示,并且旁边的小数点不是!

现在在combobox的情况下,我可以得到一个列的值显示,如果他们的列的BoundColumn当我select那个listitem,但只有在combobox的值(所以仍然不在列表中)。

我最初的解决方法是在添加到列表框/combobox之前将它们转换为string值,但是在这种情况下,我想直接将查询结果链接到Box.List而不查看细节。 因此,我正在寻找一个解决scheme,而不是一个工作。

简而言之:由于一些奇怪的原因,我的数值字段项目是不可见的。 解决方法是使项目的string值。 我现在正在寻找这个错误/问题的解决scheme:

  1. 这是什么原因造成的?
  2. 如何解决?

那么所有的string数据都出现了? 而且,只有数字不显示?

然后你可能想要将你的数字转换为string,并将它传递给你的列表,combobox。 你已经做了我注意到。

现在由于任何原因,如果你的最大行数和arrays/logging器行数不匹配,也可能会导致一个问题。 但是,它似乎使用logging集行计数设置组合行的行。 而不是使用数组可以尝试迭代logging集来填充combobox? 是的,这不是性能友好,购买猜测我们需要它在没有错误工作之前优化。 😉

你把你的combobox绑定到logging集上了吗? 你能否确认你的数组是否是单维的,并且有数据要馈入盒子?

如果问题仍然存在,您可以尝试使用DB中保存的查询填充列表框。 但是,基于SQL语句的列表框和combobox比基于保存的查询的列表框和combobox慢。

那么你可以尝试以下设置rowsource属性? 确保在数字和testing列上进行testing。 以及在旧的combobox和新的一个。

 Rowsource->build query-> sqlview copy to rowsource property box-> delete or don't save that above built query since you already have SQL statement. 

只是想让你试试缩小这个问题的可能性。


更新最可能的问题和解决scheme

根据我的意见,他们主要是假设你有问题填充列表框/combobox

我忘了问一个非常重要的东西,你有没有声明Option Base 1,以确保避免丢失数组的列值之一,如果你正在倾倒二维数组… …? 因为你没有任何明确的声明你正在使用的数组转储数据到列表框………. 🙂

确保您的列表框已启用,以显示多列数据。

* 所以你有三个select,*

  • select基地1

  • ReDim你的数组,并做循环填充它并将其转储到.list。

  • 由于ReDim数组需要你循环,所以你可以使用recorset自己添加数据。

你似乎有一个维数问题的数组,这是没有声明,但转置从logging集,然后到列表框/combobox。 所以你的未声明的数组没有正确地填充多列。 这可能是它的原因,当你声明数组proeprly …….

事实上在你的评论中你已经这么说了,

当我在我的代码中创build一个数组并将其填充到我的代码(按条目input)时,它将显示没有任何问题 – K_B 14分钟前

经过各种可能的原因后,好像是这样的情况:

VBA没有自己的十进制variablestypes。 VBA可以在variables声明为Variant的variables中处理Decimal(因此变成Variant / Decimal)这通常不会停止你的程序的工作,但是在Listbox和Combobox这样的控件中Type Variant / Decimal是不可解释的,具体条目。

例如填充名为lbHigher的列表框:

 Private Sub ListBoxProblem() Dim tempArray(2, 2) As Variant tempArray(0, 0) = "A" tempArray(0, 1) = 1 tempArray(0, 2) = 1.1 tempArray(1, 0) = "B" tempArray(1, 1) = CStr(CDec(5.2)) tempArray(1, 2) = 2.3 tempArray(2, 0) = "C" tempArray(2, 1) = DateSerial(2012, 12, 13) tempArray(2, 2) = 100 tempArray(3, 0) = "D" tempArray(3, 1) = -1 tempArray(3, 2) = CDec(5.2) lbHigher.ColumnCount = 3 lbHigher.List = tempArray End Sub 

除了CDec(5.2)之外,一切正常。 CStr(CDec(5.2))工作正常,VBA将在Listbox获取它之前首先将Decimal转换为String。

所以要么:不要让SQL生成任何十进制输出或将任何十进制输出转换为单/双/string/整数/长在VBA之前交给列表框。