免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: larace
打印 上一主题 下一主题

急!请教一个问题:odbc的SQLFetch问题! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-07-11 14:02 |只看该作者
因为不确定数据库里有没有那条记录.查的时候又来不及.还有别的程序在处理...

论坛徽章:
0
12 [报告]
发表于 2008-07-11 14:27 |只看该作者
所以你先应该排除是不是你查询的条件有问题。换个思路定位问题

论坛徽章:
0
13 [报告]
发表于 2008-07-14 08:48 |只看该作者
查询有问题的话,不可能只是偶尔有问题啊 而且几率不是很大.
而且这条sql语句,程序执行了很多次,很多时候都没有问题,应该能排除sql语句的问题吧

我现在就是想找SQLFetch 返回值这方面的信息.

论坛徽章:
0
14 [报告]
发表于 2008-07-14 11:34 |只看该作者
有进展了
加了诊断函数
     rc = SQLFetch(hstmt);

        printf("after fetch  rc is %d\n",rc);

        if (rc == SQL_NO_DATA_FOUND)
        {
                return 0;
        }
        else if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
        {
                return 1;
        }
        else
        {

        printf("before SQLGetDiagField!\n");
        SQLGetDiagField(SQL_HANDLE_STMT,hstmt,0,SQL_DIAG_NUMBER,&NumRecords,SQL_IS_INTEGER,NULL);
        printf("after SQLGetDiagField,NumRecords is %d\n",NumRecords);
        for( Counter = 0; Counter < NumRecords; Counter ++)
        {
                SQLGetDiagRec(SQL_HANDLE_STMT,hstmt,Counter,SQLState, &NativeErr, ErrMsg, sizeof(ErrMsg),&ErrMsgLen);
                printf("SQLSTATE is: %s \n",SQLState);
                printf("Errmsg is: %s \n",ErrMsg);
        }

日志是

before SQLGetDiagField!                          
after SQLGetDiagField,NumRecords is 3!           
SQLSTATE is: ?                                 
Errmsg is: #                                    
SQLSTATE is: 34                                 
Errmsg is: [MERANT][ODBC 20101 driver]1836072   
SQLSTATE is: 34                                 
Errmsg is: [MERANT][ODBC 20101 driver]1836072   

这个号通过什么方法可以查到呢?有介绍这方面的网站或书籍吗

论坛徽章:
0
15 [报告]
发表于 2008-07-14 12:44 |只看该作者

回复 #14 larace 的帖子

一开始就应该用SQLGetDiagRec了!

  1.  判定你的SQL语句有没有问题很简单,把它在SQLplus运行一下,如果正常,那么就不用怀疑你的SQL 语句了,否则就是SQL语句的问题了.
  2. SQLExecDirect或(SQLPrepare,SQLExecute)执行后会有返回值,判断一下.
  3. SQLExecDirect或(SQLPrepare,SQLExecute)执行很正常,那么有可能是SQLBindCol的问题
  4. SQLExecute执行不正常,那么有可能是SQLBindParameter的问题
  5. 其它的原因(不知道你的真实情况,因此只能这样说)

论坛徽章:
0
16 [报告]
发表于 2011-01-11 15:59 |只看该作者
返回-1说明函数执行失败!可以通过调试看看是什么原因?
一般情况:
        SQL_SUCCESS 返回值为0,执行成功,无错误信息。
        SQL_SUCCESS_WITH_INFO返回值大于0, 函数执行成功,但可能产生了非致命的错误。
        SQL_ERROR 返回值小于0,函数执行失败。

论坛徽章:
0
17 [报告]
发表于 2011-01-11 16:46 |只看该作者
if (recode == SQL_SUCCESS || recode == SQL_SUCCESS_WITH_INFO)
{
    /*  都认为成功 */
}

像这样就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP