我在一个基于对话框的工程里想用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

解决方案 »

  1.   

    问题补充,按照同样的方法  我在一个新工程中操作   是不报错的!  My Ga!!这是什么原因呢?
      

  2.   


    唉,兄弟姐妹 不好意思  看了一个RT的解释  我重新ReBuild All之后  问题解决 Over了  !!!
      

  3.   

    ::CoInitialize(NULL) ::CoUninitialize(); 最好放在***App的Initial函数里面
      

  4.   

    成熟的ADO开发类:
    http://www.codeproject.com/KB/database/caaadoclass1.aspx
      

  5.   

    BOOL CDataStoreroomApp::InitInstance()
    {
    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();
    }