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( "日期 ");
}
//向前移动指针先判断是否到记录头