如何在VB.NET中使用MS ACCESS根据开始和结束日期进行查询

问题描述 投票:0回答:1

我正在尝试使用 VB.NET 中的 MS ACCESS 根据开始和结束日期进行查询

我不想使用 MS Access 中的函数,因为我使用 SQL for VB.NET。

请指导我。

谢谢

Public Class Form1
    Private AbsenService As New ABSENservice()
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView1.DataSource = AbsenService.GetAbsenfull()
    End Sub
End Class
Public Class ABSENservice
    Public Function GetOledbConnectionString() As String
        Return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\trialabsen.accdb;Persist Security Info=False;"
    End Function
    Private ReadOnly _conn As OleDbConnection
    Private _connectionString As String = GetOledbConnectionString()
    Public Sub New()
        _conn = New OleDbConnection(_connectionString)
    End Sub
    Public Function GetAbsenfull() As IEnumerable(Of ABSEN)
        Dim sql = $"SELECT ABSEN.ID2 AS [ID2],MASTERID2.NAMEID2 AS [NAMEID2],ABSEN.INOUT AS [INOUT],ABSEN.DATEABSEN AS [DATEABSEN],Format(ABSEN.TIME,'hh:mm:ss') AS [TIME],ABSEN.STATUS AS [STATUS] FROM ABSEN INNER JOIN MASTERID2 ON ABSEN.ID2 = MASTERID2.ID2"
        Using _conn = New OleDbConnection(GetOledbConnectionString())
            Return _conn.Query(Of ABSEN)(sql).ToList()
        End Using
    End Function
End Class
Public Class ABSEN
    Public Property ID() As Integer
    Public Property ID2() As String
    Public Property NAMEID2() As String
    Public Property INOUT() As String
    Public Property DATEABSEN() As DateTime
    Public Property TIME() As String
    Public Property STATUS() As String

End Class

代码结果

ID2 NAMEID2   INOUT DATEABSEN   TIME           STATUS
1000    JACK    IN  21-Apr-24   08:00:00    PRESENT
1000    JACK    IN  22-May-24   08:00:00    PRESENT
1000    JACK    OUT 22-May-24   17:00:00    PRESENT
1002    KEN     IN  22-May-24   08:00:00    PRESENT
1002    KEN     OUT 22-May-24   17:00:00    PRESENT
1000    JACK    OUT 21-Apr-24   17:00:00    PRESENT
1002    KEN     IN  21-Apr-24   08:00:00    PRESENT
1002    KEN     OUT 21-Apr-24   17:00:00    PRESENT
1000    JACK    IN  22-Apr-24   08:00:00    PRESENT
1000    JACK    OUT 22-Apr-24   17:00:00    PRESENT
1002    KEN     IN  22-Apr-24   08:00:00    PRESENT
1002    KEN     OUT 22-Apr-24   17:00:00    PRESENT
1000    JACK    IN  24-Apr-24   08:00:00    PRESENT
1002    KEN     OUT 24-Apr-24   17:00:00    PRESENT
1000    JACK    OUT 25-Apr-24   17:00:00    PRESENT
1002    KEN     IN  25-Apr-24   08:00:00    PRESENT
1000    JACK    IN  20-May-24   08:00:00    PRESENT
1000    JACK    OUT 20-May-24   17:00:00    PRESENT
1002    KEN     IN  20-May-24   08:00:00    PRESENT
1002    KEN     OUT 20-May-24   17:00:00    PRESENT
1000    JACK    IN  21-May-24   08:00:00    PRESENT
1000    JACK    OUT 21-May-24   17:00:00    PRESENT
1002    KEN     IN  21-May-24   08:00:00    PRESENT
1002    KEN     OUT 21-May-24   17:00:00    PRESENT
1000    JACK    IN  20-Apr-24   08:00:00    PRESENT
1000    JACK    OUT 20-Apr-24   17:00:00    PRESENT
1002    KEN     IN  20-Apr-24   08:00:00    PRESENT
1002    KEN     OUT 20-Apr-24   17:00:00    PRESENT

样本数据

桌子

ABSEN

ID2 输入输出 日期ABSEN 时间 状态
1000 20 年 4 月 24 日 08:00 现在
1000 20 年 4 月 24 日 17:00 现在
1002 20 年 4 月 24 日 08:00 现在
1002 20 年 4 月 24 日 17:00 现在
1000 21-4-24 08:00 现在
1000 21-4-24 17:00 现在
1002 21-4-24 08:00 现在
1002 21-4-24 17:00 现在
1000 22-4-24 08:00 现在
1000 22-4-24 17:00 现在
1002 22-4-24 08:00 现在
1002 22-4-24 17:00 现在
1000 24 年 4 月 24 日 08:00 现在
1002 24 年 4 月 24 日 17:00 现在
1000 24 年 4 月 24 日 17:00 现在
1002 24 年 4 月 24 日 08:00 现在
1000 24 年 5 月 20 日 08:00 现在
1000 24 年 5 月 20 日 17:00 现在
1002 24 年 5 月 20 日 08:00 现在
1002 24 年 5 月 20 日 17:00 现在
1000 24 年 5 月 21 日 08:00 现在
1000 24 年 5 月 21 日 17:00 现在
1002 24 年 5 月 21 日 08:00 现在
1002 24 年 5 月 21 日 17:00 现在
1000 24 年 5 月 22 日 08:00 现在
1000 24 年 5 月 22 日 17:00 现在
1002 24 年 5 月 22 日 08:00 现在
1002 24 年 5 月 22 日 17:00 现在

桌子

HELPERABSEN

ID2 输入输出 日期ABSEN 时间 状态
1000 24 年 4 月 23 日 不存在
1000 24 年 4 月 23 日 不存在
1002 24 年 4 月 23 日 不存在
1002 24 年 4 月 23 日 不存在
1000 24 年 4 月 24 日 17:00 现在
1002 24 年 4 月 24 日 08:00 现在
1000 24 年 4 月 24 日 08:00 现在
1002 24 年 4 月 24 日 17:00 现在

桌子

MASTERID2

ID2 名称ID2 位置
1000 杰克 工作人员
1001 罗伊 操作员
1002 工作人员
1003 雷伊 操作员

桌子

PERIOD

期间名称 开始日期 结束日期
第一 22-4-24 24 年 4 月 25 日
第二 24 年 5 月 22 日 24 年 5 月 25 日

全部想要的结果

但我想以每个时期为基础


ID2 NAMEID2   INOUT DATEABSEN   TIME    STATUS
1000    JACK    IN  22-Apr-24   08:00   PRESENT
1000    JACK    OUT 22-Apr-24   17:00   PRESENT
1002    KEN     IN  22-Apr-24   08:00   PRESENT
1002    KEN     OUT 22-Apr-24   17:00   PRESENT
1000    JACK    IN  23-Apr-24       NOT PRESENT
1000    JACK    OUT 23-Apr-24       NOT PRESENT
1002    KEN     IN  23-Apr-24       NOT PRESENT
1002    KEN     OUT 23-Apr-24       NOT PRESENT
1000    JACK    IN  24-Apr-24   08:00   PRESENT
1000    JACK    OUT 24-Apr-24   17:00   PRESENT
1002    KEN     IN  24-Apr-24   08:00   PRESENT
1002    KEN     OUT 24-Apr-24   17:00   PRESENT
1000    JACK    IN  25-Apr-24   08:00   PRESENT
1000    JACK    OUT 25-Apr-24   17:00   PRESENT
1002    KEN     IN  25-Apr-24   08:00   PRESENT
1002    KEN     OUT 25-Apr-24   17:00   PRESENT
1000    JACK    IN  22-May-24   08:00   PRESENT
1000    JACK    OUT 22-May-24   17:00   PRESENT
1002    KEN     IN  22-May-24   08:00   PRESENT
1002    KEN     OUT 22-May-24   17:00   PRESENT
1000    JACK    IN  23-May-24   08:00   PRESENT
1000    JACK    OUT 23-May-24       
1002    KEN     IN  23-May-24       
1002    KEN     OUT 23-May-24       
1000    JACK    IN  24-May-24       
1000    JACK    OUT 24-May-24       
1002    KEN     IN  24-May-24       
1002    KEN     OUT 24-May-24       
1000    JACK    IN  25-May-24       
1000    JACK    OUT 25-May-24       
1002    KEN     IN  25-May-24       
1002    KEN     OUT 25-May-24       
    

sql vb.net ms-access datagridview date-range
1个回答
0
投票

您是否尝试更改

的值

'获取库存搜索'

功能在

'ABSEN服务'

包含一个

的类

'开始日期'

'结束日期'

参数?

类似这样的东西:

Public Function GetStockSearching(startDate As Date, endDate As Date) As IEnumerable(Of ABSEN)
    Dim sql = $"SELECT ABSEN.ID2 AS [ID2], MASTERID2.NAMEID2 AS [NAMEID2], ABSEN.INOUT AS [INOUT], ABSEN.DATEABSEN AS [DATEABSEN], Format(ABSEN.TIME,'hh:mm:ss') AS [TIME], ABSEN.STATUS AS [STATUS] " &
              $"FROM ABSEN INNER JOIN MASTERID2 ON ABSEN.ID2 = MASTERID2.ID2 " &
              $"WHERE ABSEN.DATEABSEN BETWEEN #{startDate:yyyy-MM-dd}# AND #{endDate:yyyy-MM-dd}#"

    Using _conn = New OleDbConnection(GetOledbConnectionString())
        Return _conn.Query(Of ABSEN)(sql).ToList()
    End Using
End Function

尝试添加两个参数

'开始日期'

'结束日期'

,都是类型

“日期”

,它们将用于过滤

'艾布森'

桌子

'日期ABSEN'

使用

“之间”

SQL 查询中的运算符。

给我们这个更新的函数,从

调用它

'Form1_加载'

事件处理程序并传入所需的开始和结束日期作为参数。

PSA:这是我的第一个答案,所以如果我不符合格式规范,请耐心等待

谢谢:)

© www.soinside.com 2019 - 2024. All rights reserved.