ACCESS数据库,我select * from [table] where id='"& id &"'后,少了一条记录。

解决方案 »

  1.   

    不是呀,比如我有20条记录(数据库里),但我用recordcount的时候,他说我只有19条!郁闷死我了。
      

  2.   

    fishmans(金脚指) 
    你的意思是指?我把数据导到SQL里,用查询分析器查出来的结果没有问题呀!一条都不少。
      

  3.   

    objRs.CursorLocation = adUseClient你是说这个吗?
      

  4.   

    本地打开,还是少一条记录。是不是我的打开方式不对呀?objRs.CursorLocation = adUseClient
    objRs.Open strSql, objCon, 1, 1
      

  5.   

    如果真正在工程中用,请不要使用objRs.recordcount,除了要使用本地游标,经实践证明recordcount有时就是得不到正确的结果甚至出错。
    一定要得到记录集数目,请使用
    select count(*) from ...
    的方法
      

  6.   

    假设conn为连接对象
    conn.CursorLocation = adUseClient
      

  7.   

    算了,我还是帖出来给大家看吧。Public Sub UpdateInfor(Board)Dim objCon As ADODB.Connection
    Dim strSql As StringDim ctn, pcs, pcs1Set objCon = New ADODB.ConnectionIf objCon.State = adStateOpen Then objCon.Close
            
        OpenDbconnection objCon, 1
        
        If objCon.State = adStateOpen Then
            Dim objRs As ADODB.Recordset
            Set objRs = New ADODB.Recordset
            
            strSql = "select * from scan_data where board='" & Board & "'"
            objRs.CursorLocation = adUseClient
            objRs.Open strSql, objCon, 3, 1
            
            MsgBox objRs.RecordCount, vbInformation, "xx"
            If Not objRs.EOF And Not objRs.BOF Then
                ctn = objRs.RecordCount
                
                For i = 0 To objRs.RecordCount - 1
                    pcs1 = CInt(Mid(objRs("box"), 5, 3))
                    pcs = CInt(pcs) + CInt(pcs1)
                objRs.MoveNext
                Next
            End If
            objRs.Close
            
            objRs.Open "select board from infor where board = '" & Board & "'", objCon, 1, 1
            If Not objRs.EOF And Not objRs.BOF Then
                objCon.Execute "update infor set ctn = '" & ctn & "', pcs = '" & pcs & "' where board = '" & Board & "'"
            Else
                objCon.Execute "insert into infor (ctn, pcs, board) values ('" & ctn & "', '" & pcs & "','" & Board & "')"
            End If
            objRs.Close
            Set objRs = Nothing
        Else
            MsgBox "数据库连接错误", vbInformation, "提示"
            Exit Sub
        End If
    objCon.Close
    Set objCon = Nothing
    End Sub
      

  8.   

    就像 zhongfabai(饽饽) 这位朋友说的,我在调用这个SUB前,刚对SCAN_DATA这个表进行了操作。向里面增加了新的数据,而这些新的数据也正是我要COUNT的值,我是为了方便所以才使用RECORDCOUNT的。我试试你的方法。
      

  9.   

    objCon.CursorLocation = adUseClient  '设置ADODB Connection的CursorLocation 
    objRs.Open strSql, objCon, 3, 1
      

  10.   

    哦,这就涉及同步的问题了
    因为VB是一直往下执行的,如你insert 后立即 select ,VB发select时不会等你数据库insert一定成功才开始。因此你这样哪怕用count(*)恐怕也不能得到正确结果。
    你可以在insert前求出记录数iCount,insert成功后传入参数iCount+1就可以代替recordcount了还是那句话,最好不要用recordcount
      

  11.   

    \strSql = "select * from scan_data where board='" & Board & "'"\
    这个条件是否正确呀?
      

  12.   

    谢谢 zhongfabai(饽饽) 我现在已经解决了,我将调用数据库的层次修改了一下。已经好了,不过我还是使用的recordcount。谢谢你,结贴了。