关于vc用ado访问数据库的问题,在线等。。。

cryptonym 2005-07-11 02:26:35
我用的是sqlserver2000,为什么我的Rs访问GetEditMode()的时候老是出下面这个错误呢?
{"Unknown error 0x800A0BCD"}
...全文
334 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dearlee_01 2005-07-29
  • 打赏
  • 举报
回复
GetEditMode() != adEditNone
AntonlioX 2005-07-28
  • 打赏
  • 举报
回复
UP
cryptonym 2005-07-28
  • 打赏
  • 举报
回复
看来是美人知道了。准备揭帖了。
cryptonym 2005-07-18
  • 打赏
  • 举报
回复
楼上的,不是出在那一行。加上了一样出错。
cryptonym 2005-07-14
  • 打赏
  • 举报
回复
看看我的那两行函数再回答问题吧,老大
clovexmu 2005-07-14
  • 打赏
  • 举报
回复
估计代码出在这一段:
while(!recordset->AdoEOF())
{
recordset->MoveNext();
}

// recordset.MoveFirst();
将上面的一句加上去就不会出错了。

clovexmu 2005-07-14
  • 打赏
  • 举报
回复
我的是Access 2000,出现的问题是一样的。
clovexmu 2005-07-14
  • 打赏
  • 举报
回复
我也有同样的问题,不过我如果只读方式打开记录机就不会有这个问题了。
cryptonym 2005-07-12
  • 打赏
  • 举报
回复
是这样的,我打开一个记录集,等我对这个记录集操作完成以后我要关闭这个记录集。

在关闭的时候我要调用GetEditMode()看看当前这个记录集是不是还有编辑或者增加的操作没有完成,如果都完成了就关闭,如果还有动作没有完成就先结束了那个编辑或者增加的动作再关闭。

现在就是在我调用GetEditMode查看当前记录集的动作的时候出上面的错误。不知为何。
gooyan 2005-07-12
  • 打赏
  • 举报
回复
1.stdafx.h中加入
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
2。app文件的InitInstance中加入
if(S_OK!=OleInitialize(NULL)) //或者CoInitialize()
{
AfxMessageBox("初始化COM组件库错误");
}


下面就是数据库操作
_ConnectionPtr pConn;
_RecordsetPtr pRs;
CString strSQL;
pConn.CreateInstance(__uuidof(Connection));
pConn->CursorLocation=adUseClient;
strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
pConn->Open(_bstr_t(strSQL),"","",-1);

pRs.CreateInstance(__uuidof(Recordset));
pRs->CursorLocation=adUseClient;
pRs->PutActiveConnection(pConn.GetInterfacePtr());

pRs1.CreateInstance(__uuidof(Recordset));
pRs1->CursorLocation=adUseClient;
pRs1->PutActiveConnection(pConn.GetInterfacePtr());

strSQL="select * from catalog order by cataid";
pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
HR-TANG 2005-07-12
  • 打赏
  • 举报
回复
UP
saliors 2005-07-12
  • 打赏
  • 举报
回复
把问题说清楚一点,可以的话,把相关的程序贴一下
saliors 2005-07-12
  • 打赏
  • 举报
回复
你不会只在那里调用了GetEditMode吧,我怀疑是别的地方Colse了记录集,然后又调用GetEditMode函数,不妨一试?
cryptonym 2005-07-12
  • 打赏
  • 举报
回复
不用吧,前面已经判断了阿在void CAdoRecordSet::Close()里
if (m_pRecordset != NULL && m_pRecordset->State != adStateClosed)
saliors 2005-07-12
  • 打赏
  • 举报
回复
哦,你用的是ADO啊,那就改成m_pRecordset->State == adStateOpen
cryptonym 2005-07-12
  • 打赏
  • 举报
回复
m_pRecordset->IsOpen()

没哟这个方法吧?
saliors 2005-07-12
  • 打赏
  • 举报
回复
改成这样看看
EditModeEnum CAdoRecordSet::GetEditMode()
{
ASSERT(m_pRecordset != NULL);
try
{
if (m_pRecordset != NULL && m_pRecordset->IsOpen())
{
return m_pRecordset->GetEditMode();
}
}
catch (_com_error e)
{
//这里出错,而且出错的errormessage是空字符串。
CString str=e.ErrorMessage();
return adEditNone;
}
return adEditNone;
}
cryptonym 2005-07-12
  • 打赏
  • 举报
回复
void CAdoRecordSet::Close()
{
try
{
if (m_pRecordset != NULL && m_pRecordset->State != adStateClosed)
{
if (GetEditMode() != adEditNone) CancelUpdate();
m_pRecordset->Close();
}
}
catch (const _com_error& e)
{

}
}
EditModeEnum CAdoRecordSet::GetEditMode()
{
ASSERT(m_pRecordset != NULL);
try
{
if (m_pRecordset != NULL)
{
return m_pRecordset->GetEditMode();
}
}
catch (_com_error e)
{
//这里出错,而且出错的errormessage是空字符串。
CString str=e.ErrorMessage();
return adEditNone;
}
return adEditNone;
}
saliors 2005-07-12
  • 打赏
  • 举报
回复
没有相关代码的话,怎么知道什么出错了呢。把出错的地方贴一下吧。
正常调用GetEditMode是不会有错误的,我想你是不是已经把记录集Close了再调用GetEditMode,这样就会出错,你可以在GetEditMode前一句用IsOpen()看看记录集是不是打开的。

4,011

社区成员

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

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