程序代码:retcode = SQLExecDirect(hstmt1, (UCHAR FAR *) "select * from msg_record where flag1=0", SQL_NTS);
while (TRUE) {//循环得到所有行 retcode = SQLFetch(hstmt1);//移动光标 if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) { printf("error SQLFetch\n"); } if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ /*得到当前光标处每列的值 */
SQLGetData(hstmt1,1,SQL_C_ULONG, &szid, 0, &cbid);
SQLGetData(hstmt1,5, SQL_C_CHAR, szflag1, 5, &cbflag1);
//////////////////////////////////////////////
中间是发送函数
//////////////////////////////////////////////
//SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
// SQLAllocStmt(hdbc1,&hstmt1);
以上两句话,注释掉的话,就可以发送查询的所有结果,但是flag1不会改变,将造成死循环,不注释的话,SQLFetch(hstmt1)就中断执行
int i =szid;
CString str;
str.Format( "update msg_record set flag1=1 where id=%d ", i);
SQLExecDirect(hstmt1, (SQLCHAR*)(LPCTSTR)str, SQL_NTS);
} else { break; } }
问题写在最后那句注释,请问retcode = SQLFetch(hstmt1);//移动光标
在循环过程中,怎样取到当前游标,并且修改这条记录,却要保证循环继续执行?请前辈指较。
while (TRUE) {//循环得到所有行 retcode = SQLFetch(hstmt1);//移动光标 if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) { printf("error SQLFetch\n"); } if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ /*得到当前光标处每列的值 */
SQLGetData(hstmt1,1,SQL_C_ULONG, &szid, 0, &cbid);
SQLGetData(hstmt1,5, SQL_C_CHAR, szflag1, 5, &cbflag1);
//////////////////////////////////////////////
中间是发送函数
//////////////////////////////////////////////
//SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
// SQLAllocStmt(hdbc1,&hstmt1);
以上两句话,注释掉的话,就可以发送查询的所有结果,但是flag1不会改变,将造成死循环,不注释的话,SQLFetch(hstmt1)就中断执行
int i =szid;
CString str;
str.Format( "update msg_record set flag1=1 where id=%d ", i);
SQLExecDirect(hstmt1, (SQLCHAR*)(LPCTSTR)str, SQL_NTS);
} else { break; } }
问题写在最后那句注释,请问retcode = SQLFetch(hstmt1);//移动光标
在循环过程中,怎样取到当前游标,并且修改这条记录,却要保证循环继续执行?请前辈指较。
if(retcode == SQL_NO_DATA_FOUND)
break;
//SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
是Free掉hstmt1,加上肯定不行
SQLFetch就是移位了
这句str.Format( "update msg_record set flag1=1 where id=%d ", i); 比较奇怪
为什么老是flag1=1呢?
这个程序就需要将 查询得到并且处理过的数据 将之flag1变成1,这个没有奇怪的吧。
// SQLAllocStmt(hdbc1,&hstmt1);
注释行去掉,这样将导致SQLFetch(hstmt1)中断执行,循环就能执行条语句了。所以我的问题是:
请问retcode = SQLFetch(hstmt1);//移动光标
在当前循环过程中,怎样取到当前游标,并且修改这条记录,却要保证循环继续执行?