数据库连接失败,高手请进

vovobobo 2009-08-11 10:06:37
我用ADO连接ACCESS数据库,但总是说连接数据库失败,用下面的语句获取错误信息为:未知的错误
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
之后我将获取错误信息的命令做了一下改动
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.Description());

这样在调试过程中出现以下问题(中间我一直点“继续”,发现错误成了死循环 就点了“中断”)
错误信息如下:
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e51c 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e554 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e560 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e554 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e51c 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e560 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e554 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e51c 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e560 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e554 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e51c 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e560 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e554 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e51c 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e560 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e554 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e51c 处的 _com_error。
抗力计算.exe 中的 0x7c81eb33 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012e560 处的 _com_error。

我的程序是很常用的语句 都是从网上搞下来的,程序如下:
CDialog::OnInitDialog();

// TODO: 在此添加额外的初始化

/************************* 连接数据库 ********************/
_ConnectionPtr m_pConnection;// 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=变形抗力数据库.mdb;Persist Security Info=False"),"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(_T("数据库连接失败,确认数据库 变形抗力数据库.mdb 是否在当前路径下!")); 当点击后 弹出此对话框 说明数据库连接失败
return FALSE;
}


/************************* 建立数据集 ********************/
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。
try
{
m_pRecordset->Open("SELECT * FROM 品种",
// 查询品种表中所有字段

m_pRecordset.GetInterfacePtr(), // 获取库接库的IDispatch
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

/************************* 读取数据 ********************/
_variant_t var;
CString strKind;
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox(_T("表内数据为空"));
return FALSE;
}

// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("品种");
if(var.vt != VT_NULL)
strKind = (LPCSTR)_bstr_t(var);
m_ComBoxList1.AddString(strKind);
m_pRecordset->MoveNext();
}

// 默认列表指向第一项,同时移动记录指针并显示
m_ComBoxList1.SetCurSel(0);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

/************************关闭记录集************************/
m_pRecordset->Close();
m_pRecordset=NULL;

/************************* 关闭数据库连接 ********************/ “我将此处注释掉也是一样的”
if (m_pConnection->State)
m_pConnection->Close();
m_pConnection=NULL;
...全文
1089 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shunliu726 2010-05-22
  • 打赏
  • 举报
回复
楼主问题解决了没有啊?小弟遇到了相同的问题,麻烦你给讲讲啊
mei2235 2010-05-18
  • 打赏
  • 举报
回复
楼主,你的问题解决了没?方便的话可不可以给我讲讲,我也是遇到同样的问题,正困扰着,
asksgp 2009-08-12
  • 打赏
  • 举报
回复
方便的话把你的代码发给我shanggp6402@163.com,我想看看到底怎么回事。。。
asksgp 2009-08-12
  • 打赏
  • 举报
回复
下班了,晚上回去看
vovobobo 2009-08-12
  • 打赏
  • 举报
回复
编译什么的都没问题
我修改了错误信息显示的代码,发现错误老是定位在msado15.tli文件中,不断点击“retry”,发现错误在该文件中的多个的事件的return处,且在这几处不断循环
vovobobo 2009-08-11
  • 打赏
  • 举报
回复
另外:当调试时
会弹出错误框,提示:debug assertion failure
点击retry oleinit.cpp文件下的 ASSERT(!pState->m_bNeedTerm); // calling it twice? 这一句
不知道什么原因造成的
vovobobo 2009-08-11
  • 打赏
  • 举报
回复
我看了看输出
在编译的时候 有这么几个警告 会不会是这个原因造成的
d:\2005\0610\抗力计算\抗力计算\shujuku.cpp(56) : warning C4129: “: 不可识别的字符转义序列
d:\2005\0610\抗力计算\抗力计算\shujuku.cpp(56) : warning C4129: “d”: 不可识别的字符转义序列
d:\2005\0610\抗力计算\抗力计算\shujuku.cpp(56) : warning C4129: “d”: 不可识别的字符转义序列


针对的是:m_pConnection->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\2005\\0610\\抗力计算\\debug\\database.mdb;Persist Security Info=False"),"","",adModeUnknown); database.mdb以前是 变形抗力数据库.mdb 我改为英文也是一样
f22fbi 2009-08-11
  • 打赏
  • 举报
回复
哪条语句出错?
zming 2009-08-11
  • 打赏
  • 举报
回复
(1) 数据库是否与你的exe文件在同一目录下
(2) 数据库请改用英文名称
wanghao111 2009-08-11
  • 打赏
  • 举报
回复
编码方式正确吗?
cckck1103 2009-08-11
  • 打赏
  • 举报
回复
初始化数据库相关的com组件

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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