how to query based on start and end period dates with MS ACCESS in VB.NET

I’M trying to query based on start and end period dates with MS ACCESS in VB.NET

Table ABSEN can union with table HELPERABSEN

so I want to take the start date and end date from the table PERIOD with where condition based on PERIODNAME from table PERIOD.

if the start date and end date of the data do not exist in the Absen table in the DATEABSEN field then the query creates a new record according to ID2 and INOUT

I don’t want to use functions in MS Access because I use SQL for VB.NET.

if there is any other method please guide me

Thanks

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

RESULT FROM CODE

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

Sample Data

Table ABSEN

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

Table HELPERABSEN

ID2 INOUT DATEABSEN TIME STATUS
1000 IN 23-Apr-24 NOT PRESENT
1000 OUT 23-Apr-24 NOT PRESENT
1002 IN 23-Apr-24 NOT PRESENT
1002 OUT 23-Apr-24 NOT PRESENT
1000 OUT 24-Apr-24 17:00 PRESENT
1002 IN 24-Apr-24 08:00 PRESENT
1000 IN 24-Apr-24 08:00 PRESENT
1002 OUT 24-Apr-24 17:00 PRESENT

Table MASTERID2

ID2 NAMEID2 POSITION
1000 JACK STAFF
1001 ROY OPERATOR
1002 KEN STAFF
1003 REY OPERATOR

Table PERIOD

PERIODNAME STARTDATE ENDDATE
FIRST 22-Apr-24 25-Apr-24
SECOND 22-May-24 25-May-24

DESIRED RESULT ALL

but I want to base it on each period

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

I think I would build the list by some fancy looping, but you can get close with SQL.

First create a table or a query that will return 10 numbers named TEN:

SELECT DISTINCT [Id] Mod 10 AS Factor
FROM MSysObjects
WHERE MSysObjects.Id > 0

and an INOUT table having one field INOUT and two records:

IN  
OUT

Next, create a UNION query, ALLABSEN:

SELECT 
    ID2, INOUT, DATEABSEN, [TIME], STATUS
FROM 
    ABSEN
UNION 
SELECT 
    ID2, INOUT, DATEABSEN, [TIME], STATUS
FROM 
    HELPERABSEN

and a Cartesian query, ALLDATES, to generate all dates:

SELECT 
    PERIOD.PERIODNAME, [Factor]+[STARTDATE] AS [DATE]
FROM 
    PERIOD, 
    TEN
WHERE 
    [Factor]+[STARTDATE] Between [STARTDATE] And [ENDDATE]
ORDER BY 
    [Factor]+[STARTDATE]

and yet a Cartesian query, ALLID2DATES, to return all possible entries:

SELECT 
    MASTERID2.ID2, MASTERID2.NAMEID2, INOUT.INOUT, ALLDATES.Date
FROM 
    MASTERID2, 
    ALLDATES, 
    INOUT
WHERE
    MASTERID2.POSITION = 'STAFF'
ORDER BY 
    ALLDATES.Date, MASTERID2.ID2, INOUT.INOUT;

Finally, you can assemble the output query, ID2ALLABSEN:

SELECT 
    ALLID2DATES.ID2, ALLID2DATES.NAMEID2, ALLID2DATES.INOUT, ALLID2DATES.DATE, ALLABSEN.TIME, ALLABSEN.STATUS
FROM 
    ALLID2DATES 
LEFT JOIN 
    ALLABSEN 
    ON (ALLID2DATES.DATE = ALLABSEN.DATEABSEN) AND (ALLID2DATES.INOUT = ALLABSEN.INOUT) AND (ALLID2DATES.ID2 = ALLABSEN.ID2)
ORDER BY 
    ALLID2DATES.DATE, ALLID2DATES.ID2, ALLID2DATES.INOUT, [DATE]+[ALLABSEN].[TIME]

Output:

enter image description here

7

Did you try altering values of GetStockSearching function in the ABSENservice class that includes a startDate and endDate paramater?

something like this :

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

Try adding two params startDate and endDate, which are both of type Date, they will be used to filter the ABSEN tables DATEABSEN column using the BETWEEN operator in SQL query.

To use this updated func, call it from Form1_Load event handler and pass in the desired start and end date as arguments.

2

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật