过滤一个用mysql填充的列表框

a0zr77ik  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(355)

我看到很多人用文本框或组合框过滤他们用户窗体的列表框。
我想让它做我的,但不同于他们,我的列表框是用mysql记录集填充的,而他们使用的是excel电子表格
这是我的实际代码,其中selectproduct是我的userform,listref是我的listbox。

Requete = "SELECT Reference,Nom,Marque,PrixVente FROM Produits_Beta"
            rs.Open Requete, oConnect

SelectProduct.ListeRef.Clear
SelectProduct.ListeRef.Column = rs.GetRows

列表框很快就会显示700多个结果,我需要一种方法让我的用户过滤它们,找到他们需要的东西。
如果我使用电子表格来获取listbox值,我的过滤代码应该是这样的(代码源于拉尔夫)

Dim i As Long
Dim arrList As Variant

Me.ListeRef.Clear
If TheoricalSheet.Range("A" & TheoricalSheet.Rows.Count).End(xlUp).Row > 1 And Trim(Me.TXBoxFilter.Value) <> vbNullString Then
    arrList = TheoricalSheet.Range("A1:A" & TheoricalSheet.Range("A" & TheoricalSheet.Rows.Count).End(xlUp).Row).Value2
    For i = LBound(arrList) To UBound(arrList)
        If InStr(1, arrList(i, 1), Trim(Me.TXBoxFilter.Value), vbTextCompare) Then
            Me.ListeRef.AddItem arrList(i, 1)
        End If
    Next i
End If
If Me.ListeRef.ListCount = 1 Then Me.ListeRef.Selected(0) = True

我可以,但我需要一种方法将所有mysql表粘贴到一个隐藏的电子表格中,而且,我也不知道如何做到这一点。

9rygscc1

9rygscc11#

worksheet.visible属性有三个选项,如下所示:

xlSheetVisible 'The usual visible worksheet.
xlSheetHidden 'Worksheet that is hidden but may be turned visible by the user.
xlSheetVeryHidden 'Worksheet that is hidden but may only be turned visible via VBA.

如果要创建一个隐藏的工作表来接收此数据,可以这样尝试:假设您首先在工作簿(vba)中创建了一个名为ws的工作表。为了从这个记录集中获取数据,您必须遍历它的记录并将每个记录的值复制到一行:

'Header
With ws
    .Cells(1,1) = "Reference"
    .Cells(1,2) = "Nom"
    .Cells(1,3) = "Marque"
    .Cells(1,4) = "PrixVente"
End With

'Rows
Dim i as Long: i = 2

with Requete
    If not (.EOF and .BOF) then
        .movefirst

        Do until .EOF                
            ws.Cells(i,1) = .Fields("Reference")
            ws.Cells(i,2) = .Fields("Nom")
            ws.Cells(i,3) = .Fields("Marque")
            ws.cells(i,4) = .Fields("PrixVente")

            .MoveNext
            i=i+1
        Loop
    End If
End With

然后,如果不希望用户访问您的工作表,只需执行以下操作:

ws.visible = xlSheetVeryHidden

如果计划刷新查询并再次获取数据,则必须事先清除工作表。另外,在sql查询中对数据进行排序也很好,这样列表框就可以按字母顺序填充,以满足您的需要。

s8vozzvw

s8vozzvw2#

筛选sql数据以进行显示的标准方法是使用 WHERE 子句。当你有七行,七百行,七百万行的时候,这就行了。
您可以尝试以下操作:

SELECT Reference,Nom,Marque,PrixVente 
   FROM Produits_Beta 
  WHERE Produit LIKE CONCAT('filter value', '%')
  ORDER BY Produit
  LIMIT 100

如果你给一个空字符串 filter value 你将得到前一百排;您的用户将很快看到过滤器是必要的。
如果没有筛选值,则 WHERE Produit LIKE '%' 不过滤。与 Pom 作为您将得到的筛选值 WHERE Produit LIKE 'Pom%' 匹配的 Pomme , Pomme de terre ,和 Pomade ,例如。
编辑您可以使用的 %pom% 像这样。但问题是:如果你的搜索词 % 首先,dbms不能使用索引查找来查找数据,因此搜索速度会慢一些。要搜索一千行,这不重要。有数百万行,这很重要。
这类软件的许多开发人员经常使用查询来过滤他们的数据。数据库管理系统就是为此而建立的。dbms的全部目的是让软件能够有效地处理大量的数据集。
专业提示:始终使用 ORDER BY 在您的查询中。如果您不这样做,数据库服务器就可以自由地以它认为目前最有效的任何顺序显示结果。这就是所谓的不稳定排序,它会让用户发疯。

相关问题