下面代码 出现停在rs.Update上 但按F5可以继续运行 但再运行几条又不行了 为什么(难道是我用conn\ conn2 同时打开一个表不行吗)
If conn.State = adStateClosed Then
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=d:\file\" & Hisyyyy & ".mdb"
    conn.Open
End If
conn.Execute "insert into " & HisMM & " (sent,JCD_Num,ttime,freq,Cq,flag_cq,v5,flag_v5,modulation,flag_mod,temp) values (" & False & "," & Here_Upload.JCD_Num & ",'" & Here_Upload.Time_cj & "'," & Here_Upload.Freqency & "," & Here_Upload.Cq & "," & Here_Upload.Alarm_Cq & "," & Here_Upload.Volt5 & "," & Here_Upload.Alarm_Volt5 & "," & Here_Upload.Module & "," & Here_Upload.Alarm_Module & "," & Here_Upload.Temperature & ")"If conn2.State = adStateClosed Then
    conn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=d:\file\" & Hisyyyy & ".mdb"
    conn2.Open
End IfDebug.Print rs.State
rs.CursorLocation = adUseClient
rs.Open "select top 10 * from " & HisMM & " where sent=0", conn2, 3, 3  'sent是布儿型  
For i = 1 To rs.RecordCount
If Not rs.EOF Then
    '取出每个字段的数据  赋值给一个结构 (代码略)
    rs.Fields("sent").Value = True
    Debug.Print rs.Fields("myid").Value  ‘myid为自动编号
    rs.Update               '无法为更新定位行  一些值可能在最后一次读取后已经更改
    rs.MoveNext
End If
Next i
'rs.UpdateBatch adAffectCurrent  
rs.Close

解决方案 »

  1.   

    为conn2定义一个adclient类型游标
      

  2.   

    修改数据的的代码没有问题的,你看一下是不是你的游标控制不对.Do While Not rs.EOF
        rs.Fields("sent").Value = True
        rs.Update               
        rs.MoveNext
    loop
      

  3.   

    你可以不要第次都update,在结束后用UpdateBatch试试
      

  4.   

    是不是游标打开的参数不对?
    vb的adodb打开的时候需要有打开参数的.如果用默认的方式打开是不允许update的.不知道这个是不是这样.
      

  5.   

    TO W26547890(征服)   tztz520(午夜逛街)
    加了
    conn2.CursorLocation = adUseClient 
    还是不行  报同样的错If conn2.State = adStateClosed Then
        conn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=d:\file\" & Hisyyyy & ".mdb"
        conn2.Open
    End If
    TO (数码辣椒)
    用了批处理还是报同样的错
      

  6.   

    rs.LockType=adLockOptimistic
    rs.CursorType = adOpenDynamic
    rs.CursorLocation = adUseClient
    rs.OpenIf rs.RecordCount<>0 then
       For i = 1 To rs.RecordCount
          rs.Fields("sent").Value = True
          Debug.Print rs.Fields("myid").Value
          rs.Update           
          rs.MoveNext
       Next i
    End If
      

  7.   

    刚才忘记加上一句,不好意思。。 rs.LockType=adLockOptimistic
    rs.CursorType = adOpenDynamic
    rs.CursorLocation = adUseClient
    rs.OpenIf rs.RecordCount<>0 then
       rs.MoveFirst
       For i = 1 To rs.RecordCount
          rs.Fields("sent").Value = True
          Debug.Print rs.Fields("myid").Value
          rs.Update           
          rs.MoveNext
       Next i
    End If
      

  8.   

    rs.Open 后面的内容我没有写出来,原样写上去
      

  9.   

    rs.Open "select top 10 * from " & HisMM & " where sent=0", conn2, 3, 3  
    前面加上if rs.state=adstateopen then rs.close
    同样的If conn2.State = adStateClosed Then
    改为If conn2.State = adStateOpen Then cnn2.close
    试试!
      

  10.   

    szmickylee(笨老鼠)   还是报同样的错
      

  11.   

    干嘛要用两个CONN?用一个CONN和几个RS不行么?
      

  12.   

    你用两个CONN打开同一张表肯定会出现锁定冲突的。
      

  13.   

    因为用这两个connection可能会连接不同的表 不同的库(前面是说错了  偶尔会指向同个表)  现在我直接用了sql语句  以上问题是解决了但在debug窗口会出现两次同样的id    而且很有规律
    41 
     42 
     43 相同
     43 相同
     44 
     45 
     46 相同
     46 相同
     47 
     48 
    奇怪的是当我单步调试时就不会出现这种情况
    If conn2.State = adStateClosed Then
        conn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=d:\file\" & Hisyyyy & ".mdb"
        conn2.Open
    End If
    If rs.RecordCount <> 0 Then
        rs.MoveFirst
        For i = 1 To rs.RecordCount
            If Not rs.EOF Then
            conn2.Execute "update " & HisMM & " set Sent=True where myid=" & rs.Fields("myid").Value
            Debug.Print rs.Fields("myid").Value
            rs.MoveNext
            End If
        Next i
    rs.Close
    End If
    If rs.State <> adStateClosed Then rs.Close
      

  14.   

    上面的代码最后一句有什么用?
    》奇怪的是当我单步调试时就不会出现这种情况
    》If conn2.State = adStateClosed Then
    》    conn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=d:\file\" & Hisyyyy & ".mdb"
    》    conn2.Open
    》End If
    这个时候如果conn2的状态为打开,不就不执行了啊
    If conn2.State = adStateOpen Then cnn2.close ‘判断当前为打开,则关闭,然后在下面再打开
    代码格式不好
    最好每次打开表时都先判断其状态,先关闭,再打开,不要同时打开