我看到很多人用文本框或组合框过滤他们用户窗体的列表框。
我想让它做我的,但不同于他们,我的列表框是用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表粘贴到一个隐藏的电子表格中,而且,我也不知道如何做到这一点。
2条答案
按热度按时间9rygscc11#
worksheet.visible属性有三个选项,如下所示:
如果要创建一个隐藏的工作表来接收此数据,可以这样尝试:假设您首先在工作簿(vba)中创建了一个名为ws的工作表。为了从这个记录集中获取数据,您必须遍历它的记录并将每个记录的值复制到一行:
然后,如果不希望用户访问您的工作表,只需执行以下操作:
如果计划刷新查询并再次获取数据,则必须事先清除工作表。另外,在sql查询中对数据进行排序也很好,这样列表框就可以按字母顺序填充,以满足您的需要。
s8vozzvw2#
筛选sql数据以进行显示的标准方法是使用
WHERE
子句。当你有七行,七百行,七百万行的时候,这就行了。您可以尝试以下操作:
如果你给一个空字符串
filter value
你将得到前一百排;您的用户将很快看到过滤器是必要的。如果没有筛选值,则
WHERE Produit LIKE '%'
不过滤。与Pom
作为您将得到的筛选值WHERE Produit LIKE 'Pom%'
匹配的Pomme
,Pomme de terre
,和Pomade
,例如。编辑您可以使用的
%pom%
像这样。但问题是:如果你的搜索词%
首先,dbms不能使用索引查找来查找数据,因此搜索速度会慢一些。要搜索一千行,这不重要。有数百万行,这很重要。这类软件的许多开发人员经常使用查询来过滤他们的数据。数据库管理系统就是为此而建立的。dbms的全部目的是让软件能够有效地处理大量的数据集。
专业提示:始终使用
ORDER BY
在您的查询中。如果您不这样做,数据库服务器就可以自由地以它认为目前最有效的任何顺序显示结果。这就是所谓的不稳定排序,它会让用户发疯。