首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Access数据库读取数据并添加到combox的速度非常慢

从Access数据库读取数据并添加到combox的速度非常慢
EN

Stack Overflow用户
提问于 2017-07-18 00:52:31
回答 2查看 78关注 0票数 0

所以我一直在尝试从一个大型的access数据库中读取数据,而我正在尝试读取的表包含近20000个条目,所有这些条目都是combox中需要的。通过一些测试,我发现程序运行的时间越长,速度就越慢。前5000个几乎是瞬间相加的,但接下来的5000个增量是指数级增加的。总而言之,加载整个文件大约需要5分钟。我是不是遗漏了一些能让它更有效率的东西?我附加了下面iam使用的函数。它是Vb.net格式的

代码语言:javascript
复制
       Private Sub chkBoxPurchasedPart_CheckedChanged(sender As Object, e As EventArgs) Handles chkBoxPurchasedPart.CheckedChanged
        If (chkBoxPurchasedPart.Checked) Then
            chkBoxRawMaterial.Checked = False
            chkBoxSkipMaterialSelection.Checked = False
            MaterialButton.Enabled = True
            comboxMaterial.Sorted = True

            comboxMaterialHdn.Text = "AS SUPPLIED"
            comboxMaterialHdn.Enabled = False


            Dim cn As OleDbConnection
            Dim cmd As OleDbCommand
            Dim dr As OleDbDataReader
            Dim oConnect, oQuery As String
            oConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Y:\eng\ENG_ACCESS_DATABASES\VisibPartAttributes.mdb"
            oQuery = "SELECT * FROM VISIB_PARTMASTER_LOCAL WHERE PRODUCT_LINE LIKE '%PUR%' OR PRODUCT_LINE LIKE '%NOSTD%' AND PARTDESCR NOT LIKE '%OBSOLETE%'"

            Try
                cn.Open()
            Catch ex As Exception
            Finally
                cn = New OleDbConnection(oConnect)
                cn.Open()
            End Try

            cmd = New OleDbCommand(oQuery, cn)
            dr = cmd.ExecuteReader


            comboxMaterial.Items.Add("- - OTHER - -")

            While dr.Read()
                comboxMaterial.Items.Add(dr(0))
            End While

            dr.Close()
            cn.Close()

            Try
                Dim s As Session = Session.GetSession()
                Dim dispPart As Part = s.Parts.Display()
                Dim c As NXOpen.Assemblies.Component = dispPart.ComponentAssembly.RootComponent

                Dim children As NXOpen.Assemblies.Component() = c.GetChildren()

                Dim childMaterial As String = Nothing

                For Each child As NXOpen.Assemblies.Component In children
                    childMaterial = child.GetStringAttribute("STACKTECK_PARTN")
                    If (childMaterial.Length > 5 Or child.Name.StartsWith("PUR")) Then
                        comboxMaterial.Text = childMaterial
                    End If
                Next

            Catch ex As Exception

            End Try

        ElseIf (chkBoxPurchasedPart.Checked = False) Then

            comboxMaterialHdn.Text = ""
            comboxMaterialHdn.Enabled = True


            txtBoxDiameter.Enabled = True

            txtBoxRoundLength.Enabled = True

            txtBoxInnerDiameter.Enabled = True

            txtBoxLength.Enabled = True

            txtBoxWidth.Enabled = True

            txtBoxThickness.Enabled = True

            MaterialButton.Enabled = False
            txtBoxVisMaterial.Text = ""
            txtBoxVisMaterialDescription.Text = ""
            txtBoxEachQuantity.Text = ""
            txtBoxTotalQuantity.Text = ""
            txtBoxUnitOfMeasure.Text = ""
            comboxMaterial.Sorted = False

            comboxMaterial.Items.Clear()
            comboxMaterial.Text = ""
        End If
    End Sub
EN

回答 2

Stack Overflow用户

发布于 2017-07-18 02:08:18

对于将来遇到类似问题的任何人来说,组合框不是问题所在,以前的设计者设置了AutoCompleteMode来建议和追加,这减慢了整个过程。禁用它,你的程序应该会更快。

票数 0
EN

Stack Overflow用户

发布于 2017-07-18 18:31:30

我只会在输入前3或4个字符后加载组合框记录。这应该会大大减少返回的记录数量,并且仍然允许自动完成功能工作。

此线程包含可帮助您的代码:get 65K records only listed in combo box from a table of 155K records

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45149680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档