各位大虾,小弟最近学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"
点确定关掉错误信息窗口,再检查数据库,却发现此记录已经添加成功了;
出现这次错误后,以后添加数据在不会报错误,
可把数据库清空后在添家,次错误又重新出现了,好郁闷,
用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"
点确定关掉错误信息窗口,再检查数据库,却发现此记录已经添加成功了;
出现这次错误后,以后添加数据在不会报错误,
可把数据库清空后在添家,次错误又重新出现了,好郁闷,
当记录集(源数据库)被打开时pSet指针指向的数据库第一条记录的前一行,当然不能在这一行写入信息了。
解决方法正如上面仁兄说的,在打开记录集后,添一句MoveFirst()函数,或者MoveNext(),这样pSet就指向数据库的第一条记录了。
初始值: m_TimeValue = 0;
结贴了,怎么给分啊!