有关Berkeley DB的一点问题,请大家帮忙啊

bird1982 2005-11-01 05:31:39
用Berkeley DB作数据库,在往表中添加数据时,需要使用Dbt数据结构,Dbt.set_data()参数如果放字符串,那么程序就正常,如果放字符串指针,运行就不正常,哪位帮忙解决下,具体代码如下。
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"));
database.put(NULL,&db_Key,&db_Data,NOOVERWRITE);
如果用上面的代码,那么输入数据时,即使重复输入数据也不报错,但如果用注释掉的部分代码,那么就会弹出错误信息。
...全文
114 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bird1982 2005-11-02
  • 打赏
  • 举报
回复
大家来帮忙看看阿,急
balloy 2005-11-02
  • 打赏
  • 举报
回复
一个猜测:

由于你使用的是"game"这样的临时变量,在db_Key.set_data("game");执行完后,系统立即将该块内存释放。当你执行database.put一句时,db_key中内容已经失效。

如果你愿意,可以通过断点调试来进行这项实验
bird1982 2005-11-02
  • 打赏
  • 举报
回复
恩,那个地方是写错了,但是无关痛痒,即使是对的,问题也是依旧存在的
bobob 2005-11-02
  • 打赏
  • 举报
回复
set_size是设置什么size?前后的写法size大小不同
balloy 2005-11-02
  • 打赏
  • 举报
回复
你注释掉的第四句应该是:
db_Data.set_size(sizeof("basket"));



4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧