จะนับจำนวนเร็คคอร์ดในคิวรี่ได้อย่างไรคะ
กระทู้เก่าบอร์ด อ.Yeadram

 3,070   15
URL.หัวข้อ / URL
จะนับจำนวนเร็คคอร์ดในคิวรี่ได้อย่างไรคะ

หนูทำฟอร์มโดยใช้ข้อมูลจากคิวรี่ Quary-A นะคะ

ความต้องการของหนูก็คือ อยากจะสร้าง textbox ซักตัว บนหน้าฟอร์มดังกล่าว
เพื่อนับแสดงจำนวนเรคคอร์ดของ Quary-A ว่ามีกี่เรคคอร์ด

กรณีนี้ หนูต้องเขียนคำสั่งบน textbox อย่างไรคะ

ขอบคุณค่ะ

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

1 @R10705
ทำฟังก์ชั่นเพื่อหาจำนวนเรคอร์ดทั้งหมดเสียก่อน

Private Function TotalRecord( ) as Long
   Dim RS as DAO.Recordset

   Set RS = Me.RecordsetClone
   If Not RS.EOF Then RS.MoveLast
   TotalRecord = RS.RecordCount
End Function

จากนั้นก็เขียนโค้ดใน Form_OnLoad ว่า

   Me.[ชื่อ Textbox] = TotalRecord( )

เท่านี้เองครับ และถ้าผู้ใช้สามารถเพิ่ม/ลบเรคอร์ดจากหน้าฟอร์มนี้เองได้ด้วย เราก็ต้องสั่ง    Me.[ชื่อ Textbox] = TotalRecord( )   ไว้ใน Form_AfterUpdate และ Form_AfterDelConfirm เพิ่มเติม เพื่อปรับผลใน Textbox ให้ตรงกับจำนวนเรคอร์ดในฟอร์มหลังจากเพิ่ม/ลบเรคอร์ดครับ
2 @R10706
ขอบพระคุณอย่างยื่งค่ะอาจารย์

    หนูจะลองนำไปทำตามดูนะคะ

ขอบคุณค่ะ
3 @R10707
หนูลองทำแล้วค่ะอาจารย์ โดย

สร้างโมดูลใหม่ขึ้นมา1อัน แล้วคัดลอกนำฟังชั่นที่ท่านแนะนำไปใส่
จากนั้นนำโค้ดไปใส่ที่ฟอร์มโหลด เมื่อโหลดฟอร์มแล้วมันขึ้น Error ตามในรูปค่ะ



รบกวนอาจารย์แนะนำเพิ่มเติมด้วยนะคะ
4 @R10708
โมดูลค่ะ



5 @R10709
ผมว่าจะต้องเขียนไว้ที่ในฟอร์ม นะครับ
6 @R10711
เรียนอาจารย์ sjs

หนูได้ลองนำไปเขียนไว้ในฟอร์ม-เปิด
มันก็จะ Error ตามในรูปอีกค่ะ



ไม่ทราบว่าหนูทำผิดขั้นตอนไหน รบกวนอาจารย์ช่วยแนะนำด้วยนะคะ

ขอบคุณค่ะ
7 @R10712
ไม่นะ ไม่นะ ต้องแบบนี้นะ



Private Sub Form_Load()
Me.Text0 = TotalRecord()
End Sub

Private Function TotalRecord() As Long
   Dim RS As DAO.Recordset

   Set RS = Me.RecordsetClone
   If Not RS.EOF Then RS.MoveLast
   TotalRecord = RS.RecordCount
End Function

8 @R10715
ขอบคุณค่ะ

หนูได้แก้ไขตามที่ท่านแนะนำแล้ว ตอนนี้ไม่ Error แล้วค่ะ
แต่ Text0 ยังไม่ยอมนับแสดงจำนวนเรคคอร์ดค่ะ
คือว่าแสดงเป็น 0 อย่างเดียว

ซึ่งหนูก็ได้เพิ่ม Me.Text0 = TotalRecord()
ไปไว้ที่ Form_AfterUpdate
และที่   Form_AfterDelConfirm
ก็ยังไม่ได้
ลองเปลี่ยนชื่อ Text0 เป็นอย่างอื่นแล้ว ก็ยังคงเดิมค่ะ
9 @R10716
รบกวนถามอีกนิด ในฟอร์มคุณมาลีใช้ชื่อ Text0 หรือ Text9 ครับที่ต้องการโชว์
10 @R10718
เรียนอาจารย์ sjs

เดิมใช้ชื่อ Text9 แต่หลังจากได้ใช้โค้ดที่ท่านแนะนำ หนูก็เปลี่ยนเป็น Text0
เพื่อให้มันตรงกับคำสั่งในโค้ดแล้วค่ะ
11 @R10719
เย้..ได้แล้วค่ะอาจารย์

เพิ่ม Me.Requery เข้าไปอีกบรรทัด ก็ใช้ได้เลยค่ะ

ขอขอบคุณอาจารย์อย่างยิ่งนะคะ
12 @R10721
คุณมาลีใช้ Form_Open หรือ Form_Load ครับ

Form_Open เกิดก่อนที่ระบบจะโหลดเอาข้อมูลมาเพื่อแสดงบนฟอร์ม ส่วน Form_Load จะเกิดขึ้นหลังจาก Form_Open และเกิดหลังจากระบบโหลดข้อมูลมาแล้ว ดังนั้นถ้าใช้ Form_Load มันก็น่าจะให้ค่าออกมาได้เสมอครับ โดยไม่ต้องสั่ง Requery
13 @R10722
ต้องขออภัยอย่างยิ่งค่ะอาจารย์
ตอนแรก หนูให้ข้อมูลไม่ครบถ้วน เพราะ(มั่ว)คิดเอาเองว่า คงไม่เกี่ยวกันกระมัง
แต่ที่ไหนได้ มาทราบภายหลังว่า มันเป็นประเด็นสำคัญมากเลย คือว่า

ที่ฟอร์ม หนูสร้าง Text2 เอาไว้ ซึ่งไปทำ Between กับฟิลด์ ใน Quary-A
ดังนั้นขณะเปิดหรือโหลดฟอร์ม Quary-A คงจะ ยังไม่ได้รัน จนกว่าจะใส่ข้อมูล
ใน Text2 เสียก่อน (ไม่ทราบว่าหนูเข้าใจถูกหรือไม่) ทำให้ Text0 นับจำนวนไม่ได้ จึงแสดงค่าเป็น 0
พอตั้งหลักได้ หนูก็เลยลองย้ายคำสั่งต่างๆ ไปผูกไว้กับ Text2 แทน พร้อมกับเพิ่ม Me.Requery ไปอีก เป็นดังนี้ค่ะ

Private Function TotalRecord() As Long
   Dim RS As DAO.Recordset
   Set RS = Me.RecordsetClone
   If Not RS.EOF Then RS.MoveLast
   TotalRecord = RS.RecordCount
End Function

Private Sub Text2_AfterUpdate()
Me.Requery
Me.Text0 = TotalRecord()
End Sub

พอปรับเปลี่ยนเป็นแบบนี้ มันก็ใช้ได้ค่ะ
ซึ่งไม่ทราบว่า หนูทำผิดขั้นตอนใดไปหรือเปล่าคะอาจารย์
14 @R10724
"ดังนั้นขณะเปิดหรือโหลดฟอร์ม Quary-A คงจะ ยังไม่ได้รัน"

ไม่ถูกครับ หลังจาก Form_Open event แต่ก่อน Form_Load event ระบบจะหาเรคอร์ดตาม Query-A แล้ว แต่เพราะขณะเปิดฟอร์ม ค่า Text2 ยังไม่มี ดังนั้น RecordCount จึงได้เป็นศูนย์ครับ และเมื่อ Text2 เปลี่ยน ผลของ Query-A จะไม่ได้เปลี่ยนตามโดยอัตโนมัติครับ จึงต้องสั่ง .Requery ใน Text2_AfterUpdate event เพื่อให้ระบบหาผลลัพธ์มาใหม่

หลักการเขียนโปรแกรมด้วย Access (จริงๆมันหลักของ Event Driven Programming) ก็คือ เราไม่สามารถเขียนโค้ดไว้ที่ใดๆตามที่คิดเอาเองได้ เราต้องวางโค้ดลงใน event ที่ระบบให้มาเท่านั้น หรือไม่ก็ใน Module ถ้าเรารู้ว่า event อะไรเกิดเมื่อไหร่ และ event นั้นทำให้เกิดอะไรเป็นผลตามมาบ้าง event อะไรเกิดก่อนเกิดหลัง เราก็จะเลือกวางโค้ดได้ถูก event ครับ   
15 @R10725
ขอบคุณอาจารย์สันติสุขนะคะ
ที่กรุณาช่วยเหลือให้ความรู้แก่หนูมาโดยตลอด

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