关于Berkeley DB的数据库操作的问题,急
进性插入操作db.put的时候,定义的两个DBT变量,如果set_data属性的参数是字符串的话,那么NOOVERWRITE属性可以正常实现,如果参数是指针的话,程序就无法正常运行,即使输入相同数据也不会出现错误。具体程序如下:
LPTSTR ptr1,ptr2;
ptr1 = (LPTSTR)wParam;
ptr2 = (LPTSTR)lParam;
Dbt db_Key;
Dbt db_Data;
db_Key.set_data(ptr1);
db_Key.set_size(sizeof(*ptr1));
db_Data.set_data(ptr2);
db_Data.set_size(sizeof(*ptr2));
// db_Key.set_data("game");
// db_Key.set_size(sizeof("game"));
// db_Data.set_data("basket");
// db_Key.set_size(sizeof("basket"));
int m_result;
m_result = database.put(NULL,&db_Key,&db_Data,0);
if(m_result != 0)
{
if (m_result == DB_KEYEXIST)
{
MessageBox("Key Data Has Aleady Exist!");
}
else
{
MessageBox("Input Failed!");
}
}
database.close(0);
使用上面未注释代码的话,即使输入相同数据,系统也不报错,但使用注释掉的部分即可得到正常结果。
问题点数:100、回复次数:3Top
1 楼bird1982(看星星的鸟)回复于 2005-11-02 09:20:23 得分 0
怎么没人搭理???我迷糊~~~Top
2 楼balloy()回复于 2005-11-02 14:45:08 得分 50
你注释掉的第四句应该是:
db_Data.set_size(sizeof("basket"));
把
Top
3 楼jlxys(逍遥)回复于 2006-01-06 11:42:34 得分 50
1.init_dbt(&key, &data)使用前初始化
2.key.size要指针指向内存大小(你现在是sizeof(*ptr1) 只是4字节)Top




