Recordcount ใน Subform
กระทู้เก่าบอร์ด อ.Yeadram

 2,044   8
URL.หัวข้อ / URL
Recordcount ใน Subform

ขอคำแนะนำด้วยคำ
ใน Mainform ชื่อ "Supplier" มีปุ่ม "btcountrecord" อยู่โดยมีคำสั่งคือ

Private Sub btcountrecord_Click()
On Error GoTo Err_countrecord_Click
    Dim rst As Recordset
    Dim I As Integer
    Set rst = Me.Sfrm_Qry_countrecord
    rst.MoveFirst
    rst.MoveLast
    I = rst.RecordCount
    MsgBox ("RecordCount : " & I)
    Exit Sub


    Screen.PreviousControl.SetFocus
    DoCmd.FindNext

Exit_btcountrecord_Click:
    Exit Sub

Err_btcountrecord_Click:
    MsgBox Err.Description
    Resume Exit_btcountrecord_Click
    
End Sub

และภายใน Mainform มี Subform ชื่อ "Sfrm_Qry_countrecord" ซึ่งเป็นฟอร์มสำหรับแสดงจาก Quary ชื่อ "Qry_countrecord" ตามเงื่อนไขที่กำหนด
(โครงสร้าง Supplier->Sfrm_Qry_countrecord->Qry_countrecord)
แต่ผมทำ RecordCount ไม่ได้ ลองหาในกระทู้เก่าลองหลายวิธีแล้วครับแต่ก็ไม่ได้ผล ไม่ทราบว่าต้องแก้ไขตรงไหน ขอคำแนะนำด้วยครับ

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

1 @R03695
- การอ้างถึง Form object ที่เป็น subform จากใน mainform ให้ใช้รูปแบบ Me.Sfrm_Qry_countrecord.Form

- การอ้าง Recordset object ที่ bound (ผูก) เข้ากับตัวฟอร์ม ให้ใช้รูปแบบ Form object.Recordset

- ดังนั้นคำสั่งที่ถูกต้อง ต้องเป็น Set rst = Me.Sfrm_Qry_countrecord.Form.Recordset

- บรรทัด rst.MoveFirst ไม่จำเป็นต้องมี เพราะไม่มีผลอะไรกับการหาจำนวนเรคอร์ด แต่ rst.MoveLast จำเป็นต้องมี ไม่มีไม่ได้ แต่ถ้า Recordset object นั้นๆไม่มีเรคอร์ดอยู่เลย การอ้าง .MoveLast จะทำให้เกิด error   ดังนั้นจึงควรตรวจสอบก่อนว่ามีเรคอร์ดอยู่บ้างหรือไม่ ถ้ามีก็จึงค่อยสั่ง .MoveLast อีกที

- ดังนั้นโค้ดก็ควรจะเป็น
   ...
   ...
   Set rst = Me.Sfrm_Qry_countrecord.Form.Recordset
   If rst.Eof then
      I = 0
   Else
      rst.MoveLast
      I = rst.RecordCount
   End If
   Msgbox ....
   ...
   ...
2 @R03700
ขอบคุณครับเดี่ยวจะไปลองดู
แล้วพอจะมีหนังสือหรือเวบบอร์ดเก่าสอนเกี่ยวกับการอ้างอิงตามที่สอนด้านบนมั๊ยครับ
3 @R03701
การอ้างอิงพวกนี้เกิดจากการใช้ property ที่เหมาะสม ซึ่ง object, method, property ทั้งหมดมีอธิบายอยู่ใน Help File ของ Access อยู่แล้ว เพียงแต่บางคนอาจไม่ได้ติดตั้งส่วนที่เรียกว่า VBA Help เอาไว้ แล้วแนะนำว่าให้ติดตั้งเป็น Help ภาษาอังกฤษนะครับ

อยากให้นึกไว้เสมอในใจว่า เราสามารถอ้าง mainform -- subform , form - recordset หรือออปเจ็คอะไรก็แล้วแต่ในระบบ ว่าเราสามารถจะหาวิธีอ้างได้ทั้งนั้นครับ เพียงแต่จะรู้หรือเปล่าว่าต้องใช้ property อะไร เท่านั้นเอง
4 @R03868
ลองแล้วครับ แต่ปรากฏว่ามี error "Type mismatch"
ไม่สามารถกำหนดตัวแปร rst As Recordset ได้ เพราะจะเกิด error ดังกล่าว
ดังนั้นผมควรกำหนด rst เป็นอะไร หรือจะแก้ไขอย่างไรครับ

Private Sub btcountrecord_Click()
On Error GoTo Err_btcountrecord_Click
    Dim rst               '(As Recordset) -> กำหนด rst เป็น Recordset ไม่ได้จะเกิด error ควรกำหนดเป็นอะไรครับ
    Dim I As Integer
    Set rst = Me.Sfrm_Qry_countrecord.Form.Recordset   -> ส่วนที่แก้ไขจากคำแนะนำครั้งแรก
    rst.MoveFirst
    If rst.EOF Then
        I = 0
    Else
        rst.MoveLast
        I = rst.RecordCount
    End If
    MsgBox ("RecordCount : " & I)
    Exit Sub

    Screen.PreviousControl.SetFocus
    DoCmd.FindNext

Exit_btcountrecord_Click:
    Exit Sub
Err_btcountrecord_Click:
    MsgBox Err.Description
    Resume Exit_btcountrecord_Click
End Sub

ขอบคุณครับ
5 @R03869
- ตรวจสอบว่าได้เพิ่มไลบรารี่ DAO 3.6 เข้ามาในโปรเจ็คหรือยัง
หรือ เปลี่ยนเป็น
Dim rst as DAO.recordset
หรือเปลียนเป็น
Dim rst as New ADODB.recordset

แต่เท่าที่อ่านๆ ดู
ดูเหมือนว่าคุณต้องการแค่นับจำนวนเรคคอร์ดของฟอร์มย่อยใช่ไหมครับ
ลองดูอันนี้ไหม

sub..
MsgBox Me.Sfrm_Qry_countrecord.Form.Recordset.RecordCount
end sub
6 @R03874
ขออนุญาติครับ
ถ้าผมอยากให้ textbox แสดงจำนวนเรคคอร์ดของฟอร์มย่อย ที่textboxของฟอร์มหลัก ต้องเขียนโค๊ตอย่างไรครับ
ขอบคุณครับ
7 @R03875
อยากนับตอนไหนก็เขียนใส่ในเหตุการณ์นั้นเลยครับ
โค้ดมันก็แค่ที่ให้นั่นแหละครับ คำสั่งเดียว
Me.ชื่อฟอร์มย่อย.Form.Recordset.RecordCount
อยากเอาไปแสดงผลที่ไหนก็ระบุไป
8 @R03902
ขอบคุณมาเลยครับคุณ yeadram , คุณสันติสุข และทุกท่าน

ขอถามต่ออีกนิดครับ
จากที่กำหนด Recordset เป็น

Set rst = Me.Sfrm_Qry_countrecord.Form.Recordset

หากต้องการกำหนดเป็นแบบ
DbReadOnly หรือ DbOpensnapshot
ต้องกำหนดอย่างไรครับ
ลองหาในกระทู้เก่าดูแล้วมีการกำหนดจาก Table หรือ Mainform แต่ Subform ไม่มีครับ

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