|
楼主 |
发表于 2024-4-11 15:57
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
优化了一下查找功能,就是在textbox6输入查找条件时自动显示,不需要再通过命令按钮,我向请教一下老师,现在有个问题,为啥我的listbox显示的标题错误,全部在第一列上显示。
代码如下:
Public Sub RefreshListBox()
Dim Conn_object As Object
Dim Reco_object As Object
Dim Conn_str As String
Dim Path_str As String
Dim Sele_str As String
Dim i As Integer
Dim searchStr As String
' 获取 TextBox6 的文本作为搜索条件
searchStr = TextBox6.Value
' 清除 ListBox 中的现有数据
Me.ListBox1.Clear
' 建立数据库连接
Set Conn_object = CreateObject("ADODB.Connection")
Set Reco_object = CreateObject("ADODB.RecordSet")
Path_str = ThisWorkbook.Path & "\电动车台账.accdb"
Conn_str = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Path_str & ";" & _
"Persist Security Info=False;" & _
"Jet OLEDB:Database Password=''"
' 打开数据库连接
Conn_object.Open Conn_str
' 根据 searchStr 的值构建 SQL 查询
If searchStr = "" Then
' 如果 searchStr 为空,则加载所有数据
Sele_str = "SELECT * FROM [1栋电动车台账]"
Else
' 如果 searchStr 不为空,则构建筛选条件
' 注意:这里假设 searchStr 已经被清理和格式化,以避免SQL注入风险
Sele_str = "SELECT ID, 房号, 电动车品牌, 车牌号码, 联系电话, 填写日期 FROM [1栋电动车台账] WHERE 房号 = '" & searchStr & "' OR 电动车品牌 = '" & searchStr & "' OR 车牌号码 = '" & searchStr & "' OR 联系电话 = '" & searchStr & "'"
End If
' 执行查询并填充 ListBox
Reco_object.Open Sele_str, Conn_object, 1, 3
If Reco_object.RecordCount > 0 Then
' 设置 ListBox 的列数
Me.ListBox1.ColumnCount = Reco_object.Fields.Count
' 添加列标题
For i = 0 To Reco_object.Fields.Count - 1
Me.ListBox1.AddItem Reco_object.Fields(i).Name
Next i
' 添加数据行
Do Until Reco_object.EOF
Me.ListBox1.AddItem "" ' 添加新行
For j = 0 To Reco_object.Fields.Count - 1
Me.ListBox1.List(Me.ListBox1.ListCount - 1, j) = Reco_object.Fields(j).Value
Next j
Reco_object.MoveNext
Loop
End If
' 关闭 Recordset 和 Connection
Reco_object.Close
Conn_object.Close
Set Reco_object = Nothing
Set Conn_object = Nothing
End Sub
|
|