我在一个基于对话框的工程里想用Access数据库,然后我就先在:
stdafx.h中加入:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename ("EOF","EndOfFile")
然后在:OnInitDialog()中::CoInitialize(NULL)初始化COM环境,在OnDestroy()中 ::CoUninitialize();释放COM环境到这里运行不报错。之后我在对话框的header file里添加连接对象指针的时候出错了,我是这样写的,也应该是没有问题的啊!!!!
public:
_ConnectionPtr m_pConn;具体的报错是:
e:\ultrasonic test system\ultrasonic test systemdlg.h(18) : error C2146: syntax error : missing ';' before identifier 'm_pConn'
e:\ultrasonic test system\ultrasonic test systemdlg.h(18) : error C2501: '_ConnectionPtr' : missing storage-class or type specifiers
e:\ultrasonic test system\ultrasonic test systemdlg.h(18) : error C2501: 'm_pConn' : missing storage-class or type specifiers
stdafx.h中加入:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename ("EOF","EndOfFile")
然后在:OnInitDialog()中::CoInitialize(NULL)初始化COM环境,在OnDestroy()中 ::CoUninitialize();释放COM环境到这里运行不报错。之后我在对话框的header file里添加连接对象指针的时候出错了,我是这样写的,也应该是没有问题的啊!!!!
public:
_ConnectionPtr m_pConn;具体的报错是:
e:\ultrasonic test system\ultrasonic test systemdlg.h(18) : error C2146: syntax error : missing ';' before identifier 'm_pConn'
e:\ultrasonic test system\ultrasonic test systemdlg.h(18) : error C2501: '_ConnectionPtr' : missing storage-class or type specifiers
e:\ultrasonic test system\ultrasonic test systemdlg.h(18) : error C2501: 'm_pConn' : missing storage-class or type specifiers
唉,兄弟姐妹 不好意思 看了一个RT的解释 我重新ReBuild All之后 问题解决 Over了 !!!
http://www.codeproject.com/KB/database/caaadoclass1.aspx
{
InitCommonControls();
if (!AfxOleInit())
{
AfxMessageBox("OLE初始化出错!");
return FALSE;
}
try
{
m_ADOConn.CreateInstance(__uuidof(Connection));
m_ADOConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DataBase.mdb;Persist Security Info=False;Jet OLEDB:Database Password=12;","","",adModeUnknown);
}
catch(_com_error &e)
{
CString err;
err.Format("%s",(char*)e.Description());
AfxMessageBox("数据库连接失败!"+err);
return FALSE;
}
catch(...)
{
AfxMessageBox("未知错误");
}
m_pADOSet.CreateInstance(__uuidof(Recordset)); CWinApp::InitInstance(); AfxEnableControlContainer(); // 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CDataStoreroomDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用“确定”来关闭
//对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用“取消”来关闭
//对话框的代码
} // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
return FALSE;
}
BOOL CDataStoreroomApp::ADOExecute(_RecordsetPtr &ADOSet,_variant_t &strSQL)
{
if(ADOSet->State==adStateOpen)
ADOSet->Close();
try
{
ADOSet->Open(strSQL,m_ADOConn.GetInterfacePtr(),adOpenStatic,
adLockOptimistic,adCmdUnknown);
return true;
}
catch(_com_error &e)
{
CString err;
err.Format("ADO Error:%s",(char*)e.Description());
//AfxMessageBox(err);
return false;
}
}
int CDataStoreroomApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
if(adStateOpen==m_ADOConn->State)
m_ADOConn->Close();
m_ADOConn.Release();
if(adStateOpen==m_pADOSet->State)
m_pADOSet->Close();
m_pADOSet.Release();
return CWinApp::ExitInstance();
}