Re: question about secondary database -
01-20-2006
, 12:06 AM
Dear Ron,
I post my codes as follows, and the error is that
testing.cpp: Primary databases may not be configured with duplicates
//----------------------------------------------------------------------------------------------------
#include "stdafx.h"
#define DATABASE_HOME ".\\database"
#define CONFIG_DATA_DIR ".\\files"
DbEnv * env = new DbEnv(0);
Db * db, * sdb;
int open_database();
int close_database();
int dewey_rep(Db *sdbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey);
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
try
{
open_database();
close_database();
}
catch(DbException e)
{
cerr << e.what() << endl;
return e.get_errno();
}
return 0;
}
int open_database()
{
env->set_error_stream(&cerr);
env->set_errpfx("testing.cpp");
(void)env->set_data_dir(CONFIG_DATA_DIR);
env->open(DATABASE_HOME, DB_INIT_MPOOL, 0);
db = new Db(env, 0);
db->set_flags(DB_DUP);
db->open(0, "primary.db", NULL, DB_BTREE, DB_CREATE, 0);
sdb = new Db(env, 0);
sdb->set_flags(DB_DUPSORT);
sdb->open(0, "secondary.db", NULL, DB_BTREE, DB_CREATE, 0);
db->associate(NULL, sdb, dewey_rep, 0) );
return 0;
}
int close_database()
{
db->close(0);
sdb->close(0);
env->close(0);
return 0;
}
int
dewey_rep(Db *sdbp, // secondary db handle
const Dbt *pkey, // primary db record's key
const Dbt *pdata, // primary db record's data
Dbt *skey) // secondary db record's key
{
skey->set_data( pdata->get_data() );
skey->set_size( pdata->get_size() );
// Return 0 to indicate that the record can be created/updated.
return (0);
}
//----------------------------------------------------------------------------------------------------
Regards,
Joe |