บอร์ดเรียนรู้ Access สำหรับคนไทย
Thai Access Webboard => ห้อง MS Access => ข้อความที่เริ่มโดย: SSukHaveq ที่ 11 พ.ย. 63 , 21:24:00
-
ได้โจทย์มาจากพี่ๆให้สร้างฟอร์มที่สามารถ เเสดงข้อมูลของสินค้าที่นำเข้ามาเเละสินค้าที่ถูกนำออกไปครับ
โดยในฟอร์มนี้ต้องสามารถหาข้อมูลโดย ดูจากเดือนเเละปีเเละสามารถดูเป็นช่วงเลาได้ เช่น อยากทราบว่าระหว่างเดือน 1 ถึง เดือน 3 มีสินค้าเข้า-ออกไปเเล้วกี่ชิ้น
(https://www.thai-access.com/tiupld/images/qjmybw-0d814b.png)
รูปเเบบฟอร์มที่ผมสร้างเป็นเเบบนี้ครับ
(https://www.thai-access.com/tiupld/images/qjmyd4-5b85b2.png)
เมื่อใส่ช่วงของเดือนเเละปีที่ต้องการค้นหา เเละ กด search เพื่อค้นหา record
คำสั่งปุ่ม Refresh
Private Sub MAYrebut_Click()
Dim strSQL_REFRESH As String
strSQL_REFRESH = "SELECT * from QueryRECORD order by [Month] ASC , [Year] ASC "
Me.FROMmonthtxt.Value = Null
Me.TOmonthtxt.Value = Null
Me.FROMyeartxt.Value = Null
Me.TOyeartxt.Value = Null
Me.RecordSource = strSQL_REFRESH
End Sub
คำสั่งปุ่ม Search
Private Sub MAYrecordbut_Click()
Dim strCriteriaM As String
Dim task As String
Me.Refresh
'ตรวจสอบว่าผู้ใช้ช่วงเดือนที่ต้องการค้นหาหรือไม่
If IsNull(Me.FROMmonthtxt) Or IsNull(Me.TOmonthtxt) Then
MsgBox " Please enter the month range", vbInformation, "Month Range Required"
Me.SetFocus
'ตรวจสอบว่าผู้ใช้ช่วงปีที่ต้องการค้นหาหรือไม่
ElseIf IsNull(Me.FROMyeartxt) Or IsNull(Me.TOyeartxt) Then
MsgBox " Please enter the year range", vbInformation, "Year Range Required"
Else
strCriteriaM = "( [Month] >= '" & Me.FROMmonthtxt.Value & "' and [Month] <= '" & Me.TOmonthtxt.Value & "' and [Year] >= '" & Me.FROMyeartxt.Value & "' and [Year] <= '" & Me.TOyeartxt.Value & "')"
task = " SELECT * From QueryRECORD where " & strCriteriaM & " order by [Month] ASC , [Year] ASC "
DoCmd.ApplyFilter task
Me.Requery
End If
End Sub
ตอนนี้ติดปัญหาคือ
1. ไม่สามารถเเสดงได้เมื่อเวลาค้นหาข้อมูลข้ามปี
2. พี่ต้องการเเบบว่า ถ้าให้ค้นหาระหว่างเดือนเก้าถึงเดือนสิบ เเม้ว่าเดือนเก้าจะไม่มีบันทึกข้อมูลเลย เเต่ข้อมูลของเดือนสิบที่มีบันท฿กต้องปรากฏบนฟอร์มเเต่ผมไม่สามารถเขียน vba ให้มันเเสดงได้เลยครับ
ผมลองเเก้ไขเพิ่มเติมเเล้วเเต่ไม่สามารถเเก้ไขปัญหาข้างต้นได้ :dizzy: :dizzy:
จึงอยากขอคำเเนะนำในการเขียนโค้ด VBA หรือ การเเก้ไขปรับปรุง form,table,Query นะครับ
ปล.ผมได้ทำการอัปโหลดไฟล์ตัวอย่างไว้ด้วยครับ
-
แนวคิดคือ ผมว่ามองเงื่อนไขของช่วงเวลาที่จะไม่เลือก แล้วใส่ด้วย NOT ครอบเงื่อนไข จะทำให้แก้ปัญหาตรงนี้ได้ง่ายกว่า
ช่วงเวลาที่จะไม่เลือก คือ (ปี = ปีเริ่มต้นที่เลือก และ เดือน < เดือนเริ่มต้นที่เลือก) หรือ (ปี = ปีสุดท้ายที่เลือก และ เดือน > เดือนสุดท้ายที่เลือก) หรือ (ปี < ปีเริ่มต้นที่เลือก) หรือ (ปี > ปีสุดท้ายที่เลือก) เพื่อให้ง่าย ขอเขียนเป็น (P) OR (Q) OR (R) OR (S) แล้วกัน
ดังนั้น ช่วงระยะเวลาที่เลือก (strCriteriaM) ก็คือ NOT ((P) OR (Q) OR (R) OR (S)) นั่นเอง
ลองไปเขียนเป็น expression ดูนะครับ
-
ก่อนอื่น เท่าที่ดู ผมว่าถ้าจะเทียบค่าต้องเขียนอ้างให้ตัวเลข โดยการใช้ มากว่า น้อยกว่า เทียบ String มันจะเพียนไปจากที่ตั้งใจไว้ และอีกอย่าง ผมว่าลองใช้ Between มันจะดูง่ายกว่าป่าวครับ
strCriteriaM = "([Month] between " & Me.FROMmonthtxt.Value & " and " & Me.TOmonthtxt.Value & ") and ([Year] between " & Me.FROMyeartxt.Value & " and " & Me.TOyeartxt.Value & ")"
ไม่รู้ว่าได้ตามต้องการป่าวนะครับ เป็นไอเดีย
-
สามารถใช้กับการค้นหาภายในปีได้ตามต้องการครับ ขอบคุณสำหรับคำเเนะนำครับ
เเต่ตอนนี้กำลังหาทางให้สามารถ filter ข้อมูลข้ามปีครับ
Private Sub MAYrecordbut_Click()
Dim strCriteriaM1 As String
Dim strCriteriaM2 As String
Dim strCriteriaMA As String
Dim strCriteriaMB As String
Dim task1 As String
Dim task2 As String
Me.Refresh
If IsNull(Me.FROMmonthtxt) Or IsNull(Me.TOmonthtxt) Then
MsgBox " Please enter the month range", vbInformation, "Month Range Required"
Me.SetFocus
ElseIf IsNull(Me.FROMyeartxt) Or IsNull(Me.TOyeartxt) Then
MsgBox " Please enter the year range", vbInformation, "Year Range Required"
End If
'ใช้ค้นหาข้อมูลภายในปีนั้นๆ เมื่อ Me.FROMyeartxt.Value = 2020 เเละ Me.TOyeartxt.Value = 2020
If Me.FROMyeartxt.Value = Me.TOyeartxt.Value Then
strCriteriaM1 = "([Month] between " & Me.FROMmonthtxt.Value & " and " & Me.TOmonthtxt.Value & ") and ([Year] between " & Me.FROMyeartxt.Value & " and " & Me.TOyeartxt.Value & ")"
task1 = " SELECT * From QueryRECORD where " & strCriteriaM1 & " order by [Month] ASC , [Year] ASC "
DoCmd.ApplyFilter task1
Me.Requery
'ใช้ค้นหาข้อมูลข้ามปี เมื่อ Me.FROMyeartxt.Value = 2020 เเละ Me.TOyeartxt.Value = 2021
ElseIf Me.FROMyeartxt.Value < Me.TOyeartxt.Value Then
'ให้หาข้อมูลจาก Query ภายในปี 2020 จากเดือนที่ต้องการใน textbox ชื่อ FROMmonthtxt จนถึงเดือน 12
strCriteriaMA = " ([Month] between " & Me.FROMmonthtxt.Value & " and " & 12 & ") and ([Year] = " & Me.FROMyeartxt.Value & ") "
'ให้หาข้อมูลจาก Query ภายในปี 2021 จากเดือน 1 จนถึงเดือรที่ต้องการใน textbox ชื่อ TOmonthtxt
strCriteriaMB = " ([Month] between " & 1 & " and " & Me.TOmonthtxt.Value & ") and ([Year] = " & Me.TOyeartxt.Value & ") "
'รวมคำสั่ง
strCriteriaM2 = " '" & strCriteriaMA & "' And '" & strCriteriaMB & "' "
task2 = " SELECT * From QueryRECORD where " & strCriteriaM2 & " order by [Month] ASC , [Year] ASC "
DoCmd.ApplyFilter task2
Me.Requery
End If
End Sub
ใช้โค้ดตามนี้เเต่ยังไม่สามารถเเสดงข้อมูลข้ามปีได้ครับ พอมีคำเเนะนำในการเขียนโค้ดไหมครับ