读书人

MFC停用ADO链接Access添加变量运行有一

发布时间: 2013-09-06 10:17:17 作者: rapoo

MFC下用ADO链接Access添加变量运行有一定情况出错
本人使用ADO连接access在list上显示出来,由于只用到读这一功能,所添加的也比较简单
自己写了一个OnInitADOConn()和ExitConnect()函数
然后在按钮函数中进行初始化(因为要实现切换数据库)
运行正常。
可是经常会出现在对话框类中添加变量,比如double asd;那么运行就会报错,而有时候又不会出错,而有时候呢是运行不出错,退出程序的时候会出错。
我的代码如下

::CoInitialize(NULL);//这个是在App的InitInstance()中添加
_ConnectionPtr m_pConnection;//定义在对话框类中
_RecordsetPtr m_pRecordset;
void CXXXDlg::ExitConnect()
{
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
}
void CParkDlg::OnInitADOConn()
{
try
{
//创建连接对象实例
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ=test.mdb;";
//使用Open方法连接数据库
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("连接数据失败,请检查数据库路径是否正确!");
}
}
//函数初始化是这样初始化的
m_Grid.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_Grid.InsertColumn(0,"员工编号",LVCFMT_LEFT,80,0);
m_Grid.InsertColumn(1,"员工姓名",LVCFMT_LEFT,80,1);
m_Grid.InsertColumn(2,"所属部门",LVCFMT_LEFT,80,2);
m_Grid.InsertColumn(3,"基本工资",LVCFMT_LEFT,80,3);
//我把以上的添加到了初始化对话框函数中,以下的添加到了按钮函数中,利用组合框生成bstrSQL的语句实现动态切换数据库,在切换之前运行m_Grid.DeleteAllItems();这个函数,使得list清空。
//连接数据库
OnInitADOConn();
//设置查询字符串
_bstr_t bstrSQL = "select * from employees order by 员工编号 desc";
//创建记录集指针对象实例
m_pRecordset.CreateInstance(__uuidof(Recordset));//该句也可以使用
// m_pRecordset.CreateInstance(“ADODB.Recordset”);代替
//打开记录集
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)
{
m_Grid.InsertItem(0,"");
m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("员工编号"));
m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("员工姓名"));
m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("所属部门"));
m_Grid.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("基本工资"));
//将记录集指针移动到下一条记录
m_pRecordset->MoveNext();
}
//断开数据库连接
ExitConnect();


现在我只要一添加一个变量,无论是什么类型的还是控件类型的变量,退出就会报错,运行开始也有可能报错。
基础类应用程序已停止工作 添加变量
请问我该如何解决? 数据库 mfc 添加变量出错


[解决办法]
::CoInitialize(NULL);//这个是在App的InitInstance()中添加
_ConnectionPtr m_pConnection;//定义在对话框类中
_RecordsetPtr m_pRecordset;
void CXXXDlg::ExitConnect()
{
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
}//这个有问题,在close后,应设置m_pRecordset=NULL,m_pConnection=NULLvoid CParkDlg::OnInitADOConn()
{
try
{
//创建连接对象实例
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ=test.mdb;";
//使用Open方法连接数据库
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("连接数据失败,请检查数据库路径是否正确!");
}
}
//函数初始化是这样初始化的
m_Grid.SetExtendedStyle(LVS_EX_FLATSB

[解决办法]
LVS_EX_FULLROWSELECT

[解决办法]
LVS_EX_HEADERDRAGDROP

[解决办法]
LVS_EX_ONECLICKACTIVATE

[解决办法]
LVS_EX_GRIDLINES);
m_Grid.InsertColumn(0,"员工编号",LVCFMT_LEFT,80,0);
m_Grid.InsertColumn(1,"员工姓名",LVCFMT_LEFT,80,1);
m_Grid.InsertColumn(2,"所属部门",LVCFMT_LEFT,80,2);
m_Grid.InsertColumn(3,"基本工资",LVCFMT_LEFT,80,3);
//我把以上的添加到了初始化对话框函数中,以下的添加到了按钮函数中,利用组合框生成bstrSQL的语句实现动态切换数据库,在切换之前运行m_Grid.DeleteAllItems();这个函数,使得list清空。
//连接数据库
OnInitADOConn();
//设置查询字符串
_bstr_t bstrSQL = "select * from employees order by 员工编号 desc";
//创建记录集指针对象实例
m_pRecordset.CreateInstance(__uuidof(Recordset));//该句也可以使用
// m_pRecordset.CreateInstance(“ADODB.Recordset”);代替
//打开记录集
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)
{
m_Grid.InsertItem(0,"");
m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("员工编号"));
m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("员工姓名"));
m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("所属部门"));
m_Grid.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("基本工资"));
//将记录集指针移动到下一条记录
m_pRecordset->MoveNext();
}
//断开数据库连接
ExitConnect();

读书人网 >VC/MFC

热点推荐