ค้นหาระหว่างวันที่ในฟอร์มครับ
กระทู้เก่าบอร์ด อ.Yeadram

 6,382   14
URL.หัวข้อ / URL
ค้นหาระหว่างวันที่ในฟอร์มครับ

ในฟอร์มค้นหาครับ ฟิลด์ชื่อ HavestDate ชนิด Date ครับ
ผมจะค้นหาจากฟิลด์นี้ ระหว่างวันที่.......ถึงวันที่.......

ตอนนี้ที่ทำได้คือค้นได้เฉพาะวันที่กำหนดเท่านั้นครับ ตอนนี้ สร้าง text box ไว้ 2 ตัวแล้วครับ คือ txtFirstDate , txtLastDate ขอโค้ดหน่อยครับ หรือแนวทาง ขอบคุณครับ

14 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R13309
RecordSource =
"Select ...
From ...
Where HavestDate Between #" & format(txtDateFrom,"yyyy/mm/dd") & "# And #" & Format(txtDateTo,"yyyy/mm/dd") & "#"
2 @R13311
Me.RecordSource = "select * from SearchAgricultur where HavestDate Between #" & Format(txtStartDate, "dd/mm/yyyy") & "# And #" & Format(txtEndDate, "dd/mm/yyyy") & "#"
Me.Requery

ผลคือค้นหาไม่เจอเลยครับ ไม่ทราบว่าผมทำถูกรึปล่าว debug ดูก็ได้ค่าวันที่ตามที่ป้อนครับ
3 @R13312
เปลี่ยนฟอร์แมตหาไปเรื่อยๆ ครับ ผมเคยเจอปัญหานี้หลายครั้ง แต่ยังสรุปไม่ได้ซักทีว่า ฟอร์แมตไหนกันแน่ที่ชัวร์ที่สุด ผมว่า vba กับ sql มันอ่านค่าต่างกัน

#" & Format(txtEndDate, "MM-dd-yyyy") & "#    ' แบบสากล(มั้ง) เอาเดือนขึ้นก่อน
#" & cdate(txtEndDate) & "#   ' แบบให้ vba ช่วยบังคับรูปแบบให้
cdate('" & txtEndDate & "')      ' แบบส่งค่าให้ SQL เอาไปจัดการรูปแบบเอง (ไม่ต้องใช้ #)
4 @R13315
Me.RecordSource = "select * from SearchAgricultur where AgriculturType like '*" & cbAgriculturType & "*' AND PlantName like '*" & cbPlantName & "*' AND FarmerId like '*" & txtFarmerId & "*' AND Province like '*" & cbProvinceSearch & "*' AND Amphur like '*" & cbAmphurSearch & "*' AND Tambon like '*" & cbTambonSearch & "*'"
Me.Requery

ได้แล้วครับตามวิธีสุดท้ายครับ ว่าแต่ผมจะเอาไปรวมกับข้างบนยังไงครับ ลองทดสอบของมันโดดๆ ทำงานได้ดีครับ รบกวนอีกทีครับ

HavestDate Between cdate('" & txtStartDate & "') And cdate('" & txtEndDate & "')
5 @R13322
ตัวอื่นอาจไม่เป็นปัญหานะครับ เพราะชนิดข้อมูลเป็น string
แต่ตัวที่เป็น Date นี่อาจต้องเช็ค ชนิดข้อมูลก่อนนะครับ ไม่งั้นจะไป err ที่ระดับ SQL (ไม่ได้ error ที่ระดับ VBA)

Dim Sq as string
sq ="select * from SearchAgricultur where AgriculturType like '*" & cbAgriculturType & "*' AND PlantName like '*" & cbPlantName & "*' AND FarmerId like '*" & txtFarmerId & "*' AND Province like '*" & cbProvinceSearch & "*' AND Amphur like '*" & cbAmphurSearch & "*' AND Tambon like '*" & cbTambonSearch & "*'"

on error resume next
dim TestTypeDate as date
TestTypeDate=cdate(txtstartdate)
TestTypeDate=cdate(txtenddate)
if err<>13 then
sq = sq & " AND HavestDate Between cdate('" & txtStartDate & "') And cdate('" & txtEndDate & "')"
end if
on error goto 0

me.recordsource = sq
me.requery
6 @R13329
อ.yeadram ครับ
like " & Type & " เป็น string, '" & Type & "' ก็เป็น string, แล้ว '*" & Type & "*' หมายถึงอะไรครับ?
7 @R13333
ยกตัวอย่างมาใช้ในคำถามนีไม่ดีเลย คำว่า type มันเป็นคำสงวน คุณนำมันมาตั้งเป็นชื่อตัวแปร หรือชื่อคอนโทรล หรือชื่อฟิลด์หรือเปล่าครับเนี่ย เปลี่ยนด่วนเลย เดี๋ยวก็เกิด bug กันระเนระนาด

สำหรับคำถาม ชุดหลังสุด ที่มีเครื่องหมายดอกจันทน์ อยู่ด้วยน่ะ คือเราใช้ wildcard เข้ามาช่วยครับ ใน VBA และ sql ระดับ access ใช้ * เพื่อแทน อักขระใดๆ ก็ได้ กี่ตัวก็ได้

แต่ถ้าเป็น sql ในระดับฐานข้อมูลที่ใหญ่กว่านี้จะใช้เครื่องหมาย %

เช่นสมมติว่าค่าตัวแปรของคุณ (ค่าของ type ในคำถามนั่นแหละ) มันได้มาคือ กรกช
ดังนั้นเมื่อมันต่อสายอักขระแล้ว ก็จะเป็น Like '*กรกช*'
หมายความว่าเราสั่งให้มันหา สายอักขระว่าอะไรก็ได้ ที่มีคำว่า กรกช อยู่ในนั้น
คือ ด้านหน้าของ กรกช จะมีอักขระใดๆ มีจำนวนเท่าไหร่ก็ได้
และด้านหลังของ กรกช จะมีอักขระใดๆ มีจำนวนเท่าไหร่ก็ได้

แต่ถ้าคุณต่อสายอักขระโดยไม่ใช้ wildcard ช่วย ก็อย่างเช่น
like 'กรกช'
นั่นหมายความว่า มันจะมองหาเฉพาะ ฟิลด์ใดๆ ที่มีค่าเท่ากับ กรกช เท่านั้น จะมีอักขระน้อยกว่านี้หรือมากกว่านี้ไม่ได้
8 @R13335
อ.yeadram ครับ โค้ดที่ให้มา ผมต้องเอาไปใส่ใน General มั้ยครับ
9 @R13336
อันนี้ ของเก่านะครับ

Private Sub CmdSearchBotton_Click()
On Error Resume Next
If Me.txtFarmerId = "" Then txtFarmerId = "*"
If Me.cbPlantName = "" Then cbPlantName = "*"
Me.RecordSource = "select * from SearchAgricultur where HavestDate Between cdate('" & txtStartDate & "') And cdate('" & txtEndDate & "')"
Me.Requery
End Sub

หรือว่าเอามาแทน ตัวนี้ครับ
10 @R13338
จากโค้ดที่ อ.yeadram ให้มาผมเอาไปใส่ใน CmdSearchBotton
ค้นหาจากวันที่ไม่มีปัญหาครับ
แต่ถ้าค้นหาจาก Combo อื่น จะขึ้นอย่างในรูปคับ


Private Sub CmdSearchBotton_Click()
On Error Resume Next
Dim Sq As String
Sq = "select * from SearchAllAgricultur where AgriculturType like '*" & cbAgriculturType & "*' AND PlantName like '*" & cbPlantName & "*' AND FarmerId like '*" & txtFarmerId & "*' AND Province like '*" & cbProvinceSearch & "*' AND Amphur like '*" & cbAmphurSearch & "*' AND Tambon like '*" & cbTambonSearch & "*'"

On Error Resume Next
Dim TestTypeDate As Date
TestTypeDate = CDate(txtStartDate)
TestTypeDate = CDate(txtEndDate)
If Err <> 13 Then
Sq = Sq & "AND HavestDate Between CDate('" & txtStartDate & "') And CDate('" & txtEndDate & "')"
End If

Me.RecordSource = Sq
Me.Requery
End Sub

11 @R13339
จาก R13338
บันทัดที่ error
Me.RecordSource = Sq

จาก R13338 นะครับ ปัญหาคือ
1.เลือก ระหว่างวันที่-ถึงวันที่+คอมโบอื่นๆ หรือพิมพ์ข้อมความจาก textbox ร่วมด้วย จะเจอผลลัพธ์ที่ต้องการครับ
2.ถ้าระบุ ระหว่างวันที่-ถึงวันที่ เพียงอย่างเดียว ก็ไม่มีปัญหา
3.ปัญหาตรงนี้ครับ ถ้าผมไม่เลือก ระหว่างวันที่-วันที่ แต่เลือกที่ คอมโบอื่นๆ มันจะ error เหมือนภาพที่ R13338 ครับ ยังแก้ไขไม่ได้เลยครับ


12 @R13340
เพิ่มการตรวจเช็คเข้าไปอีกครับ ว่ามีข้อมูลใน txtStartDate หรือไม่ ถ้าไม่มีข้อมูล (คือผู้ใช้ไม่ได้กรอก) ให้ข้ามการเพิ่ม เงื่อนไข date ไปครับ
13 @R22589
ทำฐานข้อมูลนักศึกษาค่ะ ต้องการให้ค้นหาข้อมูลจากช่วงวันเกิด เช่นหาข้อมูลนักเรียนทั้งหมดที่เกิดในช่วง 01/01/2539 ถึง 31/12/2539 ตอนนี้สร้างเท็กบอกซ์รอแล้ว 2 อัน คือ text9 และ text11 ลองทำปุ่มค้นหาแล้วทำตามโค้ดด้านบนแล้วค่ะ แต่ยังไม่ได้เลย ทำไงดีค่ะ
14 @R22592
ลองดาวน์โหลดไฟล์ตัวอย่างไปศึกษาดูครับ
ที่นี่
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2591s