问题点:用WithEvents 定义的RecordSet,,无法作为参数正常传递。
‘注:如果去掉WithEvents,则程序可正常执行。
Dim WithEvents mRs As ADODB.Recordset
Private Sub cmdReset_Click()
Dim strSQL As String
strSQL = "Select Top 20 LogID from tblLog"
Set mRs = New ADODB.Recordset
mRs.Open strSQL, mdb, adOpenKeyset, adLockBatchOptimistic ‘注:此时,mRs.RecordCount=20
ReSetRecordSet mRs
‘注:此时,mRs.RecordCount还是20,但是,应该是10才对。End SubPrivate Sub ReSetRecordSet(ByRef pRecordset As ADODB.Recordset)
Dim strSQL As String
strSQL = "Select Top 10 LogID from tblLog "
Set pRecordset = New ADODB.Recordset
pRecordset.Open strSQL, mdb, adOpenKeyset, adLockBatchOptimistic '注:此时,pRecordset.RecordCount=10
End Sub
‘注:如果去掉WithEvents,则程序可正常执行。
Dim WithEvents mRs As ADODB.Recordset
Private Sub cmdReset_Click()
Dim strSQL As String
strSQL = "Select Top 20 LogID from tblLog"
Set mRs = New ADODB.Recordset
mRs.Open strSQL, mdb, adOpenKeyset, adLockBatchOptimistic ‘注:此时,mRs.RecordCount=20
ReSetRecordSet mRs
‘注:此时,mRs.RecordCount还是20,但是,应该是10才对。End SubPrivate Sub ReSetRecordSet(ByRef pRecordset As ADODB.Recordset)
Dim strSQL As String
strSQL = "Select Top 10 LogID from tblLog "
Set pRecordset = New ADODB.Recordset
pRecordset.Open strSQL, mdb, adOpenKeyset, adLockBatchOptimistic '注:此时,pRecordset.RecordCount=10
End Sub
解决方案 »
- EnumChildWindows和WindowFromPoint的问题,熟悉枚举子窗体的老师们进来指导一下.
- 求助:gdi+如何使用窗口句柄画图
- 大家帮帮忙啊。。。。。!!!!!VB技术问题,,,,跪求解决方案阿。。。。
- 要使用文件打开对话框,需引用什么部件
- 请高手指导!
- ■■■ 请教大家如何控股?欢迎大家一起讨论... ■■■
- 怎么得到表的指定记录?
- 如何在windows2000下通过vb启用或禁用网络连接?
- 高手请进。用过Mapinfo、MapBasic,做过视频捕捉方面的朋友请进.在线等待......
- 多串口卡的串口是否可以使用MSCOMM空间操作?
- VB2008和VB6
- VB2008和VB6的编程语言一样吗?(在线等 急)
楼主可将ReSetRecordSet中
Set pRecordset = New ADODB.Recordset
这一行替换成
If pRecordset.State = 1 Then
'如果记录集已打开,则关闭
pRecordset.Close
End If然后,可以在窗体的LOAD事件中初始化mRs
Set mRs = New ADODB.Recordset 然后,在其他打开 mRs 之前,都关闭记录集,或者用完后就关闭记录集
在显式更改 mRs 时会调用(其实就是 VB 编译器对 Set mRs = 语句添加了额外的处理功能);而在 ReSetRecordSet() 中 pRecordset 是没有该特性的。
并且在 mRs 作为参数时可能自动作了不可更改的限定。试试将 ReSetRecordSet() 改成函数,调用改为 mRs = ReSetRecordSet()
因為:它就不是通過參數傳遞來實現的。
但是,我還是想找一個辦法:直接通過pRecordset修改來實現,不用明確指定來源recordset。
原因:想使代碼更簡潔。我有數百個語句,調用ReSetRecordSet。如果來源recordset都需要明確定指,則過程的靈活性降低了,因為:要多數個百個類似的語句,SET mRs = ReSetRecordSet。
而且你根本不使用旧的 pRecordset 实例,从参数更改为函数返回值更直观。