กระทู้เก่าบอร์ด อ.Yeadram
        
           2,227   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.1352s
    
      
		
- การอ้าง 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 ....
...
...