กระทู้เก่าบอร์ด อ.Yeadram
6,662 14
URL.หัวข้อ /
URL
ค้นหาระหว่างวันที่ในฟอร์มครับ
ในฟอร์มค้นหาครับ ฟิลด์ชื่อ HavestDate ชนิด Date ครับ
ผมจะค้นหาจากฟิลด์นี้ ระหว่างวันที่.......ถึงวันที่.......
ตอนนี้ที่ทำได้คือค้นได้เฉพาะวันที่กำหนดเท่านั้นครับ ตอนนี้ สร้าง text box ไว้ 2 ตัวแล้วครับ คือ txtFirstDate , txtLastDate ขอโค้ดหน่อยครับ หรือแนวทาง ขอบคุณครับ
ผมจะค้นหาจากฟิลด์นี้ ระหว่างวันที่.......ถึงวันที่.......
ตอนนี้ที่ทำได้คือค้นได้เฉพาะวันที่กำหนดเท่านั้นครับ ตอนนี้ สร้าง text box ไว้ 2 ตัวแล้วครับ คือ txtFirstDate , txtLastDate ขอโค้ดหน่อยครับ หรือแนวทาง ขอบคุณครับ
14 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R13311
Me.RecordSource = "select * from SearchAgricultur where HavestDate Between #" & Format(txtStartDate, "dd/mm/yyyy") & "# And #" & Format(txtEndDate, "dd/mm/yyyy") & "#"
Me.Requery
ผลคือค้นหาไม่เจอเลยครับ ไม่ทราบว่าผมทำถูกรึปล่าว debug ดูก็ได้ค่าวันที่ตามที่ป้อนครับ
Me.Requery
ผลคือค้นหาไม่เจอเลยครับ ไม่ทราบว่าผมทำถูกรึปล่าว debug ดูก็ได้ค่าวันที่ตามที่ป้อนครับ
3 @R13312
เปลี่ยนฟอร์แมตหาไปเรื่อยๆ ครับ ผมเคยเจอปัญหานี้หลายครั้ง แต่ยังสรุปไม่ได้ซักทีว่า ฟอร์แมตไหนกันแน่ที่ชัวร์ที่สุด ผมว่า vba กับ sql มันอ่านค่าต่างกัน
#" & Format(txtEndDate, "MM-dd-yyyy") & "# ' แบบสากล(มั้ง) เอาเดือนขึ้นก่อน
#" & cdate(txtEndDate) & "# ' แบบให้ vba ช่วยบังคับรูปแบบให้
cdate('" & txtEndDate & "') ' แบบส่งค่าให้ 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 & "')
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
แต่ตัวที่เป็น 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 & "*' หมายถึงอะไรครับ?
like " & Type & " เป็น string, '" & Type & "' ก็เป็น string, แล้ว '*" & Type & "*' หมายถึงอะไรครับ?
7 @R13333
ยกตัวอย่างมาใช้ในคำถามนีไม่ดีเลย คำว่า type มันเป็นคำสงวน คุณนำมันมาตั้งเป็นชื่อตัวแปร หรือชื่อคอนโทรล หรือชื่อฟิลด์หรือเปล่าครับเนี่ย เปลี่ยนด่วนเลย เดี๋ยวก็เกิด bug กันระเนระนาด
สำหรับคำถาม ชุดหลังสุด ที่มีเครื่องหมายดอกจันทน์ อยู่ด้วยน่ะ คือเราใช้ wildcard เข้ามาช่วยครับ ใน VBA และ sql ระดับ access ใช้ * เพื่อแทน อักขระใดๆ ก็ได้ กี่ตัวก็ได้
แต่ถ้าเป็น sql ในระดับฐานข้อมูลที่ใหญ่กว่านี้จะใช้เครื่องหมาย %
เช่นสมมติว่าค่าตัวแปรของคุณ (ค่าของ type ในคำถามนั่นแหละ) มันได้มาคือ กรกช
ดังนั้นเมื่อมันต่อสายอักขระแล้ว ก็จะเป็น Like '*กรกช*'
หมายความว่าเราสั่งให้มันหา สายอักขระว่าอะไรก็ได้ ที่มีคำว่า กรกช อยู่ในนั้น
คือ ด้านหน้าของ กรกช จะมีอักขระใดๆ มีจำนวนเท่าไหร่ก็ได้
และด้านหลังของ กรกช จะมีอักขระใดๆ มีจำนวนเท่าไหร่ก็ได้
แต่ถ้าคุณต่อสายอักขระโดยไม่ใช้ wildcard ช่วย ก็อย่างเช่น
like 'กรกช'
นั่นหมายความว่า มันจะมองหาเฉพาะ ฟิลด์ใดๆ ที่มีค่าเท่ากับ กรกช เท่านั้น จะมีอักขระน้อยกว่านี้หรือมากกว่านี้ไม่ได้
สำหรับคำถาม ชุดหลังสุด ที่มีเครื่องหมายดอกจันทน์ อยู่ด้วยน่ะ คือเราใช้ 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
หรือว่าเอามาแทน ตัวนี้ครับ
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
ค้นหาจากวันที่ไม่มีปัญหาครับ
แต่ถ้าค้นหาจาก 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 ครับ ยังแก้ไขไม่ได้เลยครับ
บันทัดที่ 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
ลองดาวน์โหลดไฟล์ตัวอย่างไปศึกษาดูครับ
ที่นี่
ที่นี่
Time: 0.8487s
"Select ...
From ...
Where HavestDate Between #" & format(txtDateFrom,"yyyy/mm/dd") & "# And #" & Format(txtDateTo,"yyyy/mm/dd") & "#"