Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列表框或组合框ADODB导入的十进制项在列表中不可见_Sql_Vba_Excel_Combobox - Fatal编程技术网

Sql 列表框或组合框ADODB导入的十进制项在列表中不可见

Sql 列表框或组合框ADODB导入的十进制项在列表中不可见,sql,vba,excel,combobox,Sql,Vba,Excel,Combobox,我已经多次遇到这个问题,并且一直能够解决它。而且万能的搜索引擎也帮不了我 问题是,当我从ADODB记录集中填充列表框或组合框时,所有十进制数据元素在框中都不可见,例如,在以下情况下(conn是ADODB连接): 上面包含6列ID(all show Type=Variant/Decimal),由于某些奇怪的原因,其中包含的值都没有“显示”。通常只显示字符串和日期列,小数点在那里,但为空 以下是一些片段: 现在,在组合框的情况下,我可以得到一个列的值,如果我选择该列表项时它们的列是BoundC

我已经多次遇到这个问题,并且一直能够解决它。而且万能的搜索引擎也帮不了我

问题是,当我从ADODB记录集中填充列表框或组合框时,所有十进制数据元素在框中都不可见,例如,在以下情况下(conn是ADODB连接):

上面包含6列ID(all show Type=Variant/Decimal),由于某些奇怪的原因,其中包含的值都没有“显示”。通常只显示字符串和日期列,小数点在那里,但为空

以下是一些片段:

现在,在组合框的情况下,我可以得到一个列的值,如果我选择该列表项时它们的列是BoundColumn,则显示该列的值,但仅显示在组合框的值中(因此仍然不在列表中)

我最初的解决方法是在添加到Listbox/Combobox之前将它们转换为字符串值,但在本例中,我希望直接将查询结果链接到Box.List,而不查看详细信息。因此,我正在寻找一个解决方案,而不是一个变通办法

简而言之:由于某些奇怪的原因,我的数字字段项在默认情况下是不可见的。解决方法是将项目设置为字符串值。我现在正在寻找此错误/问题的解决方案:

  • 这是什么原因造成的
  • 如何解决

  • 那么所有的字符串数据都出现了?而且,只有数字不会出现

    然后,您可能希望将数字转换为字符串,并将其传递到列表、组合框中。 我注意到你已经这么做了

    现在,由于任何原因,如果最大行数和阵列/记录器行数的长度不匹配,也可能会导致问题。不过,似乎您可以使用记录集行数设置combobox的行。您可以尝试迭代记录集来填充组合框,而不是使用数组吗?是的,这不是性能友好型的,在优化之前,猜猜我们需要什么才能在没有bug的情况下工作。;-)

    您是否已将组合框绑定到记录集?您能否确认您的数组是否为一维,并且它是否有数据要馈送到框中

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

    因此,您可以尝试以下方法来设置
    rowsource
    属性吗?确保对数字列和测试列都进行测试。以及旧的组合框和新的组合框

    Rowsource->build query->
    sqlview copy to rowsource property box-> 
    delete or don't save that above built query since you already have SQL statement.
    
    只是想让你试试缩小范围的可能性


    用最可能的问题和解决方案更新答案

    根据我的评论,他们主要假设您在填充listbox/combobox时遇到问题

    我忘了问一些非常重要的问题,你申报了吗 选项Base 1以确保避免丢失数组的一列 值,如果您正在转储二维数组。。。?因为你没有 用于将数据转储到阵列中的数组的显式声明 列表框…………)

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

    *所以你有三个选择*

    • 选项基数1

    • 重拨数组并进行循环以填充数组并将其转储到.list中

    • 由于ReDim阵列需要您循环使用,因此您也可以 使用recorset iself添加数据

    您似乎对数组有一个维度问题,该数组没有声明,而是从记录集转换到listbox/combobox。因此,未声明的数组没有正确填充多列。这可能就是当您声明array proeprly时它工作的原因

    事实上,在你的评论中,你是这么说的

    当我在代码中创建数组并将其填充到代码中时(按 条目)它将毫无问题地显示–K_B 14分钟前


    好的,在经历了各种可能的原因之后,似乎是这样的:

    VBA没有自己的十进制变量类型。 VBA可以从声明为Variant的变量中处理Decimal(从而成为Variant/Decimal) 这通常不会停止程序的工作,但在诸如Listbox和Combobox之类的控件中,类型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将首先将十进制转换为字符串,然后列表框才能获得它


    因此:在将任何十进制输出交给列表框之前,不要让SQL生成任何十进制输出,也不要在VBA中将任何十进制输出转换为单/双/字符串/整数/长。

    ColumnWidths属性是什么样子的?是否在控件的其他地方执行了.visible=false?你能更新你的问题吗?你的组合框和列表框在不可见数据的情况下是什么样子的?列宽没有设置(因此所有的列都一样宽,我通过设置ColumnHeads=True来验证)。盒子是可见的,我刚刚试过另一个。visible=True看看这是否重要,但唉。此外,日期和文本显示一样没有问题。最大行数匹配,除了这个“小故障”之外,它填充得很好。迭代会得到相同的结果,只是比您提到的要慢。当我迭代时,我确实可以将数字转换为字符串,但是这仍然让我感到困惑,为什么这不能正常工作。我添加了一些片段来显示我的数组的外观,它是一个二维矩阵,因此适合列表,除了这个之外,它填充得很好。在数据库中使用已保存的查询不会更改结果,但会丢失数字。我现在将尝试rowsource,但是我以前从未使用过它,因为它在我看来有点不可靠…顺便说一句,如果您使用的是
    .List
    属性,那么您可以使用它
    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