最近在搞一个数据库方面的系统,开始我将所有的数据
源类与各窗体都放到同一个工程,所有的功能都能正常工作,但是
后来我把所有的数据源类放到另一个工程,准备生成一个
ActiveX Dll的方式来实现,在调试时,就出现了俩个问题:1.当数据更改时,DBGrid的数据并没有刷新,开始我
以为是DBGrid的数据刷新(调用Refsh没用)问题,后来才发现其实是因为
为DBGrid提供数据源类的RecordSet也并没有重新从数据源类提取数据,没有刷新!在
我分离代码之前,DBGrid及数据源类的RecordSet通过RecordSet
的一次CLose和Open方法都能刷新,分离之后,这个数据源类的
RecordSet的Close方法始终无法关闭它,所以调用open方法是报错“
对象打开时,操作不允许”。我还发现Recordset(ADO2.7)没有Refsh方法。
调用RecordSet的Requery也报错。 说明:我的RecordSet是调用数据源类内部的Command的Execute方法,(
set rs=command.Execute )从Access调用存储过程得到的。
Connection的游标类型CursorLocation是adClient的。2.我在客户端(窗体模块)声明的一个WithEventS RecordSet
(clientRecordSet),将数据源类的RecordSet赋给它,clientRecordSet的MoveComplete事件却并不被触发。不知道什么原因?我猜问题集中在客户端游标和服务器端游标上,也可能是个BUG!各位高手,请帮帮忙!在此谢过!
源类与各窗体都放到同一个工程,所有的功能都能正常工作,但是
后来我把所有的数据源类放到另一个工程,准备生成一个
ActiveX Dll的方式来实现,在调试时,就出现了俩个问题:1.当数据更改时,DBGrid的数据并没有刷新,开始我
以为是DBGrid的数据刷新(调用Refsh没用)问题,后来才发现其实是因为
为DBGrid提供数据源类的RecordSet也并没有重新从数据源类提取数据,没有刷新!在
我分离代码之前,DBGrid及数据源类的RecordSet通过RecordSet
的一次CLose和Open方法都能刷新,分离之后,这个数据源类的
RecordSet的Close方法始终无法关闭它,所以调用open方法是报错“
对象打开时,操作不允许”。我还发现Recordset(ADO2.7)没有Refsh方法。
调用RecordSet的Requery也报错。 说明:我的RecordSet是调用数据源类内部的Command的Execute方法,(
set rs=command.Execute )从Access调用存储过程得到的。
Connection的游标类型CursorLocation是adClient的。2.我在客户端(窗体模块)声明的一个WithEventS RecordSet
(clientRecordSet),将数据源类的RecordSet赋给它,clientRecordSet的MoveComplete事件却并不被触发。不知道什么原因?我猜问题集中在客户端游标和服务器端游标上,也可能是个BUG!各位高手,请帮帮忙!在此谢过!
if recordset.state<>0 then
recordset.close
end if
如果还有问题联系
Public WithEvents stoProsRs As ADODB.Recordset...............set stoProRs=ActiveDll的某个数据源类的RecordSet '此数据源类运行时绑定到DBGrid.............
'stoProsRs的MoveComplete事件,在与DBGrid绑定数据源类的RecordSet记录移动时
'能被触发(当数据源类是私有类),担当此数据源类放到ActiveDll就不能工作
Private Sub stoProsRs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum,
ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
On Error GoTo err
'**************
......
'代码部分....
....... err:
If err.Number = 3021 Then
CStoPros.Recordset.MoveLast
End If
End Sub