首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC6.0使用ADO连接ACESS数据库,当有数据库但没有相应数据表(比如js_MCGS)时会出现runtime error,救命!解决方法

2014-07-25 
VC6.0使用ADO连接ACESS数据库,当有数据库但没有相应数据表(比如js_MCGS)时会出现runtime error,救命!连接A

VC6.0使用ADO连接ACESS数据库,当有数据库但没有相应数据表(比如js_MCGS)时会出现runtime error,救命!
连接ACCESS代码:
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try  
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据输入表D.MDB","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,请确认本程序数据库(后缀名为mdb)是否在当前路径下!");
this->CloseWindow();
CWnd* pw=AfxGetMainWnd();
if(pw!=NULL)
{
pw->PostMessage(WM_CLOSE,0,0);
}
return FALSE;
}  
_RecordsetPtrpHandlerRecordset;
pHandlerRecordset.CreateInstance(__uuidof(Recordset));
try
{
pHandlerRecordset->Open("SELECT * FROM js_MCGS", // 此处可能有错误!!!但捕捉不到!!m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
pHandlerRecordset->Close();
pHandlerRecordset.Release();
pHandlerRecordset = NULL;
m_pConnection->Close();
m_pConnection=NULL;
this->CloseWindow();
CWnd* pw=AfxGetMainWnd();
if(pw!=NULL)
{
pw->PostMessage(WM_CLOSE,0,0);
}
return FALSE;
}
_variant_t var;
CString strName="";
try
{
if(!pHandlerRecordset->BOF)
pHandlerRecordset->MoveLast();
else
{
AfxMessageBox("当前数据库无相应表格数据,请成功确认保存后再尝试!");
pHandlerRecordset->Close();
pHandlerRecordset.Release();
pHandlerRecordset = NULL;
m_pConnection->Close();
m_pConnection=NULL;
this->CloseWindow();
CWnd* pw=AfxGetMainWnd();
if(pw!=NULL)
{
pw->PostMessage(WM_CLOSE,0,0);
}
return FALSE;
}
//每行分别放入时间和数值数组
{
char str1[4];
CString str2="";
char *str3=str1;
for(int j=0;j<=20;j++)
{
itoa(j,str3,10);
str2="j"+(CString)str3;
var = pHandlerRecordset->GetCollect((_variant_t)str2);
if(var.vt != VT_NULL)
test_a[j]=atof((LPCSTR)_bstr_t(var));
if(j==0)
{
test_b[j]=0;
}
else
{
if(test_a[j]==0)
{
zpos=j;
break;
}
test_b[j]=test_b[j-1]+test_a[j];
}
}
x_step=test_b[j-1];
}
pHandlerRecordset->Close();
}
  catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
pHandlerRecordset->Close();
pHandlerRecordset.Release();
pHandlerRecordset = NULL;
m_pConnection->Close();
m_pConnection=NULL;
this->CloseWindow();
CWnd* pw=AfxGetMainWnd();
if(pw!=NULL)
{
pw->PostMessage(WM_CLOSE,0,0);
}
return FALSE;
}

[解决办法]
你只catch了 _com_error,把其他类型的异常也捕获一下试试
[解决办法]
catch(_com_error &e)
[解决办法]
异常捕获改成这样

C/C++ code
try{//你的ADO代码}catch (_com_error& e){AfxMessageBox(e.Description());} 

热点排行