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

VB 2010无需Crystal Reports生成日/月/年记录的方法求助

嘿,我完全懂你的困扰——Crystal Reports对编程新手来说确实有点难上手,不过用MS Access 2010的查询搭配DataGridView完全能搞定你的需求!下面我一步步给你讲清楚实现方法,还有现成的示例代码,你跟着来就行~

核心思路

我们可以直接在Access里写日期筛选的SQL查询,然后用代码把查询结果读取出来,绑定到WinForms的DataGridView控件上。整个过程不需要依赖Crystal Reports,完全用基础的数据库操作和WinForms控件就能实现。

假设你的Access数据库里有一张记录表格,表名叫TransactionRecords,其中存储日期的字段叫RecordDateTime(如果你的字段名或表名不一样,记得替换成自己的)。


一、筛选每日记录

Access查询SQL

如果要查询今天的所有记录,可以用:

SELECT * FROM TransactionRecords 
WHERE DateValue(RecordDateTime) = DateValue(Now())

如果要查询指定某一天的记录(比如2024年5月20日),把条件改成:

SELECT * FROM TransactionRecords 
WHERE DateValue(RecordDateTime) = #2024-05-20#

注意:Access里日期常量要用#包裹

C# 绑定到DataGridView示例代码

using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

// 假设这是WinForms窗体里的方法,比如按钮点击事件
private void LoadDailyRecords()
{
    // 1. 配置Access连接字符串(替换成你的数据库路径)
    string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourDatabase.accdb;Persist Security Info=False;";
    
    // 2. 要执行的查询SQL(这里用查询今天的记录)
    string sqlQuery = @"SELECT * FROM TransactionRecords WHERE DateValue(RecordDateTime) = DateValue(Now())";

    using (OleDbConnection conn = new OleDbConnection(connString))
    {
        try
        {
            conn.Open();
            // 3. 创建数据适配器,填充DataSet
            OleDbDataAdapter adapter = new OleDbDataAdapter(sqlQuery, conn);
            DataSet ds = new DataSet();
            adapter.Fill(ds, "DailyRecords");

            // 4. 绑定到DataGridView
            dataGridView1.DataSource = ds.Tables["DailyRecords"];
        }
        catch (Exception ex)
        {
            MessageBox.Show("加载数据出错:" + ex.Message);
        }
    }
}

二、筛选每月记录

Access查询SQL

查询当前月份的所有记录:

SELECT * FROM TransactionRecords 
WHERE Year(RecordDateTime) = Year(Now()) 
AND Month(RecordDateTime) = Month(Now())

查询指定年月的记录(比如2024年5月):

SELECT * FROM TransactionRecords 
WHERE Year(RecordDateTime) = 2024 
AND Month(RecordDateTime) = 5

C# 绑定到DataGridView示例代码

只需要修改上面代码里的sqlQuery即可:

string sqlQuery = @"SELECT * FROM TransactionRecords WHERE Year(RecordDateTime) = Year(Now()) AND Month(RecordDateTime) = Month(Now())";

三、筛选年度记录

Access查询SQL

查询当前年份的所有记录:

SELECT * FROM TransactionRecords 
WHERE Year(RecordDateTime) = Year(Now())

查询指定年份的记录(比如2024年):

SELECT * FROM TransactionRecords 
WHERE Year(RecordDateTime) = 2024

C# 绑定到DataGridView示例代码

同样修改sqlQuery:

string sqlQuery = @"SELECT * FROM TransactionRecords WHERE Year(RecordDateTime) = Year(Now())";

新手注意事项

  1. 引用必要的命名空间:确保你的项目已经引用了System.Data和System.Data.OleDb,代码里已经用using声明了。
  2. 数据库路径正确:连接字符串里的Data Source要指向你实际的Access数据库文件(.accdb格式),如果路径里有空格,记得用引号或者@符号包裹。
  3. 字段名/表名替换:把示例里的TransactionRecords和RecordDateTime替换成你自己数据库里的表名和日期字段名。

要是你需要让用户手动选择日期范围(比如用DateTimePicker控件),或者想优化查询性能,随时告诉我,我再给你调整代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:48:13