我看到很多人使用TextBox或ComboBox过滤用户窗体的ListBox。
我想做我的事,但与他们不同,我的列表框是使用MySQL记录集填充的,而他们使用的是Excel电子表格
这是我的实际代码,其中SelectProduct是我的用户窗体,而ListRef是我的列表框。
Requete = "SELECT Reference,Nom,Marque,PrixVente FROM Produits_Beta"
rs.Open Requete, oConnect
SelectProduct.ListeRef.Clear
SelectProduct.ListeRef.Column = rs.GetRows
列表框将很快显示700多个结果,我需要一种让用户过滤它们以查找所需内容的方法。
如果我使用电子表格获取“列表框”值,则我的“过滤器”代码将如下所示。 (代码最初来自Ralph)
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表粘贴到隐藏的电子表格中的方法,同样,我也不知道该怎么做。
答案 0 :(得分:0)
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.
如果要创建一个隐藏工作表来接收此数据,则可以这样尝试: 假设您首先在工作簿中创建了一个名为ws的(vba)工作表。为了从此记录集中获取数据,您必须遍历其记录并将每个记录的值复制到一行:
'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查询中对数据进行排序,以使列表框按字母顺序填充(如果它适合您的需求)。
答案 1 :(得分:0)
过滤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
匹配。
编辑,您可以在LIKE中使用%pom%
。但是,这就是问题:如果您的搜索词排在第一位%
,则DBMS无法使用索引查找来查找您的数据,因此搜索速度会变慢。可以搜索一千行,这无关紧要。对于数百万行,这很重要。
许多此类软件的开发人员经常使用查询来过滤其数据。 DBMS是为此而构建的。 DBMS的全部目的是允许软件有效地处理大量数据。
专业提示:在查询中始终使用ORDER BY
。如果您不这样做,则数据库服务器可以自由选择以任何顺序显示结果,而该顺序在当前看来是最有效的。这就是不稳定排序,它使用户发疯。