注:
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();//最后要调用这个函数释放
}
void CarrySql(ADODB::_RecordsetPtr &m_pRecordset, const CString &strCmd)
{
CoInitialize(NULL);
。
。
。
。
CoUninitialize();//最后要调用这个函数释放
}
#2
线程中初始化COM类库等
CoInitialize(NULL);
CoInitialize(NULL);
#3
嗯 问题解决了! 谢谢!
#4
怎么解决的,能否告诉我一下,我也遇到此问题??
#5
已解决………………
#6
能告诉我一下吗?
#1
主线程跟子线程不属于同一个套间了,所以要在子线程里添加
void CarrySql(ADODB::_RecordsetPtr &m_pRecordset, const CString &strCmd)
{
CoInitialize(NULL);
。
。
。
。
CoUninitialize();//最后要调用这个函数释放
}
void CarrySql(ADODB::_RecordsetPtr &m_pRecordset, const CString &strCmd)
{
CoInitialize(NULL);
。
。
。
。
CoUninitialize();//最后要调用这个函数释放
}
#2
线程中初始化COM类库等
CoInitialize(NULL);
CoInitialize(NULL);
#3
嗯 问题解决了! 谢谢!
#4
怎么解决的,能否告诉我一下,我也遇到此问题??
#5
已解决………………
#6
能告诉我一下吗?