If Not (RsIn.EOF And RsIn.BOF) Then
                Do While Not RsIn.EOF
                    If RsIn!trackno = StrTrackno Then
                        RsIn.Delete
                    Else
                        i = i + 1
                        RsIn!no = i
                        
                    End If
                    RsIn.MoveNext
                Loop
                RsIn.Update
End If
现在这DO LOOP循环是个死循环!!!

解决方案 »

  1.   

    好象没什么问题,你把if ... end if里简化,用f8 调试看看。
      

  2.   

    试过了,不是死循环,没出现你说的问题    If Not (rs.EOF And rs.BOF) Then
            Do While Not rs.EOF
                If rs!Name = "'张三'" Then
                    rs.Delete
                Else
                    i = i + 1
                    rs!住址 = i
                    
                End If
                rs.MoveNext
            Loop
            rs.Update
            'BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
        End If在最后的Update时候报错,因为记录集已经移动到了EOF
    而且数据更新了很多条,需要使用rs.UpdateBatch才行修改后运行通过,且数据库删除及写入成功,全部代码如下
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Private Sub Form_Load()
        If cn.State = 1 Then
            cn.Close
        End If
        cn.CursorLocation = adUseClient
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"
        Text1.Text = ""
        
        Dim strSQl As String
        Dim i As Integer
        strSQl = "select * from students "
        rs.Open strSQl, cn, adOpenDynamic, adLockOptimistic
        
        If Not (rs.EOF And rs.BOF) Then
            Do While Not rs.EOF
                If rs!Name = "张三" Then
                    rs.Delete
                Else
                    i = i + 1
                    rs!住址 = i
                    
                End If
                rs.MoveNext
            Loop
            rs.UpdateBatch
        End IfEnd Sub
      

  3.   

    ?rsin.RecordCount 
     17 
    但是I值已经过千了啊!
    好郁闷啊!
      

  4.   

    我换了种写法搞定了啊!
    但我还是想研究一下这是为什么!!!!
    Public Function FG_Stocko(StrTrackno As String) As Boolean
        Dim StrSql As String
        Dim Rs As New ADODB.Recordset
        Dim Rsout As New ADODB.Recordset
        Dim i As Integer
        
        On Error GoTo errdo:
        
        StrSql = "SELECT * FROM t_mmstockout WHERE trackno='" & Trim(StrTrackno) & " '"
        If Rs.state = adStateOpen Then Rs.Close
        Rs.Open StrSql, Conn, adOpenKeyset, adLockPessimistic
        If Not (Rs.BOF And Rs.EOF) Then
            Do While Not Rs.EOF
                
                   StrSql = "SELECT * FROM t_mmstockout WHERE drawingnumber='" & Rs!drawingnumber & "'AND " & _
                         " workcode='" & Rs!workcode & "'AND NOTE='" & Rs!note & "'order by no"
                If Rsout.state = adStateOpen Then Rsout.Close
                Rsout.Open StrSql, Conn, adOpenKeyset, adLockPessimistic
                If Not (Rsout.EOF And Rsout.BOF) Then
                    Do While Not Rsout.EOF
                        If Rsout!trackno = StrTrackno Then
                            Rsout.Delete
                        Else
                            i = i + 1
                            Rsout!no = i
                            Rsout.Update
                        End If
                            Rsout.MoveNext                Loop
                End If
                Rs.MoveNext
            Loop
        End If
        FG_Stocko = True
        Exit Function
    errdo:
        FG_Stocko = False
    End Function
    大家研究一下吧!我也想知道为什么!
      

  5.   

    把update写到delete和赋值的里面,不要放在外面。