首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加快搜索过滤器的变化?

问如何加快搜索过滤器的变化?
EN

Stack Overflow用户
提问于 2022-04-25 01:04:14
回答 1查看 71关注 0票数 1

目标:我想通过在文本框中输入一个字符串来搜索。这将显示所有的项目与或不移动。

我有两个数据库可以提取记录。

  • Settings数据库(项目表)- item_id,item_desc,item_details,item_category,item_cost
  • Main库存数据库(库存表)- item_id,item_movement,item_qty
  • Both数据库已被设置为索引(无重复)

我的设置数据库有200条记录,我的主要库存有2000条记录。

Problem:每次我使用textbox_change过滤数据时,都会结冰,过滤记录需要时间。

码

代码语言:javascript
复制
Private Sub txtSearchWindow_Change()

Call OpenDbSettings 'OPEN DATABASE
DbName = DatabaseLoc & "DATABASE\MAIN INVENTORY.accdb"
Call OpenDbInventory(DbName)

MYSQL = "SELECT item_id, item_desc, itm_details, itm_category, item_cost FROM ITEM " & _
  "WHERE (item_id LIKE '%" & Replace(.txtSearchWindow.Text, "'", "''") & "%' " & _
  "OR item_name LIKE '%" & Replace(.txtSearchWindow.Text, "'", "''") & "%' " & _
  "OR item_category LIKE '%" & Replace(.txtSearchWindow.Text, "'", "''") & "%')"
MYSQL = MYSQL & " ORDER BY itm_category, itm_name"

Set rsItem = dbSettings.Execute(MYSQL)

If rsItem.EOF Then
Else
    Do Until rsItem.EOF = True
        Set li = .lvSearchWindow.ListItems.Add(, , rsItem.Fields("item_id"))
        li.SubItems(1) = Replace(rsItem.Fields("item_name"), "''", "'")
        li.SubItems(2) = Replace(rsItem.Fields("item_category"), "''", "'")

        MYSQL = "SELECT item_id, SUM(item_qty) AS NewItmQty FROM INVENTORY"
        MYSQL = MYSQL & " WHERE item_id = '" & rsItem.Fields("itm_id") & "'"
        MYSQL = MYSQL & " GROUP BY item_id"
        
        Set rsInventory = dbInventory.Execute(MYSQL)
        
        If rsInventory.EOF Then
            li.SubItems(3) = "0"
        Else
            li.SubItems(3) = FormatNumber(rsInventory.Fields("NewItmQty"), 0, , vbTrue)
        End If
    
        rsInventory.Close
        Set rsInventory = Nothing
        
        li.SubItems(4) = FormatNumber(rsItem.Fields("itm_cost"), 2, , vbTrue)
        li.SubItems(5) = Replace(rsItem.Fields("itm_details"), "''", "'")
        rsItem.MoveNext
    Loop
End If

rsItem.Close 'CLOSE RECORDSET
Set rsItem = Nothing

dbInventory.Close 'CLOSE DATABASE
Set dbInventory = Nothing

dbSettings.Close 'CLOSE DATABASE
Set dbSettings = Nothing

End Sub

问题:有什么方法可以加快搜索过滤器的速度吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-25 10:16:13

这并不奇怪--对于主记录集结果的每一行,都有一个单独的数据库查询。

要改进这一点,您需要将其组合成一个单独的查询,该查询具有逐个项目和从一个项目到另一个目录的左联接。

为此,您需要将两个表放到同一个数据库中。

进一步改进:不要立即搜索每个Change,而是等待几个100毫秒,然后搜索用户已经停止键入。Access VBA中的示例:https://stackoverflow.com/a/51608017/3820271

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

https://stackoverflow.com/questions/71993536

复制
相关文章

相似问题

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