qq_24631785 2014-12-18 15:40 采纳率: 0%
浏览 2429

[ODBC Microsoft Access Driver]非法的游标状态 ????

 char sql[81];
sprintf(sql,"INSERT INTO studen (xingming,xuehao,sex,age) VALUES ('%s',%d,'%s',%d)",name,numxx,sex,nAge);
// inserts a new row to the table
int count = db.Execute(sql);

以上代码是通过ODBC插入一个记录,编程语言是C++。
但是db.Execute后,运行提示“"[Microsoft][ODBC Microsoft Access Driver]非法的游标状态 "

网上搜索不到解决方法,只好求助各位了

xingming 是数据库的姓名字段;
xuehao 是代表学号,数字类型

  • 写回答

1条回答 默认 最新

  • WorldMobile 2014-12-19 00:53
    关注

    请参考以下内容:
    ODBC连接数据持续执行两次sql语句结果提示:[Microsoft][ODBC Microsoft Access Driver]非法的游标状态
    例如:
    sprintf(sqlStr,"select passCode from passCode_t where stationCode='A01' and currentDate='2011-03-19'");
    connectDB_ACCESS(); //连接ACCESS数据库
    retcode = SQLExecDirect(hstmtAcc,(SQLCHAR *)sqlStr,SQL_NTS);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    retcode=SQLBindCol(hstmtAcc,1,SQL_C_CHAR,passCode_str,4,&cb);

    while (TRUE)
    {
    retcode = SQLFetch(hstmtAcc);

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
    }else {
    break;
    }

    }
    }
    //紧接着执行下面的语句
    sprintf(sqlStr,"update passCode_t set passCode='001' where stationCode='A01' and currentDate='2011-03-19'");
    retcode = SQLExecDirect(hstmtAcc,(SQLCHAR *)sqlStr,SQL_NTS);

    结果提示上面开头处的错误!
    在第一次执行完语句后,调用:
    retcode = SQLCloseCursor(hstmtAcc);
    retcode = SQLFreeStmt(hstmtAcc, SQL_CLOSE);
    通过微软的sql server资料了解到http://support.microsoft.com/kb/253010/zh-cn
    引用:
    允许在单个连接上的多个并发的语句句柄的方式使用 Microsoft SQL Server ODBC 驱动程序 (sqlsrv32.dll) 时, 繁忙的连接可能会留下游标 SQL Server 数据库中打开无警告或通知给用户。发生这种情况主要情况下在一个或多个语句句柄在流水 (仅向前、 只读游标) 模式下工作。

    这可以有两个而不是严重的负面影响。第一个副作用是游标可以保持打开,消耗内存并可能会导致锁对记录打开数据库服务器上。第二个的副作用是在非流水 ODBC 的语句句柄上执行语句的后续尝试可能会生成没有明显原因的以下错误:
    SQLState: 24000 [Microsoft] [ODBC SQL Server 驱动程序] 无效的游标状态

    此 行为发生与 sqlsrv32.dll 驱动程序版本 3.70.0690 (Microsoft 数据访问组件 [MDAC] 2.1 SP2) 和更早版本,并与 sqlsrv32.dll 驱动程序版本 3.70.820 (MDAC 2.5/windows 2000)。

    在流水模式操作正忙于 SQL Server ODBC 驱动程序时没有其他活动发生在连接上直到完成该操作。这包括 sp_cursorclose 调用驱动程序问题时调用 SQLFreeStmt 或 SQLCloseCursor。

    当驱动程序出现故障时关闭游标 SQLFreeStmt 和 SQLCloseCursor 这两个返回 SQL_SUCCESS 时,ODBC,要过帐没有错误和失败的迹象是可用于应用程序或用户。但是,光标保持在 SQL Server 中打开,并且该语句句柄仍具有与其关联的光标标识符。

    评论

报告相同问题?

悬赏问题

  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?