update出错

jj601 2003-12-06 11:53:45
我在程序里面需要先执行select查询,找到没有被加工的记录(加工状态字段status为0),加工该记录的内容,然后字段status更新为1,代码如下:
sql1="select str,num from Table1 where status =0";
retcode=SQLExecDirect(hstmt1,(UCHAR FAR*)sql1, SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt1, 1, SQL_C_CHAR, szStr, LEN1,cbStr);
SQLBindCol(hstmt1, 2, SQL_INTEGER, &sNum, 0,cbNum);
}
if(SQLFetch(hstmt1)!=SQL_NO_DATA)
{
对szStr进行操作;
更新字段status
sql2="Update Table1 set status =1 where num =";
将sNum的值转换成字符串n;(因为sNum是SQLINTEGER型)
strcat(sql2,n);
retcode1=SQLExecDirect(hstmt1,(UCHAR FAR*)sql2, SQL_NTS);
}
但是retcode1的返回值总是-1,不成功,不知道怎么回事?
我去掉前面的select语句,单独执行update语句就可以。
...全文
57 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jj601 2003-12-06
  • 打赏
  • 举报
回复
我好像没有用到打开数据库这个代码,只是连接数据库,然后执行select
leon_z 2003-12-06
  • 打赏
  • 举报
回复
你打开数据库的代码是什么样的
leon_z 2003-12-06
  • 打赏
  • 举报
回复
SQLGetDiagRec
jj601 2003-12-06
  • 打赏
  • 举报
回复
我就是不知道是不是select语句是否跟update语句有影响啊。还有,我不知道怎么查看SQLstate,希望DX能给点指点,谢了。还有,刚才在看别人的帖子里,提到,是否跟打开数据库方式有关,如果数据库是以只读方式打开的话,就不可以执行update了,这个在什么地方设置呢?
beyondtkl 2003-12-06
  • 打赏
  • 举报
回复
看看你的sql语句是否正确 输出来 然后到数据库后台执行一下.
leon_z 2003-12-06
  • 打赏
  • 举报
回复

还有就是,你看一下SQLSTATE,如果出错了,应该是有返回错误号的,再在MSDN中查一下,我想应该就知道是哪个地方出错了

可以确定不是SQL语句的问题了
lygfqy 2003-12-06
  • 打赏
  • 举报
回复
没有看的太清楚,不过如果要更新相应的字段
select中最好要把相应的字段取出
leon_z 2003-12-06
  • 打赏
  • 举报
回复
我一般是用ADO来进行数据库编程,你这种方法我不是很了解,但我想先问你一下,你这样的操作能否连继执行SQL语句而互不影响呢?有没有做过试验呀
jj601 2003-12-06
  • 打赏
  • 举报
回复
我把这条update语句放在sql server的查询分析器中执行了的,可以更新字段status
jj601 2003-12-06
  • 打赏
  • 举报
回复
这种方式我也试过了,因为有了以前做那个insert的经验,但是这次在执行了select之后,就没法执行update了。去掉前面的select语句,就可以执行update。不知道怎么回事?
leon_z 2003-12-06
  • 打赏
  • 举报
回复
另外,你跟踪lpSQL的值,然后抄下来到SQL Server的查询分析器中去试一下(别抄错了),能行的话就是其它问题啦
leon_z 2003-12-06
  • 打赏
  • 举报
回复
我一般这样用
char lpSQL[1024] = "";
sprintf(lpSQL,"Update Table1 set Status = 1 where num = %d",n);

jj601 2003-12-06
  • 打赏
  • 举报
回复
RETCODE loc_retcode;
HDBC loc_hdbc;
unsigned char* szDSN=(unsigned char *)DSN;
unsigned char* szUID=(unsigned char *)UID;
unsigned char* szAuthStr=(unsigned char *)PWD;

loc_retcode=SQLAllocConnect(GDAI_henv,&loc_hdbc); file://创建连接句柄
if (!(loc_retcode==SQL_SUCCESS || loc_retcode==SQL_SUCCESS_WITH_INFO))
return -1;
loc_retcode=SQLConnect(loc_hdbc,szDSN,SQL_NTS,szUID,SQL_NTS,szAuthStr,SQL_NTS);//建立与数据源的连接
if (!loc_retcode==SQL_SUCCESS)
{
GetErrorInfoFromODBC(loc_hdbc);
SQLFreeConnect(loc_hdbc);//连接失败
return -1;
}

SQLAllocStmt(loc_hdbc,&loc_hstmt);

leon_z 2003-12-06
  • 打赏
  • 举报
回复
那你是怎么连接的呢,能把代码贴出来一下吗

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧