急!为什么ado在调试时连不上数据库??? 如果直接运行一切正常,用加断点或者用F5运行就在connection->open处出错!!是不是很奇怪!该测试程序是基于对话框的,除了这点代码(还有ado的导入部分),什么也没有! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 式不是路径错了。Dao*recorderdet呢? 我用的是Ado的智能指针,是这样定义的: _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; 再再看是不是連結字串錯了.可用下面的代碼獲得連結字串,再調用Open,試試看. _bstr_t bstr=""; HRESULT hr; oledb::IDataSourceLocatorPtr p_IDSL=NULL; _ConnectionPtr p_conn=NULL; try { hr=p_IDSL.CreateInstance(__uuidof(oledb::DataLinks)); if(FAILED(hr)) _com_issue_error(hr); p_conn=p_IDSL->PromptNew(); if(NULL!=p_conn) bstr=p_conn->ConnectionString ; } catch(_com_error& e) { ::MessageBox(this->m_hWnd,e.ErrorMessage (),"Error",MB_OK); } CString DBConnectStr=(char*)bstr; .......可能要在stdafx.h中加以下代碼#include <comdef.h>#import "E:\program files\common files\system\ole db\oledb32.dll" rename_namespace("oledb") 我直接用的ODBC,如果连接字串错了,直接运行也应该连不上呀现在的情况是:直接运行没错,断点调试连不上 它們的連結字串好像有點差別的,下面是一個OLE DB連結字串Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\WINDOWS\Desktop\db1.mdb 已经初始化COM了。系统错误信息:Unhandled exception in test.exe(KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.如果用try...catch捕获,错误信息是:未指定的错误!我的环境是win2000 server + vc6 你的m_pConnection->Open()的参数不对HRESULT hr;if(SUCCEEDED(hr)){ hr=m_pConnection->Open(_bstr_t(L"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\\My Documents\\machine\\Machine97.mdb"),_bstr_t(L""),_bstr_t(L""),adModeUnknown); if(SUCCEEDED(hr)) { m_IsConnectionOpen=TRUE; } else { AfxMessageBox("连接数据库失败!");//,"提示" return FALSE; }}else{ AfxMessageBox("连接数据库失败!");//,"提示" return FALSE;}可以连通ACCESS97数据库,2000的只要把OLEDB.3.51改为OLEDB.4.0 把catch部分写成如下形式:catch(_com_error& e){ CString Error=e.ErrorMessage(); _bstr_t bstrDescription=e.Description(); AfxMessageBox(Error+(LPCTSTR)bstrDescription);}再运行一下,可能额外的错误信息对你有帮助。 to soloz: 这里必须用oledb模式嘛?我用的是ado,连接子串应该没有错吧(而且能连上数据库) vc++调用网路摄像机sdk 服务器端接收到图片数据后,用StretchDIBits()方法重新显示失败dc上面重新显示失败!求指点 动态创建线程 串口控制实现在多窗体间,大家有好的建议没有,能讨论下不。 求TransmitFile的例子程序 问个webbrowser 控件的问题 散分 顺便问正令我头痛的问题 刚加入,没带什么礼物,向大家推荐一个vc编程站点吧! 也许简单,但是谁能说清楚怎么办,50芬 怎样切分视图? VC编译器中如何彻底删除一个类 C 语言的头函 在VB6.0 中如何定义
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_bstr_t bstr="";
HRESULT hr;
oledb::IDataSourceLocatorPtr p_IDSL=NULL;
_ConnectionPtr p_conn=NULL;
try
{
hr=p_IDSL.CreateInstance(__uuidof(oledb::DataLinks));
if(FAILED(hr))
_com_issue_error(hr);
p_conn=p_IDSL->PromptNew();
if(NULL!=p_conn)
bstr=p_conn->ConnectionString ;
} catch(_com_error& e)
{
::MessageBox(this->m_hWnd,e.ErrorMessage (),"Error",MB_OK);
}
CString DBConnectStr=(char*)bstr;
.......
可能要在stdafx.h中加以下代碼
#include <comdef.h>
#import "E:\program files\common files\system\ole db\oledb32.dll" rename_namespace("oledb")
现在的情况是:直接运行没错,断点调试连不上
Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\WINDOWS\Desktop\db1.mdb
系统错误信息:Unhandled exception in test.exe(KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.
如果用try...catch捕获,错误信息是:未指定的错误!
我的环境是win2000 server + vc6
HRESULT hr;
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open(_bstr_t(L"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\\My Documents\\machine\\Machine97.mdb"),_bstr_t(L""),_bstr_t(L""),adModeUnknown);
if(SUCCEEDED(hr))
{
m_IsConnectionOpen=TRUE;
}
else
{
AfxMessageBox("连接数据库失败!");//,"提示"
return FALSE;
}
}
else
{
AfxMessageBox("连接数据库失败!");//,"提示"
return FALSE;
}
可以连通ACCESS97数据库,2000的只要把OLEDB.3.51改为OLEDB.4.0
catch(_com_error& e)
{
CString Error=e.ErrorMessage();
_bstr_t bstrDescription=e.Description();
AfxMessageBox(Error+(LPCTSTR)bstrDescription);
}
再运行一下,可能额外的错误信息对你有帮助。