以下是我的保存和读取的函数
比如我连续保存1 2 3 4 5 6 7条记录 读出时的顺序却是1 3 5 7 2 4 6 为何会这样?
static BOOL SaveBlock( DB *db, char *index, CDBSerialize &obj )
{
CDBOutStream out;
obj.save( out ); DBC *cursor;
if ( db->cursor( db, NULL, &cursor, 0 ) != 0 )
{
db->close( db, 0 );
return FALSE;
} DBT key, data;
memset( &key, 0, sizeof( key ) );
memset( &data, 0, sizeof( data ) );
key.data = index;
key.size = strlen( index );
data.data = ( void * ) out.GetData();
data.size = out.GetSize(); return ( cursor->c_put( cursor, &key, &data, DB_KEYFIRST ) == 0 );
}
BOOL CIMDatabase::Load( PtrList &l )
{
DB * db = GetDatabse( imHist );
if ( !db )
return FALSE; DBC *cursor;
if ( db->cursor( db, NULL, &cursor, 0 ) != 0 )
{
db->close( db, 0 );
return FALSE;
} DBT key, data;
memset( &key, 0, sizeof( key ) );
memset( &data, 0, sizeof( data ) ); while ( cursor->c_get( cursor, &key, &data, DB_NEXT ) == 0 )
{
string s( ( const char * ) key.data, key.size );
} cursor->c_close( cursor );
db->close( db, 0 );
return TRUE;
}
比如我连续保存1 2 3 4 5 6 7条记录 读出时的顺序却是1 3 5 7 2 4 6 为何会这样?
static BOOL SaveBlock( DB *db, char *index, CDBSerialize &obj )
{
CDBOutStream out;
obj.save( out ); DBC *cursor;
if ( db->cursor( db, NULL, &cursor, 0 ) != 0 )
{
db->close( db, 0 );
return FALSE;
} DBT key, data;
memset( &key, 0, sizeof( key ) );
memset( &data, 0, sizeof( data ) );
key.data = index;
key.size = strlen( index );
data.data = ( void * ) out.GetData();
data.size = out.GetSize(); return ( cursor->c_put( cursor, &key, &data, DB_KEYFIRST ) == 0 );
}
BOOL CIMDatabase::Load( PtrList &l )
{
DB * db = GetDatabse( imHist );
if ( !db )
return FALSE; DBC *cursor;
if ( db->cursor( db, NULL, &cursor, 0 ) != 0 )
{
db->close( db, 0 );
return FALSE;
} DBT key, data;
memset( &key, 0, sizeof( key ) );
memset( &data, 0, sizeof( data ) ); while ( cursor->c_get( cursor, &key, &data, DB_NEXT ) == 0 )
{
string s( ( const char * ) key.data, key.size );
} cursor->c_close( cursor );
db->close( db, 0 );
return TRUE;
}
解决方案 »
- 用VC实现像GOOGLE搜索界面那样的东西,当EDIT里的内容变化时,下面出现的一响应框,将相关内容显示出来
- VC6.0中关于绘图的一个奇怪问题
- 我做了一个调用安装程序的程序,这个安装程序安装完后会有一个提示重新启动的对话框。我想让这个提示重新启动的对话框给去掉,怎么做啊。
- LINK : fatal error LNK1104: cannot open file "mfc42ud.lib"
- 送5000分,+10000边逢币,+100000猫币,详情请进,:)
- 帮我解释一下
- 请求帮助
- 有关GlobalAddAtom
- 以VC为开发语言的MCSD到底值多少钱?
- HOW TO:用VC建立Excel文件(我很多分数可用,每个有价值的答复至少20分)
- 高分请教:库函数sprintf,有遇到这样问题的吗? 详情见内容
- 关于CSliderCtrl准确点击的问题..
然后,取得时候按照这个自增的字段序号来取,这样,就会保证和你插入的顺序一致了。