一个Recordset打开了一个记录集.当数据库中的数据改变时,recordset有没有办法及时获取通知?
发现在adUseServer+adOpenDynamic状态下,当修改数据库数据时,recordset未触发任何事件.

解决方案 »

  1.   

    Private WithEvents rsNew As ADODB.Recordset
    Private Sub rsNew_WillChangeField(ByVal cFields As Long, ByVal Fields As Variant, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)End Sub
      

  2.   

    我说的数据被更新并不是指被这个recordset更新,而是被其他用户更新.
      

  3.   

    这个根本不是通知的问题,而是你应该在写入数据(C)前把从数据库读取的数据(B)和当前数据库内的值(A)做比较,如果A和B相等,说明没有人写入过,C可以放心写入;如果A和B不相等,则说明已经有人写入过了,C不能写入,需要提取最新的数据,再最新数据上再更改
      

  4.   

    对,一开始思路是这样的.但是这样操作成本太高.
    首先在编辑B前要把B另存一份(多一份内存空间).
    在提交前还以再读取一份A(又多一份内存空间,而且还要重新读取).
    要比较A和B的异同也不是那么容易.对于有一定数据量的情况下,要逐行逐列去对比,成本太高了.所以我希望在保存前,能直接知道记录是否已经发生改变.
      

  5.   

    http://www.cnblogs.com/ayi30/archive/2007/03/28/691399.html这篇文章介绍的比较详细,你可以看下
      

  6.   

    可以试试看看别人更新的时候,这个事件是否执行,俺也不是指"这个recordset更新",游标类型adOpenDynamic
      

  7.   

    begin work;
    commit work;
    informix的
      

  8.   

    当编辑的数据被其他用户更改时,执行Update会报错。这算是最有效的通知。