ADO打开数据库出错, 老是出现Runtime Error!

UlTMa 2006-11-20 05:21:08
我在 StdAfx.h中加入如下一行(语句在一行)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")

一步一步做下来, 运行时总是提示Runtime Error,程序就关掉了
下面是在对话框的OnInitDialog()函数中的数据库连接代码. 数据库为Class,用户DSN,已建立, 用户和密码为空
m_pConnection.CreateInstance(__uuidof(Connection));
// 好像在这一步就出错了
// 换成这样也不行 m_pConnection->Open("DSN=Class", "", "", -1);
m_pConnection->Open("DSN=Class;UID="";PID=""", "", "", -1);

m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open("SELECT * FROM list",
m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);

_variant_t varName, varID;
try
{
m_pRecordset->MoveFirst();
varName = m_pRecordset->GetCollect("名字");
varID = m_pRecordset->GetCollect("序号");
if (varName.vt != VT_NULL) m_csResvName = (char *)_bstr_t(varName);
if (varID.vt != VT_NULL) m_lResvID = varID.lVal;
}
catch (_com_error *e)
{
CString Error;
Error.Format("Open database error: %s", e->ErrorMessage());
AfxMessageBox(Error);
}
大家帮忙看一下 啊
...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
UlTMa 2006-11-20
  • 打赏
  • 举报
回复
好的谢谢你!
问题解决了,似乎 用CoInitialize() 替换 AfxOleInit()就可以了. 不明白...
尘雨 2006-11-20
  • 打赏
  • 举报
回复
不要在C*App中初始化,一个建议,你的情况可以在对话框界面的初始化方法中调用。用CoInitialize()初始化比AfxOleInit()适用性更强。
UlTMa 2006-11-20
  • 打赏
  • 举报
回复
我是在C**App中初始化的
if(!AfxOleInit())
{
AfxMessageBox("Component Initialize error!");
return FALSE;
}
是不是 AfxOleInit()了? 用CoInitialize()?
醉马不肖 2006-11-20
  • 打赏
  • 举报
回复
CoInitialize(NULL)
{



}
CoUninitialize()
尘雨 2006-11-20
  • 打赏
  • 举报
回复
if(FAILED(::CoInitialize(NULL)))
{
return;//初始化失败,do something
}
放在
m_pConnection.CreateInstance(__uuidof(Connection));
之前
尘雨 2006-11-20
  • 打赏
  • 举报
回复
if(FAILED(::CoInitialize(NULL)))
{
;//do something
}
在使用ADO的时候,最开始要初始化COM环境

4,011

社区成员

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

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