关于_RecordsetPtr的一个奇怪问题,执行Open时总是出现异常,大家帮忙看看哪写错了吗?多谢

小小的一株含羞草 2005-02-03 03:01:56
// 初始化recordset
pRs.CreateInstance(__uuidof(Recordset));
pRs->CursorLocation = adUseClient;

hr = pRs->Open("select * from office",
(_variant_t)((IDispatch *) m_pConnection, true),
adOpenStatic, adLockBatchOptimistic, adCmdText);
...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢 zxhcloth(旭日) youqingsky(剑雨),改成这样就可以啦

to llm06(blacksheep)
我把_RecordsetPtr重定义了一下,#define EntityDataset _RecordsetPtr

(_variant_t)((IDispatch *) m_pConnection, true)这种写法是在msdn上看到的,看来msdn也不可尽信啊,多谢各位的热心帮助,结贴!
llm06 2005-02-03
  • 打赏
  • 举报
回复
高不懂,怎么是kernel32.dll的错误。

而且,我有一段和你几乎相同的代码,不过是连access的,没有任何问题。

有不同点:
EntityDataset 是什么东东?为什么不是_recordsetptr?
youqingsky 2005-02-03
  • 打赏
  • 举报
回复
(_variant_t)((IDispatch *) m_pConnection这句不要这样用,我那时候这样用也出错,好像连接对像有一个方法是cnn.GetInterfacePtr()试试吧
zxhcloth 2005-02-03
  • 打赏
  • 举报
回复
hr = pRs->Open("select * from office",
(_variant_t)((IDispatch *) m_pConnection, true),
adOpenStatic, adLockBatchOptimistic, adCmdText);
改成这个试试
hr = pRs->Open("select * from office",
m_pConnection.GetInterfacePtr(),
adOpenStatic, adLockBatchOptimistic, adCmdText);
  • 打赏
  • 举报
回复
to happyparrot(快乐鹦鹉):
pRs.CreateInstance(__uuidof(Recordset));创建成功了。

to llm06(blacksheep):
m_pConnection已经连接了。
  • 打赏
  • 举报
回复
如下是完整的代码(只是为了测试能否实现可以断开连接的记录集写的一段测试代码):
单步调试到Open语句时弹出了一个信息框,上面写着:
Unhandled exception in test.exe(KERNEL32.DLL):0xE06D7363:Microsoft C++ Exception

=============================================================================
CString m_Server = "NMS51"; // 服务器名称
CString m_UserID = "sa";
CString m_Password = "";
CString m_entrycontent = "zxcms";
int m_ConnectionTimeout = 15;

HRESULT hr = S_OK;
_ConnectionPtr m_pConnection = NULL;
EntityDataset pRs = NULL;

CString connectionstring;
CString cmdText;

// 初始化COM
if FAILED(CoInitialize(NULL))
{
CoUninitialize();
return;
}

try
{
// 创建ADO连接
hr = m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionTimeout = m_ConnectionTimeout;
connectionstring = "Provider=Sybase.ASEOLEDBProvider.2;Initial Catalog=" + m_entrycontent + ";User ID=" + m_UserID + ";Password=" + m_Password + ";Persist Security Info=False;Server Name=" + m_Server;
// 打开数据库
m_pConnection->Open((_bstr_t)connectionstring, (_bstr_t)m_UserID, (_bstr_t)m_Password, adModeUnknown);

// 初始化recordset
pRs.CreateInstance(__uuidof(Recordset));
pRs->CursorLocation = adUseClient;

hr = pRs->Open("select * from office",
(_variant_t)((IDispatch *) m_pConnection, true),
adOpenStatic, adLockBatchOptimistic, adCmdText);

// 断开recordset与数据库的连接
pRs->PutRefActiveConnection(NULL);

m_pConnection->Close();
m_pConnection = NULL;

FillinListBox(pRs);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

// 释放COM
CoUninitialize();
llm06 2005-02-03
  • 打赏
  • 举报
回复
m_pConnection已经连接了吗?

创建可以断开的记录集,先连数据库,创建记录集,然后断开。使用->putrefconnection(null)。

再有,你open的时候返回的是什么错误?
快乐鹦鹉 2005-02-03
  • 打赏
  • 举报
回复
pRs.CreateInstance(__uuidof(Recordset));这个创建成功了没有呢?
  • 打赏
  • 举报
回复
我是想创建一个可以断开连接的记录集,单步调试执行到Open语句时就出现异常,有人遇见过类似问题吗?
stavck 2005-02-03
  • 打赏
  • 举报
回复
错误代码是多少,代码 贴全一点。

4,011

社区成员

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

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