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

ADO连ACCESS为什么总是_com_error?解决思路

2012-01-19 
ADO连ACCESS为什么总是_com_error?圣章个人财务管理系统.exe中的0x7c812a5b处未处理的异常:MicrosoftC++异

ADO连ACCESS为什么总是_com_error?
圣章个人财务管理系统.exe   中的   0x7c812a5b   处未处理的异常:   Microsoft   C++   异常:   内存位置   0x0012f0f4   处的   _com_error。
代码如下:
//   stdafx.h   :   标准系统包含文
#include <oledb.h>


//   datebaseDlg.h   :   头文件
#pragma   once
#import "C:\Program   Files\Common   Files\System\ado\msado15.dll "\
no_namespace   rename( "EOF ", "adoEOF ")

public:
_ConnectionPtr   m_pConnection;
_RecordsetPtr   m_pRecordset;


BOOL   CdatebaseApp::InitInstance()
{
if(!AfxOleInit())
{
AfxMessageBox(L "未能初始化COM ");
return   FALSE;
}
CoInitialize(NULL);


BOOL   C圣章个人财务管理系统Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
        CString   strConn=(L "Provider=Microsoft.Jet.OLEDB.4.0;User   ID=Admin;Data   Source=C:\\data.mdb; ");

bstr_t   bstrConn=strConn.AllocSysString();
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection-> Open(bstrConn, " ", " ",-1);
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset-> Open( "Select   *   from   收支表 ",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t   varId,varMoney,varState,varSource,varRemark,varDate;
CString   m_Data;
TRY
{
m_pRecordset-> MoveFirst();
varId=m_pRecordset-> GetCollect( "ID ");
varMoney=m_pRecordset-> GetCollect( "金额 ");
varState=m_pRecordset-> GetCollect( "资金状态 ");
varSource=m_pRecordset-> GetCollect( "来源/去向 ");
varRemark=m_pRecordset-> GetCollect( "备注 ");
varDate=m_pRecordset-> GetCollect( "日期 ");
if(varId.vt!=VT_NULL)
m_Id=(char*)_bstr_t(varId);
if(varMoney.vt!=VT_NULL)
m_Money=(char*)bstr_t(varMoney);
if(varState.vt!=VT_NULL)
m_State=(char*)_bstr_t(varState);
if(varSource.vt!=VT_NULL)
m_Source=(char*)_bstr_t(varSource);
if(varRemark.vt!=VT_NULL)
m_Remark=(char*)_bstr_t(varRemark);
if(varDate.vt!=VT_NULL)
m_Data=(char*)_bstr_t(varDate);


}
CATCH_ALL(e)
AfxMessageBox(L "初始化失败 ");
END_CATCH_ALL
UpdateData(FALSE);


void   C圣章个人财务管理系统Dlg::OnBnClickedButton2()
{
//   TODO:   在此添加控件通知处理程序代码
if(!m_pRecordset-> BOF)
{
_variant_t   varId,varMoney,varState,varSource,varRemark,varDate;
        CString   m_Data;
TRY
{
m_pRecordset-> MovePrevious();
varId=m_pRecordset-> GetCollect( "ID ");
varMoney=m_pRecordset-> GetCollect( "金额 ");
varState=m_pRecordset-> GetCollect( "资金状态 ");
varSource=m_pRecordset-> GetCollect( "来源/去向 ");
varRemark=m_pRecordset-> GetCollect( "备注 ");
varDate=m_pRecordset-> GetCollect( "日期 ");
if(varId.vt!=VT_NULL)
m_Id=(char*)_bstr_t(varId);
if(varMoney.vt!=VT_NULL)
m_Money=(char*)bstr_t(varMoney);
if(varState.vt!=VT_NULL)
m_State=(char*)_bstr_t(varState);
if(varSource.vt!=VT_NULL)
m_Source=(char*)_bstr_t(varSource);
if(varRemark.vt!=VT_NULL)
m_Remark=(char*)_bstr_t(varRemark);
if(varDate.vt!=VT_NULL)
m_Data=(char*)_bstr_t(varDate);
}
CATCH_ALL(e)
AfxMessageBox(L "Error ");
END_CATCH_ALL


UpdateData(FALSE);
}


当记录在第一条时,一按button2就出错,提示: "圣章个人财务管理系统.exe   中的   0x7c812a5b   处未处理的异常:   Microsoft   C++   异常:   内存位置   0x0012f0f4   处的   _com_error。 "




[解决办法]
MoveFirst是移动到第一条记录,不是移动到第一条记录之前
如果记录集没有记录的话,BOF和EOF都为真
[解决办法]
很可能是access本身的缺陷所造成的。这个我是深受其害。解决办法有一个:就是不用第一条记录,这样你会少很多麻烦的!建议尝试一下!
[解决办法]

m_pRecordset-> MovePrevious();
if(m_pRecodrset-> BOF)
{
varId=m_pRecordset-> GetCollect( "ID ");
varMoney=m_pRecordset-> GetCollect( "金额 ");
varState=m_pRecordset-> GetCollect( "资金状态 ");
varSource=m_pRecordset-> GetCollect( "来源/去向 ");
varRemark=m_pRecordset-> GetCollect( "备注 ");
varDate=m_pRecordset-> GetCollect( "日期 ");
}
//向前移动指针先判断是否到记录头

热点排行