You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库查询后列表视图展示:部门筛选后数据入列表技术求助

解决ListView填充数据库查询结果的问题

我来帮你搞定把ADODB查询结果填充到ListView的问题!你的下拉框筛选逻辑已经搭好了,接下来只需要把查询到的记录集逐条添加到ListView里就行,下面是具体的步骤和修改后的代码:

第一步:先给ListView配置好列(必做)

首先得确保你的ListView已经设置了对应查询字段的列,而且要把它改成报表模式(不然列和内容都不会正常显示)。你可以在窗体加载的时候添加这段代码:

Private Sub Form_Load()
    ' 给ListView添加列,对应你查询的每个字段(调整宽度和名称到你需要的样子)
    ListView1.ColumnHeaders.Add , , "PO编号", 100
    ListView1.ColumnHeaders.Add , , "申请人", 120
    ListView1.ColumnHeaders.Add , , "申请部门", 120
    ListView1.ColumnHeaders.Add , , "状态", 80
    ListView1.ColumnHeaders.Add , , "审批人", 100
    
    ' 关键:设置ListView为报表视图,这样列和子项才会显示
    ListView1.View = lvwReport
End Sub

第二步:修改你的下拉框点击事件,填充数据

接下来把你的comboDept_Click代码补充完整,加上遍历记录集、填充ListView的逻辑,还要注意清空旧数据和资源释放:

Private Sub comboDept_Click()
    Dim sQuery As String
    Dim oRS As New ADODB.Recordset
    Dim combVal As String
    Dim listItem As ListItem ' 用来创建ListView的每一行
    Dim cnn As New ADODB.Connection ' 如果没有全局连接对象,这里创建
    
    ' 获取选中的部门值
    combVal = comboDept.List(comboDept.ListIndex)
    
    ' 先清空ListView的旧数据,避免叠加
    ListView1.ListItems.Clear
    
    ' 1. 先打开数据库连接(替换成你的实际连接字符串)
    cnn.Open "Provider=SQLOLEDB;Data Source=你的服务器名;Initial Catalog=你的数据库名;User ID=用户名;Password=密码;"
    
    ' 2. 构建查询语句(补全你的表名和字段,这里假设完整的查询条件)
    If combVal = "EIBU_SALES" Then
        sQuery = "SELECT PO_No, PO_Requestor, PO_Req_Dept, PO_Status, PO_Approver FROM 你的表名 WHERE PO_Req_Dept = '" & combVal & "'"
    Else
        ' 如果有其他部门的筛选逻辑,这里可以补充
        sQuery = "SELECT PO_No, PO_Requestor, PO_Req_Dept, PO_Status, PO_Approver FROM 你的表名 WHERE PO_Req_Dept = '" & combVal & "'"
    End If
    
    ' 错误处理,防止程序崩溃
    On Error GoTo ErrorHandler
    
    ' 3. 执行查询,打开记录集
    oRS.Open sQuery, cnn, adOpenStatic, adLockReadOnly
    
    ' 4. 遍历记录集,逐条添加到ListView
    Do While Not oRS.EOF
        ' 创建新行,第一列用PO_No作为行标题
        Set listItem = ListView1.ListItems.Add(, , oRS("PO_No").Value)
        ' 给后续列赋值(SubItems的索引从1开始,对应第二列及以后)
        listItem.SubItems(1) = oRS("PO_Requestor").Value
        listItem.SubItems(2) = oRS("PO_Req_Dept").Value
        listItem.SubItems(3) = oRS("PO_Status").Value
        listItem.SubItems(4) = oRS("PO_Approver").Value
        
        ' 移动到下一条记录
        oRS.MoveNext
    Loop

Cleanup:
    ' 5. 释放资源,避免内存泄漏
    If Not oRS Is Nothing Then
        If oRS.State = adStateOpen Then oRS.Close
        Set oRS = Nothing
    End If
    If Not cnn Is Nothing Then
        If cnn.State = adStateOpen Then cnn.Close
        Set cnn = Nothing
    End If
    Exit Sub

ErrorHandler:
    MsgBox "数据加载出错:" & Err.Description, vbExclamation
    Resume Cleanup
End Sub

几个关键注意点

  • 视图模式:一定要把ListView的View设为lvwReport,否则列和子项都不会显示出来。
  • 清空旧数据:每次筛选前调用ListView1.ListItems.Clear,不然新数据会和旧数据混在一起。
  • 资源释放:用完Recordset和Connection后一定要关闭并设置为Nothing,这是VB6里防止内存泄漏的好习惯。
  • 错误处理:加上On Error GoTo逻辑,能帮你快速定位查询或连接时的问题。

内容的提问来源于stack exchange,提问作者zhanwei yap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:58:20