VC数据库操作中在添加第一条记录时报内存错误,

zhanghnll 2003-12-25 03:34:09
各位大虾,小弟最近学VC数据库编程,遇到一个问题,请帮忙解决;

首先用VC的默认方式创建了一个简单的对话框程序,为了给它添加数据库功能,
用ClassWWizard创建了一个基于"CRecordset"类的新类"CMySet",
并在"CMyDlg.h"中申明了变量:
public:
CDatabase m_base;
CMySet *pSet;
在"CMyDlg.cpp"文件中;
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWgServerDlg::IDD, pParent)
{
CString str = T("ODBC;DSN= MyDB");
m_base.Open(NULL, FALSE, FALSE, str );
pSet = new CSet(&m_base);
}
增加记录
CMyDlg::OnAdd()
{
if (!pSet->IsOpen())
pSet->Open();
pSet->AddNew();
pSet->m_Name = "张三";
pSet->m_Age = 22;
pSet->Update();
pSet->Close();
}
可是问题出现了,在第一次添加数据的时候,程序报下面的错误"
"0x5f477959指令引用的"0x00000014"内存,该内存不能为"read"
点确定关掉错误信息窗口,再检查数据库,却发现此记录已经添加成功了;
出现这次错误后,以后添加数据在不会报错误,
可把数据库清空后在添家,次错误又重新出现了,好郁闷,
...全文
46 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghnll 2004-02-13
  • 打赏
  • 举报
回复
非常感谢liuzhitie123,按你的操作就不会报错了,不知道这是不是MFC的BUG,
结贴了,怎么给分啊!
志铁 2004-01-13
  • 打赏
  • 举报
回复
如果在 CMySet 对应的数据库表中有时间类型的字段,请在CMySet的构造函数添加该字段的
初始值: m_TimeValue = 0;
jiey 2004-01-13
  • 打赏
  • 举报
回复
udbtuu2003说得很好,学习中……
udbtuu2003 2003-12-28
  • 打赏
  • 举报
回复
zhanghnll(男儿当学C++) 你的错误原因:
当记录集(源数据库)被打开时pSet指针指向的数据库第一条记录的前一行,当然不能在这一行写入信息了。
解决方法正如上面仁兄说的,在打开记录集后,添一句MoveFirst()函数,或者MoveNext(),这样pSet就指向数据库的第一条记录了。
yintongshun 2003-12-27
  • 打赏
  • 举报
回复
先手动在数据库表中添加一条MoveFirst试试
2000mylove 2003-12-27
  • 打赏
  • 举报
回复
楼上说的没错
就往那儿调,能解除问题的
jiey 2003-12-27
  • 打赏
  • 举报
回复
可能是数据库当前指针的问题。你试着在添加之前调用MoveFirst()函数,或者MoveNext()等移位函数
zhanghnll 2003-12-25
  • 打赏
  • 举报
回复
有,但不在这个表中,这有影响吗?
丁淇石头 2003-12-25
  • 打赏
  • 举报
回复
数据库中有时间类型的字段吗?
zhanghnll 2003-12-25
  • 打赏
  • 举报
回复
你是说当表为空时,打开表记录指针的初始位置要自己指定的吗,
joe_fox1025 2003-12-25
  • 打赏
  • 举报
回复
是不是指针位置错误?
我记得数据库中有个游标指针用来插记录的,他从几开始算我就记不得了
zhanghnll 2003-12-25
  • 打赏
  • 举报
回复
各位大哥,谁能帮帮我啊,我都快晕了!
sdhdy 2003-12-25
  • 打赏
  • 举报
回复
请楼主点管理按钮,转VC版

4,012

社区成员

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

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