กระทู้เก่าบอร์ด อ.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 ไม่ได้ ลองหาในกระทู้เก่าลองหลายวิธีแล้วครับแต่ก็ไม่ได้ผล ไม่ทราบว่าต้องแก้ไขตรงไหน ขอคำแนะนำด้วยครับ
ใน 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
2 @R03700
ขอบคุณครับเดี่ยวจะไปลองดู
แล้วพอจะมีหนังสือหรือเวบบอร์ดเก่าสอนเกี่ยวกับการอ้างอิงตามที่สอนด้านบนมั๊ยครับ
แล้วพอจะมีหนังสือหรือเวบบอร์ดเก่าสอนเกี่ยวกับการอ้างอิงตามที่สอนด้านบนมั๊ยครับ
3 @R03701
การอ้างอิงพวกนี้เกิดจากการใช้ property ที่เหมาะสม ซึ่ง object, method, property ทั้งหมดมีอธิบายอยู่ใน Help File ของ Access อยู่แล้ว เพียงแต่บางคนอาจไม่ได้ติดตั้งส่วนที่เรียกว่า VBA Help เอาไว้ แล้วแนะนำว่าให้ติดตั้งเป็น Help ภาษาอังกฤษนะครับ
อยากให้นึกไว้เสมอในใจว่า เราสามารถอ้าง mainform -- subform , form - recordset หรือออปเจ็คอะไรก็แล้วแต่ในระบบ ว่าเราสามารถจะหาวิธีอ้างได้ทั้งนั้นครับ เพียงแต่จะรู้หรือเปล่าว่าต้องใช้ property อะไร เท่านั้นเอง
อยากให้นึกไว้เสมอในใจว่า เราสามารถอ้าง 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
ขอบคุณครับ
ไม่สามารถกำหนดตัวแปร 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
หรือ เปลี่ยนเป็น
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ของฟอร์มหลัก ต้องเขียนโค๊ตอย่างไรครับ
ขอบคุณครับ
ถ้าผมอยากให้ textbox แสดงจำนวนเรคคอร์ดของฟอร์มย่อย ที่textboxของฟอร์มหลัก ต้องเขียนโค๊ตอย่างไรครับ
ขอบคุณครับ
7 @R03875
อยากนับตอนไหนก็เขียนใส่ในเหตุการณ์นั้นเลยครับ
โค้ดมันก็แค่ที่ให้นั่นแหละครับ คำสั่งเดียว
Me.ชื่อฟอร์มย่อย.Form.Recordset.RecordCount
อยากเอาไปแสดงผลที่ไหนก็ระบุไป
โค้ดมันก็แค่ที่ให้นั่นแหละครับ คำสั่งเดียว
Me.ชื่อฟอร์มย่อย.Form.Recordset.RecordCount
อยากเอาไปแสดงผลที่ไหนก็ระบุไป
8 @R03902
ขอบคุณมาเลยครับคุณ yeadram , คุณสันติสุข และทุกท่าน
ขอถามต่ออีกนิดครับ
จากที่กำหนด Recordset เป็น
Set rst = Me.Sfrm_Qry_countrecord.Form.Recordset
หากต้องการกำหนดเป็นแบบ
DbReadOnly หรือ DbOpensnapshot
ต้องกำหนดอย่างไรครับ
ลองหาในกระทู้เก่าดูแล้วมีการกำหนดจาก Table หรือ Mainform แต่ Subform ไม่มีครับ
ขอบคุณครับ
ขอถามต่ออีกนิดครับ
จากที่กำหนด Recordset เป็น
Set rst = Me.Sfrm_Qry_countrecord.Form.Recordset
หากต้องการกำหนดเป็นแบบ
DbReadOnly หรือ DbOpensnapshot
ต้องกำหนดอย่างไรครับ
ลองหาในกระทู้เก่าดูแล้วมีการกำหนดจาก Table หรือ Mainform แต่ Subform ไม่มีครับ
ขอบคุณครับ
Time: 0.3242s
- การอ้าง 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 ....
...
...