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 |
