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

VB如何从Access数据库读取日期时间并与系统时间对比分类展示提醒

VB + Access 实现提醒分有效/过期展示的修正方案

需求说明

窗体需要分别展示两类提醒数据:顶部DataGridView展示未到截止时间的有效提醒,底部DataGridView展示已过截止时间的过期提醒,数据均存储在Access数据库的TblReminder表中。
窗体样式参考:
顶部datagridview展示当前有效提醒,底部datagridview展示已过期提醒

现有代码存在的问题

  • 两次数据库查询逻辑混乱,第二次查询未配置数据库连接和查询语句,运行会直接报错
  • 首次查询仅读取了最后一条提醒的日期,没有对全量提醒数据做时间对比
  • 日期类型处理逻辑冗余,将FormatDateTime返回的字符串隐式转换为Date类型容易触发格式异常
  • 缺少已过期提醒的展示逻辑
  • 数据库连接释放不规范,存在连接泄露风险

实现思路

直接在SQL查询层面通过日期过滤分别拿到有效和过期提醒,无需在业务代码中循环判断,效率更高、逻辑更清晰:

  • 有效提醒:SELECT 所需字段 FROM TblReminder WHERE ReminderDate >= Now()(Access内置Now()函数取当前系统时间,和VB的Date.Now格式完全匹配)
  • 过期提醒:SELECT 所需字段 FROM TblReminder WHERE ReminderDate < Now()
  • 直接将查询结果填充到DataTable绑定到对应DataGridView,无需手动逐行添加数据,后续扩展排序、筛选功能也更便捷

修正后完整代码

Imports System.Data.OleDb

Public Class frmReminderInfo
    ' 假定DbConnect()是你已封装的数据库连接方法,连接成功返回True,全局连接对象为cn
    Private Sub frmReminderInfo_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadAllReminders()
    End Sub

    Private Sub LoadAllReminders()
        If Not DbConnect() Then
            MessageBox.Show("数据库连接失败,请检查配置")
            Exit Sub
        End If

        Try
            ' 加载当前有效提醒到顶部DataGridView
            Dim currentSql As String = "SELECT ReminderID, CustomerName, DeviceInfo, RepairPrice, ReminderDate FROM TblReminder WHERE ReminderDate >= Now()"
            Dim currentCmd As New OleDbCommand(currentSql, cn)
            Dim currentDt As New DataTable()
            currentDt.Load(currentCmd.ExecuteReader())
            DgvCurrentReminders.DataSource = currentDt

            ' 加载已过期提醒到底部DataGridView,DgvExpiredReminders替换为你实际的控件名称
            Dim expiredSql As String = "SELECT ReminderID, CustomerName, DeviceInfo, RepairPrice, ReminderDate FROM TblReminder WHERE ReminderDate < Now()"
            Dim expiredCmd As New OleDbCommand(expiredSql, cn)
            Dim expiredDt As New DataTable()
            expiredDt.Load(expiredCmd.ExecuteReader())
            DgvExpiredReminders.DataSource = expiredDt
        Catch ex As Exception
            MessageBox.Show("加载提醒数据失败:" & ex.Message)
        Finally
            ' 无论是否报错都关闭数据库连接,避免连接泄露
            If cn.State = ConnectionState.Open Then
                cn.Close()
            End If
        End Try
    End Sub
End Class

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:05