สรุปนับจำนวนรายการในรายงาน (Report)
กระทู้เก่าบอร์ด อ.Yeadram

 5,875   17
URL.หัวข้อ / URL
สรุปนับจำนวนรายการในรายงาน (Report)

ผมลองทำหลายครั้งแล้วก็ไม่ตรงตามความต้องการ

เมื่อเราจะสรุปนับจำนวนในรายการ (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
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(...))
6 @R07312
ลำดับ       รายการ        ชื่อ
-----------------------------------
   1           xxxxx          ฟฟฟ
   2           xxx              งงงง
   3           xx               กกก
   4           xxx              ขขข

สรุปรายการ = 4 รายการ (ใช้คำสั่ง Count)


ลำดับ       รายการ        ชื่อ
-----------------------------------
-------------------------------------

สรุปรายการ = #Error รายการ (ใช้คำสั่ง Count)

ตรง #Error จะให้แสดงเป็น 0 รายการได้อย่างไร
7 @R07340
มีใครจะพอรู้บ้างครับ

(แต่หากว่าเป็นอีกวิธีใน Microsoft คือให้ไปทำ Event ของ "เมื่อไม่มีข้อมูล" และไปเขียน Code แสดงว่า หากไม่มีรายการให้ขึ้น Message Bax ก็จะ ok อีกแบบหนึ่งครับ)
8 @R07342
report_onNOdata()
'ถ้าคุณทำอย่างนี้ได้
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 ก็จะปิดรายการไป, เหมือนหรือคล้ายกันกับอาจารย์บอกมาหรือไม่ครับ

10 @R07354
ผมทดสอบแล้ว ใช้วิธีเขียนโค้ดอย่างผมว่า "ไม่ได้ครับ" ก่อนนี้คิดว่าได้เลยโพสต์ตอบไป ตอนนี้ขอยืนยันว่าทำไม่ได้ครับ

เพราะเหตุการณ์มาถึงขั้นที่ "มัน" (รายงาน) ทราบว่าไม่มีข้อมูลนั่นเป็นเหตุการณ์หลังจากโหลดข้อมูล และใส่ข้อมูลลงในคอนโทรลต่างๆ ไปแล้วดังนั้นจะมาสั่งปรับแต่งข้อมูลไม่ได้

ต้องหาวิธีใหม่แล้วล่ะครับ ขออภัยสำหรับคำตอบก่อนหน้าที่ผมตอบไป คำตอบผิดครับ

ข้อสังเกต..
- ในเมื่อคุณสั่ง 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 ครับ, เพียงแต่ว่าดูในบอร์ดนี้บ้าง ดัดแปลงบ้าง ตามนั้นแหล่ะครับ)
12 @R07356
หมายความว่าคุณวางฟิลด์นับ ไว้ในส่วนของ Page Footer
-------------------
          ต้องวางฟิลด์นับไว้ในส่วนของกลุ่มของตัวมันเอง หรือไม่ก็ในส่วนของ Report Footer
-------------------
13 @R07358
คุณ U&ME
ตกลงว่าวางฟิลด์ในส่วนของกลุ่มตัวมันเองหรือส่วน Report Footer ก็ยังไม่ได้ครับ
14 @R07364
ถ้างั้นส่ง ไฟล์ มาเลยครับ
    beem_p@yahoo.com
15 @R07459
คุณ U&ME ครับ
เห็นตัวอย่างเป็น 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 ที่ไม่อยากจะให้โชว์ แค่นี้เสร็จแล้วครับลองดู
ผมใช้วิธีนี้ครับลองดูครับ

17 @R07494
คุณสมควร
ผมทดลองแล้ว OK เลยครับ,ใช้เทคนิคที่มองข้ามไป
ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2649s