class customer
{
public:
customer() { }
~customer() { }
public:
int c_id;
char name[10];
char address[20];
int age;
std::string sztest;
};
void init_DBT(DBT * key, DBT * data)
{
memset(key, 0, sizeof(DBT));
memset(data, 0, sizeof(DBT));
}
void CTestDBDlg::OnOK()
{
DBT key, data;
u_int32_t flags;
int ret;
customer cust;
cust.c_id = 1;
strcpy(cust.name, "wu");
strcpy(cust.address, "shanghai");
cust.age = 25;
cust.sztest = "23333";
DB* mydb = NULL;
ret = db_create(&mydb, NULL, 0);
mydb->set_flags(mydb, DB_DUP);
ret = mydb->open( mydb, NULL, "mydb2222.db", NULL, DB_BTREE, DB_CREATE, 0);
init_DBT(&key, &data);
// 第一条记录
key.size = sizeof(int);
key.data = &(cust.c_id);
data.size = sizeof(customer);
data.data = &cust;
ret = mydb->put(mydb, NULL, &key, &data,0);
// 第二条记录
init_DBT(&key, &data);
strcpy( cust.name, "wuhuiran" );
key.size = sizeof(int);
key.data = &(cust.c_id);
data.size = sizeof(customer);
data.data = &cust;
ret = mydb->put(mydb, NULL, &key, &data,0);
// init_DBT(&key, &data);
// other ot;
// ot.id = 10;
// strcpy(ot.name, "hhh");
//
// key.size = sizeof(int);
// key.data = &(ot.id);
// data.size = sizeof(other);
// data.data = &ot;
// ret = mydb->put(mydb, NULL, &key, &data, 0);
memset(&cust, 0, sizeof(customer));
// memset(&ot, 0, sizeof(other));
int get_key = 1;
// 用游标读取重复的记录
DBC *cursorp_;
mydb->cursor( mydb, NULL, &cursorp_, 0 );
init_DBT(&key, &data);
key.size = sizeof(int);
key.data = &get_key;
data.data = &cust;
data.ulen = sizeof(customer);
data.flags = DB_DBT_USERMEM;
while( cursorp_->c_get( cursorp_, &key, &data, DB_NEXT ) != DB_NOTFOUND )
{
CString strMsg;
strMsg.Format("%d_%s", cust.c_id, cust.name);
AfxMessageBox(strMsg);
}
if ( cursorp_ != NULL )
{
cursorp_->c_close( cursorp_ );
cursorp_ = NULL;
}
}