第一步:
我的试验是这样的,我用ado记录集将sqlserver数据库中的表取到窗体中的表格中,在表格中修改数据后执行rs.update,然后我到企业管理器中查看是否产生更新,我发现更新是正常的。
第二步:
我重新上次操作,不过区别是在ado记录集将内容取到表格中后,不是先去修改字段内容。而是先到企业管理器中将这个表的数据修改。然后回到vb程序窗体再次修改字段内容,然后运行rs.update,运行后没有反映。也不报错。可是我到企业管理器中一看,根本没有更新。我再改一下字段内容,再次运行驶rs.update,此时更新报错。
我不明白。为什么我通过企业管理器改过数据后就不能更新了呢?如果这样,多台客户机操作不就存在一台机器修改后,其他机器就不能修改了吗?
如何解决这个更新问题呢?
高手快来帮一下我吧,我头都大了。

解决方案 »

  1.   

    估计是你用了select * from xxx where 主键='xxx'
    这类方法写的
    然后你又在企业管理器里修改了主键
    结果你表格里没有改的数据在sql里就查不到对应的记录了也就不能修改了
    最好就是你的表格里的数据再导一次应该就可以了
    至于
    多台客户机操作不就存在一台机器修改后,其他机器就不能修改了吗?
    这个就要考虑sql的动态游标和锁了
    嘿嘿
    这个有点复杂
      

  2.   

    sql里有专门讲事务的并发控制的^_^
    你上面的情况应该是脏读吧
    如果真要实现多客户机操作的话
    我想应该在别人浏览的时候给sql加锁不能修改,只有浏览结束才能修改
    在修改的时候别人不能浏览,只有修改结束别人才能浏览.
      

  3.   

    解释一下,我在企业管理器中没有改主键,我知道主键一般情况下是不充许修改的。
    我就是改了一个普通字段。
    我的代码如下:
                If conn.State <> adStateOpen Then
                    Call getconn
                End If
        
                If rsdata.State = adStateOpen Then
                    rsdata.Close
                End If
                rsdata.CursorLocation = adUseClient  '使用本地游标
                rsdata.Open strquery, conn, adOpenStatic, adLockOptimistic      'adLockBatchOptimistic      'adLockOptimistic--
                If rsdata.BOF = True And rsdata.EOF = True Then
                    MsgBox "没有记录"
                    Exit Sub
                End If
                
                MsgBox rsdata.Fields("部门").Value
                rsdata.MoveFirst
                Set txtjgcz.DataSource = rsdata
                txtjgcz.DataField = "加工产值"
    我把字段绑到一个文本框上,然后点一下按钮更新。
    按钮事件为:rs.update
    就是这样,我知道这是脏读,我想问如何处理呢?
      

  4.   

    你的strquery是sql语句吗?
    怎么写的?