使用游标查询记录的时候,需要连续执行3次才能得到正确的结果,前面2次都只能得到一条记录
比如key=100的时候数据库里有20条记录,前几次执行的时候能得到20条记录,但是这20条记录是完全相同的,3次之后得到结果才是正确的,请问有没有人碰到类似的问题
DBC *cursorp = NULL;
try
{
if(m_db->cursor(m_db, NULL, &cursorp, 0) != 0)
{
return FALSE;
}
if (cursorp->get(cursorp, key, data, DB_SET) != 0)
{
cursorp->close(cursorp);
return false;
}
Message *pack = (Message *)data->data;
pCtrl->ShowDbMsg(pdlg, pack);
while ((ret = cursorp->get(cursorp, key, data, DB_NEXT_DUP)) == 0)
{
pCtrl->ShowDbMsg(pdlg, pack);
}
if (ret != DB_NOTFOUND)
{
AfxMessageBox("查找出错");
}
if (cursorp != NULL)
cursorp->close(cursorp);
}
catch(...)
{
AfxMessageBox("出错啦!");
}
比如key=100的时候数据库里有20条记录,前几次执行的时候能得到20条记录,但是这20条记录是完全相同的,3次之后得到结果才是正确的,请问有没有人碰到类似的问题
DBC *cursorp = NULL;
try
{
if(m_db->cursor(m_db, NULL, &cursorp, 0) != 0)
{
return FALSE;
}
if (cursorp->get(cursorp, key, data, DB_SET) != 0)
{
cursorp->close(cursorp);
return false;
}
Message *pack = (Message *)data->data;
pCtrl->ShowDbMsg(pdlg, pack);
while ((ret = cursorp->get(cursorp, key, data, DB_NEXT_DUP)) == 0)
{
pCtrl->ShowDbMsg(pdlg, pack);
}
if (ret != DB_NOTFOUND)
{
AfxMessageBox("查找出错");
}
if (cursorp != NULL)
cursorp->close(cursorp);
}
catch(...)
{
AfxMessageBox("出错啦!");
}
解决方案 »
- VS2008的编译器在哪儿?
- 如何判断一个EXE文件是否是进程外COM组件?
- 怎么用winsock实现p2p网络中的节点?
- 远程连接oracle的问题,本地连接好用,远程不好使。
- 截屏使用底层API,不使用MFC怎么做?
- 花钱购买一个简单的滤波函数,过滤掉50Hz及以上的信号
- HOOK 到 loadlibraryA,loadlibraryB,loadlibraryEXA,loadlibraryEXW 为什么还没看到调用到进程已经调用的dll?
- 如何将一个动态连接的工程,改为静态连接那?
- 如何获得毫秒级的时间?
- 我的程序视图是从CRichEditView派生的,生成好了就可以直接打字,我想编程得到我在里面打的字符,应该怎么做?
- 为什么console不响应alt+f4
- Still statusBar ?????
DBC *cursorp;
DBT key, data;
int ret;
/* Database open omitted for clarity */
/* Get a cursor */
dbp->cursor(dbp, NULL, &cursorp, 0);
/* Initialize our DBTs. */
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
/* Iterate over the database, retrieving each record in turn. */
while ((ret = cursorp->get(cursorp, &key, &data, DB_NEXT)) == 0) {
RecordsBackCall(key.data,key.size,data.data,data.size);
}
if (ret != DB_NOTFOUND) {
/* Error handling goes here */
ret = 0;
}
/* Cursors must be closed */
if (cursorp != NULL)
cursorp->close(cursorp);
return ret;
我们的差别在于DB_NEXT和DB_NEXT_DUP