try
{ if (m_DataPtr.m_pSampleSet!=NULL)
{
m_DataPtr.m_pSampleSet->Close();
}
m_DataPtr.m_pSampleSet->Open(dbOpenDynaset,strQuery);
//我追中在上面报错,提示 access voilation
//m_DataPtr.OpenDatabase("PL300.mdb");
}
catch (CDaoException* e)
{
::DaoErrorMsg(e);
e->Delete();
}
{ if (m_DataPtr.m_pSampleSet!=NULL)
{
m_DataPtr.m_pSampleSet->Close();
}
m_DataPtr.m_pSampleSet->Open(dbOpenDynaset,strQuery);
//我追中在上面报错,提示 access voilation
//m_DataPtr.OpenDatabase("PL300.mdb");
}
catch (CDaoException* e)
{
::DaoErrorMsg(e);
e->Delete();
}
{
m_DataPtr.m_pSampleSet- >Open(dbOpenDynaset,strQuery);
}
提示 存储违例:Access Violation
我就是单独执行m_DataPtr.m_pSampleSet- >Close();
也出错啊
try { if (m_DataPtr.m_pSampleSet!=NULL)
{
m_DataPtr.m_pSampleSet- >Close();
}
m_DataPtr.m_pSampleSet- >Open(dbOpenDynaset,strQuery);
//我追中在上面报错,提示 access voilation
//m_DataPtr.OpenDatabase("PL300.mdb");
}
catch (CDaoException* e)
{
::DaoErrorMsg(e);
e- >Delete();
}
数据库吗?
这段干啥用的??防御什么?
if (m_DataPtr.m_pSampleSet!=NULL)
{
m_DataPtr.m_pSampleSet- >Close();
}
指针被关闭之后是不是还需要重新CreateInstance才能open??
--------------------------------------------------
关闭之后它就为NULL,应该可以直接使用吧,它应该可以直接打开
-----------
这段代码应该比较独立了吧,假如都弄上来比较麻烦了啊
pp->Open(dbOpenDynaset,strQuery);
} catch (CDaoException* e)
{
::DaoErrorMsg(e);
e- >Delete();
}
也出错,这是怎么回事啊!??
pp- >Open(dbOpenDynaset,strQuery);
}
这个错误很正常,如果不出错才奇怪了,因为*pp是一个空指针,什么也没有指向,所以就出现了错误。
关键是看:m_DataPtr.m_pSampleSet-〉close()里面是如何处理的,如果程序中
是把m_DataPtr.m_pSampleSet = NULL;
那么再使用,就出现了问题。
所以,我认为是m_DataPtr.m_pSampleSet = NULL为空了
{
m_DataPtr.m_pSampleSet- >Close();
}
m_DataPtr.m_pSampleSet- >Open(dbOpenDynaset,strQuery); // 执行这一句为什么不判断了???
我的strQuery是strQuery.Format("select sample,..,curveDown from [sample] where user=#%s#",g_strUser)
g_strUser是一个全局的用户名变量, |
省略
{
m_DataPtr.m_pSampleSet- >Close();
}
m_DataPtr.m_pSampleSet- >Open(dbOpenDynaset,strQuery); // 执行这一句为什么不判断了???
//这里有后面的catch检测
是把m_DataPtr.m_pSampleSet = NULL;
那么再使用,就出现了问题。
所以,我认为是m_DataPtr.m_pSampleSet = NULL为空了
--------------------------------------------------
Close()就是CDaoRecordset的一个函数,不是我定义的.m_pSampleSet是一个CDaoRecordset的一个指针.
换个最简单的看看
select sample,..,curveDown from [sample] where user=#%s#",
为什么是#%s#?日期?
表名和列名相同?sample?
但不是这里的问题,我改了也是这样.
我一开始就没有注意到这里来,因为在这块我一执行数据库操作,就提示"存储违列"
应该是这样才正常,不过不太清楚楼主的想法
----------------------------------------
我是在这里查询一个表,然后用LIST显示出来一些字段,和画出一些字段的曲线.
但是我在这里一操作数据库就"存储违列"
//这里有后面的catch检测
----------------
倒!!!指针为0时也用catch来处理???m_DataPtr.m_pSampleSet的值是否为0,设个断点看一下。
不过话说回来,dao我也没用过,我用的是ado
{
m_DataPtr.m_pSampleSet- >Open(dbOpenDynaset,strQuery);
} 你换一下试试看,再问