“BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录”我从数据库中获取的是当前某字段的最大值,SQL语句是“SELECT MAX(A) FROM T”
得到的结果保存在一个RECORDSET中,但是想用GETROWS方法取的时候,总是出现这样的错误,我声明为静态指针的RECORDSET再MOVEFIRST回去还是会出现,不知道应该怎么办了,求助

解决方案 »

  1.   

    sql="SELECT isnull( MAX(A),0) FROM T"
    rs.open sql,conn,1,1然后看看rs.fields(0)这样读取
      

  2.   

    使用了楼上所说的写法,还用了下面的判断  If rs.EOF Or rs.BOF Then
            MsgBox "无记录"
        Else
            MsgBox "有记录"
        End If结果每次都是“有记录”,再向下执行的时候,就出现“BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录”错误,气死人了
      

  3.   

    sql="SELECT isnull( MAX(A),0) FROM T" 改为sql="SELECT isnull( MAX(A),0) As A FROM T "还有,建议不要用这种方式打开记录集,用连接的 Execute 方法返回记录集
      

  4.   

    sql="SELECT isnull( MAX(A),0) As A FROM T "
    Set rs = conn.Execute(sql)
      

  5.   

    '执行查询等需要返回数据集的SQL语句
    Public Function GetRsWithConnSqlstring(ByVal connString As String, ByVal strSql As String) As Recordset
        Dim conn As New ADODB.Connection
        Dim rst As New ADODB.Recordset    conn.ConnectionString = connString
        conn.Open
        rst.Open strSql, conn, 1, 1, adCmdText
        rst.MoveFirst    Set GetRsWithConnSqlstring = rst    If Len(Dir(App.Path & "\tmp.adtg")) > 1 Then
            Kill App.Path & "\tmp.adtg"
        End If
        GetRsWithConnSqlstring.Save App.Path & "\tmp.adtg"
        conn.Close
    Exit FunctionPrivate Sub cmdAdd_Click()
        Dim rstAddRecord As New ADODB.Recordset
        Dim rstGetMaxId As New ADODB.Recordset
        Dim strSql As String
        Dim strConn As String
        Dim strStartTime As String
        Dim strEndTime As String
        
        
        Dim nProject As Project
        
        Dim strServer As String
        Dim strUser As String
        Dim strPWD As String
        Dim strDataSource As String
        '从INI文件获取数据库连接信息
        strServer = GetIniStr("ORACLE", "Server", App.Path & "\database.ini")
        strDataSource = GetIniStr("ORACLE", "Data Source", App.Path & "\database.ini")
        strUser = GetIniStr("ORACLE", "User", App.Path & "\database.ini")
        strPWD = GetIniStr("ORACLE", "pwd", App.Path & "\database.ini")
        '打开数据库,获取当前最大ID
        strConn = "Provider=OraOLEDB.Oracle.1;Password=" & strPWD & ";Persist Security Info=True;User ID=" & strUser & ";Data Source=" & strDataSource
        strSql = "Select NVL(max(id),0)  from PROJECTINFO "    GetRsWithConnSqlstring strConn, strSql
        rstGetMaxId.Open App.Path & "\tmp.adtg", , adOpenStatic, adLockReadOnly, adCmdText
        rstGetMaxId.MoveFirst
        If rstGetMaxId.EOF Or rstGetMaxId.BOF Then
            MsgBox "无记录"
        Else
            MsgBox "有记录"
        End If
        Dim x As Integer
        x = rstGetMaxId.Fields(0) + 1
        
    End Sub
      

  6.   

    recordset不能在关闭数据库连接后使用吧?
    想使用断开的recordset但是总是在
    rst.open                  '参数略,实际是有配置好的参数的
    rst.ActiveConnection = Nothing
    这一步出错,提示是“run-time error '3705'对象打开时,不允许操作”
    只好绕了一个大弯,用SAVE方法...
    我是第一次用VB6做项目,不符合习惯的地方,还请各位提醒
      

  7.   

    又碰到一个怪事...
    刚把INSERT的SQL语句拼好,还没执行,数据库里居然会出现这条记录
    我之前使用CONN后CLOSE掉了啊,
      

  8.   

    拼SQL语句之前数据库内没记录的,拼完就有了,哪怕下一条语句是不相干的Msgbox都会有。
      

  9.   

    Set GetRsWithConnSqlstring = rst然后你就关掉rst,conn就好了set rstGetMaxId =GetRsWithConnSqlstring (strConn, strSql)
    然后看看结果
      

  10.   

    Set GetRsWithConnSqlstring = rst然后你就关掉rst,conn就好了
    set rstGetMaxId =GetRsWithConnSqlstring (strConn, strSql)==========================
    下面对rstGetMaxId 做任何操作都会提示,对象关闭时,不允许操作。。