กระทู้เก่าบอร์ด อ.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 ผมปล่อยว่างไว้รีพอต จะไม่โชว์ งานนี้ คับ
พอมีวิธีแก้ไขไหม ครับ
ผมเปรียบเทียบระหว่าง Date start และ Date End ปัญหาอยู่ที่ว่าเวลาเรียกรีพอตถ้า Date end ผมปล่อยว่างไว้รีพอต จะไม่โชว์ งานนี้ คับ
พอมีวิธีแก้ไขไหม ครับ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
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
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
ผมไม่แน่ใจว่าผมนำโค้ดที่อาจารย์ให้มาไปใส่ถูกจุดหรือเปล่าครับ
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
ลองทดสอบ และปรับแก้ดูครับ ผมเขียนสดไม่ได้ลอง ไม่รู้พิมพ์ตกไปบ้างหรือเปล่า เอาเป็นว่าพอให้เห็นแนวทางครับ โดยเฉพาะจุดที่ผมเน้น หนาแดง นั่นคือการประยุกต์เพิ่มเติมนิดหน่อยครับ
ที่ไหนได้คือในตารางว่างใช่ไหมครับ ถ้าอย่างนั้น เราก็ไม่ต้องใช้ประโยชน์อะไรจาก วันที่สิ้นสุดที่ระบุมาเลยครับ
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
พอดีผมมือใหม่ เลย คับ อาจารย์ต้องขออภัยจริงๆผมมองไม่ออกว่าโค้ดทำงานอย่างไรครับ
ถ้าผมนำโค้ดที่อาจารย์ให้มาไปใส่นี่ผมต้องตัดตัวใดออกบ้างและเพิ่มตัวไหนบ้างครับครับ
ตอนนี้ โค้ดที่ใช้อยู่เป็นรูปแบบ นี้ครับ คือ
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
Time: 0.2468s
ว่าแต่ถ้าปล่อยว่างไว้ แล้วจะโปรแกรมมันเข้าใจว่าอย่างไรหละครับ...
ไม่บอกมันมันจะรู้หรือครับ ... มันไม่เอาอะไรออกมาให้ก็ถูกแล้ว
ถ้าจะให้มันเอาออกมาให้ก็ต้องบอกมันไปครับว่า ถ้าค่าดังกล่าวว่างจะให้มันใส่ค่าอะไรแทน ใช้สูตร nz() ได้นะครับ