在一个线程内部,用ado访问access,连接数据库时总是提示“无效指针”

时间:2021-05-04 17:28:34
    本人用vc2010建了一个MFC对话框工程。在主线程用ado访问access,一切正常。但创建了一个线程后,在该线程内部,再用ado访问access,连接数据库时总是提示“无效指针”。求解!
注:
1.我在stdafx.h文件导入msado15:
#import "..\CPokerSev\msado15.dll" rename("EOF","adoEOF")


2.在主对话框类的OnInitDialog()添加初始化com的代码:

    if(!AfxOleInit())
    {
AfxMessageBox("OLE初始化出错!");
return FALSE;
    }


3.以下是访问数据库的函数:

void CarrySql(ADODB::_RecordsetPtr &m_pRecordset, const CString &strCmd)
{
//连接字符串
CString DBName="Provider=Microsoft.ACE.OLEDB.12.0;Data source=..\\CPokerSev\\Cards.accdb";
//创建一个连接实例
ADODB::_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(ADODB::Connection));
//为Recordset对象创建实例
m_pRecordset.CreateInstance("ADODB.Recordset");
try
{
m_pConnection->Open(_bstr_t(DBName),"","",ADODB::adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return;
}

try
{
//创建表
_variant_t RecordsAffected;
m_pRecordset=m_pConnection->Execute(_bstr_t(strCmd), &RecordsAffected, ADODB::adCmdText);
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return;
}

if(m_pConnection->State)
m_pConnection->Close();
}


这个是工程代码链接:
http://pan.baidu.com/share/link?shareid=1450855055&uk=4011340732

6 个解决方案

#1


主线程跟子线程不属于同一个套间了,所以要在子线程里添加
void CarrySql(ADODB::_RecordsetPtr &m_pRecordset, const CString &strCmd)
{
    CoInitialize(NULL);




    CoUninitialize();//最后要调用这个函数释放
}

#2


线程中初始化COM类库等
CoInitialize(NULL);

#3


嗯 问题解决了! 谢谢!

#4


怎么解决的,能否告诉我一下,我也遇到此问题??

#5


已解决………………

#6


能告诉我一下吗?

#1


主线程跟子线程不属于同一个套间了,所以要在子线程里添加
void CarrySql(ADODB::_RecordsetPtr &m_pRecordset, const CString &strCmd)
{
    CoInitialize(NULL);




    CoUninitialize();//最后要调用这个函数释放
}

#2


线程中初始化COM类库等
CoInitialize(NULL);

#3


嗯 问题解决了! 谢谢!

#4


怎么解决的,能否告诉我一下,我也遇到此问题??

#5


已解决………………

#6


能告诉我一下吗?