Private Sub Form_Load()
Dim strDate As String
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
' กำหนดค่าเริ่มต้น
dtpDateBegin.Value = Format(Now(), "dd/mm/yyyy")
dtpDateEnd.Value = Format(Now(), "dd/mm/yyyy")
' =================================================
' อันที่จริงในส่วนนี้นำไปไว้ในฟังค์ชั่น GetSystemDate ไปเลยก็ได้น่ะครับ ... แต่ผมอยากเขียนแบบแยกไว้ให้ดูมากกว่าน่ะ
' ตรวจสอบรูปแบบของวันที่
strDate = GetSystemDate
' ปรับรูปแบบเพื่อใช้ในการตรวจสอบ เช่น strDate = "dd/mm/yyyy"
' ทำการอ่านค่าจากตัวแรกของ strDate ไปจนกว่าจะเจอเครื่องหมาย "/" เช่น "dd/" --> มาจาก InStr(1, strDate,"/")
' จากนั้นให้ลดค่าความยาวลงอีก 1 ก็จะได้ dd (ตัด / ออกนั่นเอง) --> Mid$(strDate, 1, InStr(1, strDate,"/") - 1)
' แล้วแปลงให้กลายเป็นอักษรตัวเล็ก (LCase) เพื่อไม่ให้เกิดความยุ่งยากในการทดสอบ
Select Case LCase$(Mid$(strDate, 1, InStr(1, strDate, "/") - 1))
' แสดงว่าเป็นแบบ d/mm/yyyy หรือ dd/mm/yyyy
Case "d", "dd"
blnDate = 1
' แสดงว่าเป็นแบบ m/d/yyyy หรือ mm/dd/yyyy
Case "m", "mm"
blnDate = 2
End Select
' =================================================
End Sub
Private Sub cmdSearch_Click()
Dim sRow As Integer, sCol As Integer
Set Conn = New Connection
Set RS = New Recordset
' *************************************************************
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Member.mdb"
' *************************************************************
' ส่งค่า dtpDateBegin และ dtpDateEnd ไปจัดรูปแบบใหม่ใน GetFormatDate
SQLStmt = "SELECT * FROM tblMember WHERE DateRegistered BETWEEN " & _
"#" & GetFormatDate(dtpDateBegin.Value) & "#" & _
" AND " & _
"#" & GetFormatDate(dtpDateEnd.Value) & "#" & _
" ORDER BY [DateRegistered] ASC "
RS.CursorLocation = adUseClient
RS.Open SQLStmt, Conn, adOpenForwardOnly, adLockReadOnly, adCmdText
' กำหนดแบบ Run Time
' กำหนด Colume Header เพื่อแสดงชื่อฟิลด์
fg.FixedRows = 1
' ไม่ต้องมี Row Header ที่อยู่ทางด้านซ้าย
fg.FixedCols = 0
fg.SelectionMode = flexSelectionByRow
fg.AllowUserResizing = flexResizeColumns
If Not RS.EOF Then
fg.Rows = RS.RecordCount + 1
fg.Cols = RS.Fields.Count
For sRow = 0 To RS.Fields.Count - 1
fg.TextMatrix(0, sRow) = RS.Fields(sRow).Name
Next
sRow = 1
Do Until RS.EOF
For sCol = 0 To RS.Fields.Count - 1
If Not IsNull(RS.Fields(sCol).Value) Then
If IsDate(RS.Fields(sCol).Value) Then
fg.TextMatrix(sRow, sCol) = Format(CDate(RS.Fields(sCol).Value), "dd-mm-yyyy")
Else
fg.TextMatrix(sRow, sCol) = RS.Fields(sCol).Value
End If
End If
Next
' เลื่อนแถวของ FlexGrid ขึ้นอีก 1
sRow = sRow + 1
' เลื่อนตัวชี้ตำแหน่งข้อมูลขึ้นอีก ... รายการต่อไป
RS.MoveNext
' วนรอบจนกว่าจะหมดข้อมูล
Loop
' แจ้งรายการ
MsgBox "จำนวนรายชื่อสมาชิกทั้งสิ้น: " & sRow - 1 & " รายการ."
End If
RS.Close: Set RS = Nothing
End Sub
' เลือกรูปแบบวันที่ ที่ต้องนำไปใช้ในการค้นหา
' จากนั้นจะ Return ค่ากลับไปตามรูปแบบที่เราต้องนำไปใช้ในการค้นหา
Function GetFormatDate(sDate As Date) As Date
Select Case blnDate
' รูปแบบวันที่มาก่อน เช่น dd/mm/yyyy
Case 1
GetFormatDate = Left$(Format(sDate, "dd/mm/yyyy"), 2) & _
"/" & Mid$(Format(sDate, "dd/mm/yyyy"), 4, 2) & _
"/" & Right$(Format(sDate, "dd/mm/yyyy"), 4) - 543
' รูปแบบเดือนมาก่อน เช่น mm/dd/yyyy
Case 2
GetFormatDate = Left$(Format(sDate, "mm/dd/yyyy"), 2) & _
"/" & Mid$(Format(sDate, "mm/dd/yyyy"), 4, 2) & _
"/" & Right$(Format(sDate, "mm/dd/yyyy"), 4) - 543
End Select
End Function
|