กระทู้เก่าบอร์ด อ.Yeadram
5,880 17
URL.หัวข้อ /
URL
สรุปนับจำนวนรายการในรายงาน (Report)
ผมลองทำหลายครั้งแล้วก็ไม่ตรงตามความต้องการ
เมื่อเราจะสรุปนับจำนวนในรายการ (Report) ก็จะสร้างฟิลด์ขึ้นมาและใช้คำสั่ง
=count(*) คือ นับจำนวนรายการทั้งหมดถึงแม้ในบางฟิลด์จะมีค่าว่า (Null) ก็จะนับด้วย
=count([ฟิลด์1]) คือ นับจำนวนรายการทั้งหมด แต่จะไม่นับรายการฟิลด์ที่มีค่าว่าง (Null)
ปัญหาคือว่า...ในรายงานนั้นไม่มีรายการใด ๆ ออกมาเลย, ดังนั้นในช่องที่ Count ไว้จะแสดงข้อมูลเป็น #Error, มีวิธีไหมครับว่า หากการนับจำนวนรายการใน Report ไม่มีเลย ให้แสดงผลลัพท์ออกมาเป็น 0 แทนข้อความ #Error
อ่านในไมโครซอฟท์แล้วก็ไม่ตรงกับที่ต้องการ, ผมลองใช้คำสั่งหลายครั้งแล้วก็ไม่ได้เช่น
=count(iif(IsNull[ฟิลด์1],0,[ฟิลด์1] ก็ไม่ได้
เมื่อเราจะสรุปนับจำนวนในรายการ (Report) ก็จะสร้างฟิลด์ขึ้นมาและใช้คำสั่ง
=count(*) คือ นับจำนวนรายการทั้งหมดถึงแม้ในบางฟิลด์จะมีค่าว่า (Null) ก็จะนับด้วย
=count([ฟิลด์1]) คือ นับจำนวนรายการทั้งหมด แต่จะไม่นับรายการฟิลด์ที่มีค่าว่าง (Null)
ปัญหาคือว่า...ในรายงานนั้นไม่มีรายการใด ๆ ออกมาเลย, ดังนั้นในช่องที่ Count ไว้จะแสดงข้อมูลเป็น #Error, มีวิธีไหมครับว่า หากการนับจำนวนรายการใน Report ไม่มีเลย ให้แสดงผลลัพท์ออกมาเป็น 0 แทนข้อความ #Error
อ่านในไมโครซอฟท์แล้วก็ไม่ตรงกับที่ต้องการ, ผมลองใช้คำสั่งหลายครั้งแล้วก็ไม่ได้เช่น
=count(iif(IsNull[ฟิลด์1],0,[ฟิลด์1] ก็ไม่ได้
17 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R07293
งั้นลองนี่เลย Nz()
2 @R07294
ลองแล้ว..ทำอย่างไรครับ
3 @R07297
Nz(Expression,0)
*** หมายเหตุ: หวังว่าคงไม่งงเป็นครั้งที่ 2
*** หมายเหตุ: หวังว่าคงไม่งงเป็นครั้งที่ 2
4 @R07304
ผมไปทำดูแล้ว หากมีรายการนับหรือไม่มีนับก็ได้แต่ค่า 0
5 @R07305
*มีวิธีไหมครับว่า หากการนับจำนวนรายการใน Report ไม่มีเลย ให้แสดงผลลัพท์ออกมาเป็น 0 แทนข้อความ #Error*
แล้ว 0 ที่ได้ไม่ตรงกับความต้องการหรอคับ
หรืออยากให้เป็นแบบนี้
ปกติ
ลำดับ รายการ ราคา
-----------------------------------
1 xxxxx 5.0
2 xxx 10.0
3 xx NULL
4 xxx 3.0
แก้ไขด้วย Nz()
ลำดับ รายการ ราคา
-----------------------------------
1 xxxxx 5.0
2 xxx 10.0
3 xx 0.0
4 xxx 3.0
อยากให้ผลของการนับเท่ากับ 3 แบบนี้ใช่หรือไม่
ถ้าใช่ ก็ใช้ Count(IIF(...))
แล้ว 0 ที่ได้ไม่ตรงกับความต้องการหรอคับ
หรืออยากให้เป็นแบบนี้
ปกติ
ลำดับ รายการ ราคา
-----------------------------------
1 xxxxx 5.0
2 xxx 10.0
3 xx NULL
4 xxx 3.0
แก้ไขด้วย Nz()
ลำดับ รายการ ราคา
-----------------------------------
1 xxxxx 5.0
2 xxx 10.0
3 xx 0.0
4 xxx 3.0
อยากให้ผลของการนับเท่ากับ 3 แบบนี้ใช่หรือไม่
ถ้าใช่ ก็ใช้ Count(IIF(...))
6 @R07312
ลำดับ รายการ ชื่อ
-----------------------------------
1 xxxxx ฟฟฟ
2 xxx งงงง
3 xx กกก
4 xxx ขขข
สรุปรายการ = 4 รายการ (ใช้คำสั่ง Count)
ลำดับ รายการ ชื่อ
-----------------------------------
-------------------------------------
สรุปรายการ = #Error รายการ (ใช้คำสั่ง Count)
ตรง #Error จะให้แสดงเป็น 0 รายการได้อย่างไร
-----------------------------------
1 xxxxx ฟฟฟ
2 xxx งงงง
3 xx กกก
4 xxx ขขข
สรุปรายการ = 4 รายการ (ใช้คำสั่ง Count)
ลำดับ รายการ ชื่อ
-----------------------------------
-------------------------------------
สรุปรายการ = #Error รายการ (ใช้คำสั่ง Count)
ตรง #Error จะให้แสดงเป็น 0 รายการได้อย่างไร
7 @R07340
มีใครจะพอรู้บ้างครับ
(แต่หากว่าเป็นอีกวิธีใน Microsoft คือให้ไปทำ Event ของ "เมื่อไม่มีข้อมูล" และไปเขียน Code แสดงว่า หากไม่มีรายการให้ขึ้น Message Bax ก็จะ ok อีกแบบหนึ่งครับ)
(แต่หากว่าเป็นอีกวิธีใน Microsoft คือให้ไปทำ Event ของ "เมื่อไม่มีข้อมูล" และไปเขียน Code แสดงว่า หากไม่มีรายการให้ขึ้น Message Bax ก็จะ ok อีกแบบหนึ่งครับ)
8 @R07342
report_onNOdata()
'ถ้าคุณทำอย่างนี้ได้
msgbox ".............."
'คุณก็ควรจะทำอย่างนี้ได้เช่นกัน
textbox ="สรุปรายการ = 0 รายการ"
End sub
'ถ้าคุณทำอย่างนี้ได้
msgbox ".............."
'คุณก็ควรจะทำอย่างนี้ได้เช่นกัน
textbox ="สรุปรายการ = 0 รายการ"
End sub
9 @R07344
นึกว่าอาจารย์ yeadram จะไม่มาซะแล้ว..ช่วยขยายความหน่อยครับ..ผมอ่านแล้วยังงง(ไม่เก่งก็งง) ไม่รู้?่าจะเหมือนกันหรือไม่ โดยที่ตอนนี้ในรายงานผมเขียน Event, "On No Data" ไว้ดังนี้ครับ
Private Sub Report_NoData(Cancel As Integer)
MsgBox "รายการของคุณมีจำนวน 0 รายการ", vbExclamation, "ไม่มีรายการ"
Cancel = True
End Sub
ผลก็คือว่า เมื่อรายงานเช็คว่าไม่มีรายการ, จะขึ้นกล่องข้อความดังกล่าว, และให้กด OK ก็จะปิดรายการไป, เหมือนหรือคล้ายกันกับอาจารย์บอกมาหรือไม่ครับ
Private Sub Report_NoData(Cancel As Integer)
MsgBox "รายการของคุณมีจำนวน 0 รายการ", vbExclamation, "ไม่มีรายการ"
Cancel = True
End Sub
ผลก็คือว่า เมื่อรายงานเช็คว่าไม่มีรายการ, จะขึ้นกล่องข้อความดังกล่าว, และให้กด OK ก็จะปิดรายการไป, เหมือนหรือคล้ายกันกับอาจารย์บอกมาหรือไม่ครับ
10 @R07354
ผมทดสอบแล้ว ใช้วิธีเขียนโค้ดอย่างผมว่า "ไม่ได้ครับ" ก่อนนี้คิดว่าได้เลยโพสต์ตอบไป ตอนนี้ขอยืนยันว่าทำไม่ได้ครับ
เพราะเหตุการณ์มาถึงขั้นที่ "มัน" (รายงาน) ทราบว่าไม่มีข้อมูลนั่นเป็นเหตุการณ์หลังจากโหลดข้อมูล และใส่ข้อมูลลงในคอนโทรลต่างๆ ไปแล้วดังนั้นจะมาสั่งปรับแต่งข้อมูลไม่ได้
ต้องหาวิธีใหม่แล้วล่ะครับ ขออภัยสำหรับคำตอบก่อนหน้าที่ผมตอบไป คำตอบผิดครับ
ข้อสังเกต..
- ในเมื่อคุณสั่ง cancel มันไปแล้ว มันก็ไม่แสดงรายงานมาแล้ว จะเอาคำว่า "0 รายการ" ไปทำไมอีกครับ หรือว่า คุณอยากที่จะ.....
ไม่สั่ง cancel แต่ต้องการให้แสดงรายงานต่อไปด้วยคำว่า "0 รายการ"
ถ้าเป็นอย่างท?่เดา คุณต้องไปเขียนโค้ดดักในเหตุการณ์อื่นครับ ไม่ใช่ on NoData ครับ มันไม่ทันการณ์แล้วครับ มันสายไปแล้ว
เพราะเหตุการณ์มาถึงขั้นที่ "มัน" (รายงาน) ทราบว่าไม่มีข้อมูลนั่นเป็นเหตุการณ์หลังจากโหลดข้อมูล และใส่ข้อมูลลงในคอนโทรลต่างๆ ไปแล้วดังนั้นจะมาสั่งปรับแต่งข้อมูลไม่ได้
ต้องหาวิธีใหม่แล้วล่ะครับ ขออภัยสำหรับคำตอบก่อนหน้าที่ผมตอบไป คำตอบผิดครับ
ข้อสังเกต..
- ในเมื่อคุณสั่ง cancel มันไปแล้ว มันก็ไม่แสดงรายงานมาแล้ว จะเอาคำว่า "0 รายการ" ไปทำไมอีกครับ หรือว่า คุณอยากที่จะ.....
ไม่สั่ง cancel แต่ต้องการให้แสดงรายงานต่อไปด้วยคำว่า "0 รายการ"
ถ้าเป็นอย่างท?่เดา คุณต้องไปเขียนโค้ดดักในเหตุการณ์อื่นครับ ไม่ใช่ on NoData ครับ มันไม่ทันการณ์แล้วครับ มันสายไปแล้ว
11 @R07355
ขอบคุณอาจารย์ yeadram
ที่แสดงว่า 0 รายการ เพราะให้มันออกเป็น message box แจ้งบอกกับ users ทราบว่าไม่มีรายการและเป็น 0 รายการเท่านั้นครับ, เมื่อ user กดปุ่ม ok แล้ว message box ก็หายไป
อาจารย์บอกว่า "ถ้าเป็นอย่างที่เดา คุณต้องไปเขียนโค้ดดักในเหตุการณ์อื่นครับ ไม่ใช่ on NoData ครับ มันไม่ทันการณ์แล้วครับ มันสายไปแล้ว", อาจารย์ว่ามันมีวิธีอื่นอีกไหมครับ,
เพราะในเว็บ Microsoft ก็ไม่มีบอกว่าจะสรุปรวมรายการเป็น 0 ได้อย่างไร, แต่จะมีก็ที่ข้อความดังข้างล่างประมาณนี้เท่านั้นครับ
---------------------------------------------------------------------------
Private Sub Report_NoData(Cancel As Integer)
MsgBox "รายการของคุณมีจำนวน 0 รายการ", vbExclamation, "ไม่มีรายการ"
Cancel = True
End Sub
----------------------------------------------------------------------------
ปล. (ผมไม่มีความรู้ในเรื่อง เขียนโปรแกรมใน Event ครับ, เพียงแต่ว่าดูในบอร์ดนี้บ้าง ดัดแปลงบ้าง ตามนั้นแหล่ะครับ)
ที่แสดงว่า 0 รายการ เพราะให้มันออกเป็น message box แจ้งบอกกับ users ทราบว่าไม่มีรายการและเป็น 0 รายการเท่านั้นครับ, เมื่อ user กดปุ่ม ok แล้ว message box ก็หายไป
อาจารย์บอกว่า "ถ้าเป็นอย่างที่เดา คุณต้องไปเขียนโค้ดดักในเหตุการณ์อื่นครับ ไม่ใช่ on NoData ครับ มันไม่ทันการณ์แล้วครับ มันสายไปแล้ว", อาจารย์ว่ามันมีวิธีอื่นอีกไหมครับ,
เพราะในเว็บ Microsoft ก็ไม่มีบอกว่าจะสรุปรวมรายการเป็น 0 ได้อย่างไร, แต่จะมีก็ที่ข้อความดังข้างล่างประมาณนี้เท่านั้นครับ
---------------------------------------------------------------------------
Private Sub Report_NoData(Cancel As Integer)
MsgBox "รายการของคุณมีจำนวน 0 รายการ", vbExclamation, "ไม่มีรายการ"
Cancel = True
End Sub
----------------------------------------------------------------------------
ปล. (ผมไม่มีความรู้ในเรื่อง เขียนโปรแกรมใน Event ครับ, เพียงแต่ว่าดูในบอร์ดนี้บ้าง ดัดแปลงบ้าง ตามนั้นแหล่ะครับ)
12 @R07356
หมายความว่าคุณวางฟิลด์นับ ไว้ในส่วนของ Page Footer
-------------------
ต้องวางฟิลด์นับไว้ในส่วนของกลุ่มของตัวมันเอง หรือไม่ก็ในส่วนของ Report Footer
-------------------
-------------------
ต้องวางฟิลด์นับไว้ในส่วนของกลุ่มของตัวมันเอง หรือไม่ก็ในส่วนของ Report Footer
-------------------
13 @R07358
คุณ U&ME
ตกลงว่าวางฟิลด์ในส่วนของกลุ่มตัวมันเองหรือส่วน Report Footer ก็ยังไม่ได้ครับ
ตกลงว่าวางฟิลด์ในส่วนของกลุ่มตัวมันเองหรือส่วน Report Footer ก็ยังไม่ได้ครับ
14 @R07364
ถ้างั้นส่ง ไฟล์ มาเลยครับ
beem_p@yahoo.com
beem_p@yahoo.com
15 @R07459
คุณ U&ME ครับ
เห็นตัวอย่างเป็น word ที่คุณส่งมาแล้ว แต่ใน access ทำอย่างไรครับ
ใน Query หรือ Report ทำยังไง...ผมทำมาตั้งนานยังไม่ได้เลย
เห็นตัวอย่างเป็น word ที่คุณส่งมาแล้ว แต่ใน access ทำอย่างไรครับ
ใน Query หรือ Report ทำยังไง...ผมทำมาตั้งนานยังไม่ได้เลย
16 @R07462
1. ให้ เพิ่ม textbox ในส่วนของรายละเอียดรายงาน ไว้ 1 textbox ตั้งชื่อเช่น txt1 ในนั้นให้คุณพิมพ์คำสั่ง =count[ฟิลด์ที่ต้องการจะนับ]
2. จากนั้นให้ สร้าง textbox อ?กอัน ไว้ตรง ส่วนท้ายของหน้า สมมุติ ชื่อว่า txtcount
3. ให้เขียนโค๊ด ในส่วน เมื่อไม่มีข้อมูล ว่า
Private Sub Report_NoData(Cancel As Integer)
txtcount = 0
End Sub
4. จานนั้นสุดท้ายให้เพิ่มtextbox อีกอัน ตรงส่วนท้ายหรือที่คุณต้องการจะวาง แล้ว พิมพ์ใน แหล่งตัวควบคุม ว่า =iif([txtcount]=0,"ไม่มีข้อมูล",[txt1])
5. จากนั้นก็ซ่อน textbox ที่ไม่อยากจะให้โชว์ แค่นี้เสร็จแล้วครับลองดู
ผมใช้วิธีนี้ครับลองดูครับ
2. จากนั้นให้ สร้าง textbox อ?กอัน ไว้ตรง ส่วนท้ายของหน้า สมมุติ ชื่อว่า txtcount
3. ให้เขียนโค๊ด ในส่วน เมื่อไม่มีข้อมูล ว่า
Private Sub Report_NoData(Cancel As Integer)
txtcount = 0
End Sub
4. จานนั้นสุดท้ายให้เพิ่มtextbox อีกอัน ตรงส่วนท้ายหรือที่คุณต้องการจะวาง แล้ว พิมพ์ใน แหล่งตัวควบคุม ว่า =iif([txtcount]=0,"ไม่มีข้อมูล",[txt1])
5. จากนั้นก็ซ่อน textbox ที่ไม่อยากจะให้โชว์ แค่นี้เสร็จแล้วครับลองดู
ผมใช้วิธีนี้ครับลองดูครับ
17 @R07494
คุณสมควร
ผมทดลองแล้ว OK เลยครับ,ใช้เทคนิคที่มองข้ามไป
ขอบคุณครับ
ผมทดลองแล้ว OK เลยครับ,ใช้เทคนิคที่มองข้ามไป
ขอบคุณครับ
Time: 0.3464s