สอบถามเกี่ยวกับการเลือกรีพอตโดยวันที่คับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,431   8
URL.หัวข้อ / URL
สอบถามเกี่ยวกับการเลือกรีพอตโดยวันที่คับ

stWhere = stWhere & " AND ([DATE start]and [date end] BETWEEN forms!frmreport.tstart and forms!frmreport.tend)"


ผมเปรียบเทียบระหว่าง Date start และ Date End ปัญหาอยู่ที่ว่าเวลาเรียกรีพอตถ้า Date end ผมปล่อยว่างไว้รีพอต จะไม่โชว์ งานนี้ คับ


พอมีวิธีแก้ไขไหม ครับ

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

1 @R07961
อืมห... เขียนแบบนี้ไม่เคยเห็นเหมือนกัน

ว่าแต่ถ้าปล่อยว่างไว้ แล้วจะโปรแกรมมันเข้าใจว่าอย่างไรหละครับ...
ไม่บอกมันมันจะรู้หรือครับ ... มันไม่เอาอะไรออกมาให้ก็ถูกแล้ว

ถ้าจะให้มันเอาออกมาให้ก็ต้องบอกมันไปครับว่า ถ้าค่าดังกล่าวว่างจะให้มันใส่ค่าอะไรแทน ใช้สูตร nz() ได้นะครับ
2 @R07963
คือใน Table ช่อง Date end ผมทิ้งโล่งไว้ครับประมาณ ว่า ผมต้องการ สรุป รีพอต จากวันที่ 1-5 แต่มีงานนึงยังไม่จบ ผมเลยไม่ใส่ Date end มันจึงโชว์แต่งานที่มี Date end ครับ

ส่วนวิธีใช้สูตรนี่ทำยังไง คับ รบกวน ชี้แนะด้วย คับ
3 @R07966
dim dtEnd
dtEnd = nz(forms!frmreport.tend,0)

if dtEnd <>0 then
stWhere = stWhere & " AND ([DATE start]and [date end] BETWEEN forms!frmreport.tstart and forms!frmreport.tend)"
else
stWhere = stWhere & " AND ([DATE start] >= forms!frmreport.tstart)"
end if
4 @R07991
ขอบคุณ คับ จะลองนำไปใช้ดูครับ ถ้าได้จะแจ้งผลให้ทราบ ครับ
5 @R07993
ยังไม่ได้ คับ ถ้า ใน Table ช่อง Date end ผมทิ้งโล่งไว้ รีพอต ยังไม่โชว งาน นั้น เหมือนเดิม คับ
6 @R07994
Sub cmdOpen_click()
Dim dtEnd
dtEnd = Nz(Forms!frmreport.Tend, 0)
Dim stWhere As String
stWhere = "[station] Like '*'"

If Two <> "" Then stWhere = stWhere & " AND [work num] like '" & Two & "'"
If cbstation <> "" Then stWhere = stWhere & " AND [station] like '" & cbstation & "'"
If cbeq <> "" Then stWhere = stWhere & " AND [equipment] like '" & cbeq & "'"
If cbno <> "" Then stWhere = stWhere & " AND [eq no] like '" & cbno & "'"
If cbfail <> "" Then stWhere = stWhere & " AND [failure detail] like '" & cbfail & "'"

If dtEnd <> 0 Then
stWhere = stWhere & " AND ([DATE start]and [date end] BETWEEN forms!frmreport.tstart and forms!frmreport.tend)"
Else
stWhere = stWhere & " AND ([DATE start] >= forms!frmreport.tstart)"
End If


DoCmd.OpenReport "Work order Query", acViewPreview, , stWhere
End Sub


ผมไม่แน่ใจว่าผมนำโค้ดที่อาจารย์ให้มาไปใส่ถูกจุดหรือเปล่าครับ
7 @R07997
อ้อ ขออภัยครับ ผมอ่านไม่ถี่ถ้วนเอง ตอนแรกเข้าใจว่า ใน textbox ว่าง
ที่ไหนได้คือในตารางว่างใช่ไหมครับ ถ้าอย่างนั้น เราก็ไม่ต้องใช้ประโยชน์อะไรจาก วันที่สิ้นสุดที่ระบุมาเลยครับ
stWhere = stWhere & " AND ([DATE start] BETWEEN forms!frmreport.tstart and forms!frmreport.tend)"

คือว่า ไม่ต้องเอาฟิลด์ [date end] เข้ามาเกี่ยวข้องกับเงื่อนไขเลยครับ
การเปรียบเทียบด้วย Between ในงานของคุณ ใช้ได้กับฟิลด์ วันเริ่มต้นเท่านั้นครับ วันที่สิ้นสุดใช้ Between ไม่ได้ ต้องเป็นเครื่องหมาย > = เท่านั้นครับ


...หรือ.....
ถ้าอยากเกี่ยวให้ได้ ก็ต้องแก้สายอักขระ ก่อนหน้าจะเข้า where แล้วครับ เช่น
Dim stWhere As String
stWhere = = "select f1, f2, f3.... , nz([date end],date()) as DateEnd from table1 where station like '*'"

If Two <> "" Then stWhere = stWhere & " AND [work num] like '" & Two & "'"
If cbstation <> "" Then stWhere = stWhere & " AND [station] like '" & cbstation & "'"
If cbeq <> "" Then stWhere = stWhere & " AND [equipment] like '" & cbeq & "'"
If cbno <> "" Then stWhere = stWhere & " AND [eq no] like '" & cbno & "'"
If cbfail <> "" Then stWhere = stWhere & " AND [failure detail] like '" & cbfail & "'"

stWhere = stWhere & " AND ([DATE start] BETWEEN forms!frmreport.tstart and forms!frmreport.tend) AND (DateEnd > = forms!frmreport.tstart)"


' สั่งเปลี่ยน source ของรายงานโดยต้องเปิดรายงานมาในมุมมองออกแบบเสียก่อน
DoCmd.OpenReport "Work order Query", acViewDesign
reports("Work order Query").recordsource = stWhere
' สั่งเซฟรายงานที่ปรับเปลี่ยนการออกแบบเสร็จแล้ว
docmd save
' แล้วค่อยเปิดรายงาน ทีนี้ไม่ต้องใส่เงื่อนไขให้มันอีกแล้วล่ะ เพราะว่าใส่ไปก่อนหน้านี้แล้ว
DoCmd.OpenReport "Work order Query", acViewPreview

ลองทดสอบ และปรับแก้ดูครับ ผมเขียนสดไม่ได้ลอง ไม่รู้พิมพ์ตกไปบ้างหรือเปล่า เอาเป็นว่าพอให้เห็นแนวทางครับ โดยเฉพาะจุดที่ผมเน้น หนาแดง นั่นคือการประยุกต์เพิ่มเติมนิดหน่อยครับ
8 @R08019

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

Sub cmdOpen_click()
Dim stWhere As String
stWhere = "[station] Like '*'"

If Two <> "" Then stWhere = stWhere & " AND [work num] like '" & Two & "'"
If cbstation <> "" Then stWhere = stWhere & " AND [station] like '" & cbstation & "'"
If cbeq <> "" Then stWhere = stWhere & " AND [equipment] like '" & cbeq & "'"
If cbno <> "" Then stWhere = stWhere & " AND [eq no] like '" & cbno & "'"
If cbfail <> "" Then stWhere = stWhere & " AND [failure detail] like '" & cbfail & "'"

If Tstart <> "" Then
   If Tend = "" Or Tend < Tstart Then
      Tend.SetFocus
      Exit Sub
   End If
stWhere = stWhere & " AND ([DATE start]and [date end] BETWEEN forms!frmreport.tstart and forms!frmreport.tend)"
              
ElseIf Tend <> "" Then
      Tstart.SetFocus
      Exit Sub
End If

DoCmd.OpenReport "Work order Query", acViewPreview, , stWhere
End Sub
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2468s