มีวิธีสร้าง Form ที่ค้นหาข้อมูลด้วยเดือนเเละปีไหมครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

11 พ.ย. 63 , 21:24:00
อ่าน 153 ครั้ง

SSukHaveq

  • สมาชิกไท.Access
  • กระทู้: 11

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

ได้โจทย์มาจากพี่ๆให้สร้างฟอร์มที่สามารถ เเสดงข้อมูลของสินค้าที่นำเข้ามาเเละสินค้าที่ถูกนำออกไปครับ
โดยในฟอร์มนี้ต้องสามารถหาข้อมูลโดย ดูจากเดือนเเละปีเเละสามารถดูเป็นช่วงเลาได้ เช่น อยากทราบว่าระหว่างเดือน 1 ถึง เดือน  3 มีสินค้าเข้า-ออกไปเเล้วกี่ชิ้น



รูปเเบบฟอร์มที่ผมสร้างเป็นเเบบนี้ครับ



เมื่อใส่ช่วงของเดือนเเละปีที่ต้องการค้นหา เเละ กด 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 นะครับ

ปล.ผมได้ทำการอัปโหลดไฟล์ตัวอย่างไว้ด้วยครับ

 

12 พ.ย. 63 , 16:48:54
ตอบกลับ #1

สันติสุข

แนวคิดคือ ผมว่ามองเงื่อนไขของช่วงเวลาที่จะไม่เลือก แล้วใส่ด้วย NOT ครอบเงื่อนไข จะทำให้แก้ปัญหาตรงนี้ได้ง่ายกว่า

ช่วงเวลาที่จะไม่เลือก คือ (ปี = ปีเริ่มต้นที่เลือก และ เดือน < เดือนเริ่มต้นที่เลือก) หรือ (ปี = ปีสุดท้ายที่เลือก และ เดือน > เดือนสุดท้ายที่เลือก) หรือ (ปี < ปีเริ่มต้นที่เลือก) หรือ (ปี > ปีสุดท้ายที่เลือก) เพื่อให้ง่าย ขอเขียนเป็น (P) OR (Q) OR (R) OR (S) แล้วกัน

ดังนั้น ช่วงระยะเวลาที่เลือก (strCriteriaM) ก็คือ NOT ((P) OR (Q) OR (R) OR (S)) นั่นเอง

ลองไปเขียนเป็น expression ดูนะครับ
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

13 พ.ย. 63 , 06:40:37
ตอบกลับ #2

TTT

ก่อนอื่น เท่าที่ดู ผมว่าถ้าจะเทียบค่าต้องเขียนอ้างให้ตัวเลข โดยการใช้ มากว่า น้อยกว่า เทียบ String มันจะเพียนไปจากที่ตั้งใจไว้ และอีกอย่าง ผมว่าลองใช้ Between มันจะดูง่ายกว่าป่าวครับ

strCriteriaM = "([Month] between " & Me.FROMmonthtxt.Value & " and " & Me.TOmonthtxt.Value & ") and ([Year] between " & Me.FROMyeartxt.Value & " and " & Me.TOyeartxt.Value & ")"

ไม่รู้ว่าได้ตามต้องการป่าวนะครับ เป็นไอเดีย
ฐานข้อมูลเป็นเรื่องใกล้ตัว ใครๆก็ทำฐานข้อมูลเองได้นะครับhttp://www.youtube.com/c/AccessCreator link
 
โพสต์นี้ได้รับคำขอบคุณจาก: SSukHaveq

15 พ.ย. 63 , 11:48:55
ตอบกลับ #3

SSukHaveq

  • สมาชิกไท.Access
  • กระทู้: 11

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

สามารถใช้กับการค้นหาภายในปีได้ตามต้องการครับ ขอบคุณสำหรับคำเเนะนำครับ

เเต่ตอนนี้กำลังหาทางให้สามารถ 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

ใช้โค้ดตามนี้เเต่ยังไม่สามารถเเสดงข้อมูลข้ามปีได้ครับ พอมีคำเเนะนำในการเขียนโค้ดไหมครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย