我用Microsoft Access97创建了一个数据库再用VC6向导对数据库进行测试连接,提供者是:Microsoft Jet 4.0 OLE DB Provider当数据库没有密码时一切正常,建立的程序也可以成功打开数据库但是,在我给数据库加上密码的时候,在向导的“连接”那一页加上密码也不能连接数据库...,后来经过多次尝试发现(在“所有”那一页的:“Jet OLE DB:Database Password:“加上正确的密码后向导可以连接成功),本以为就这样成功了,可是没有想到这样建立的工程一样无法打开数据库这是为什么?

解决方案 »

  1.   

    access的密码最长20位
    一定检查一下你的密码长度
    将密码改为123测试一下-----------------------
                   May you succeed!
                     ------------------------
      

  2.   

    ACCESS是只有密码没有用户的数据库,因此打开方式跟打开SQL是不一样的
    所以你的连接字符串需要如下这样写:
    str_DBSrc.Format( "Provider=Microsoft.Jet.OLEDB.4.0; \
    Data Source=%s; \
    Persist Security Info=False; \
    Jet OLEDB:Database Password=%s;", lp_DBSrc, lp_PWD);
    //   LPCTSTR lp_DBSrc  ---  DataBae  path & Name
    //   LPCTSTR lp_PWD   --- Password
    没有整理,想你也看的明白
      

  3.   

    TO  storein(满天星):
    他是用向导生成连接的,不需要自己写Open的TO 搂主:
    你试试用Microsoft Jet 3.1 OLE DB Provider连接-----------------------
                   May you succeed!
                     ------------------------
      

  4.   

    那你也可以试一下这样打开
    ADO
    CString sql;
    sql.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s;" ,source, password);...hr = this->m_pConnection->Open( (_bstr_t)sql, "", "",adModeUnknown);
      

  5.   

    nonocast(如果你信仰光明,那是因为到处都是黑暗!) Microsoft Jet 3.1 OLE DB Provider 试过了不行
    hr = this->m_pConnection->Open( (_bstr_t)sql, "", "",adModeUnknown);ADO的我看不明白?
      

  6.   

    代码如下:class CTXWYSet : public CCommand<CAccessor<CTx> >
    {
    public:
    CString m_StrFilter;
    CSession session;

    HRESULT Open(char *pFN)
    {
    HRESULT hr;
    CDataSource db;
    CDBPropSet dbinit(DBPROPSET_DBINIT); dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINFO, true);
    dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);
    dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);
    dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "");
    dbinit.AddProperty(DBPROP_AUTH_PERSIST_ENCRYPTED, false);
    dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
    dbinit.AddProperty(DBPROP_AUTH_USERID, "Admin");
    dbinit.AddProperty(DBPROP_INIT_DATASOURCE,pFN);
    dbinit.AddProperty(DBPROP_INIT_MODE, (long)16);
    dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
    dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING,OLESTR(";COUNTRY=0;CP=1252;LANGID=0x0409"));
    dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033); hr = db.OpenWithServiceComponents("Microsoft.Jet.OLEDB.3.51", &dbinit); if (FAILED(hr))
    return hr; hr = session.Open(db); if (FAILED(hr))
    return hr;

    return OpenRowset();
    }
    HRESULT OpenRowset()
    {
    CDBPropSet propset(DBPROPSET_ROWSET);
    propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
    propset.AddProperty(DBPROP_IRowsetScroll, true);
    propset.AddProperty(DBPROP_IRowsetChange, true);
    propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE ); return CCommand<CAccessor<CTx> >::Open(session, "SELECT * FROM tx"+m_StrFilter, &propset); }
    };
      

  7.   

    可以打开,方法如下:
    m_szInitialString.Format("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%s;Mode=Share Deny None;Extended Properties=;Jet OLEDB:System database=;Jet OLEDB:Registry Path=;Jet OLEDB:Database Password=%s;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False",lpszConnect,m_GDBPassWord);各参数说明如下:
    CString m_szInitialString
    lpszConnect为ACCESS数据库名(全路径)
    m_GDBPassWord为ACCESS数据库密码然后调用CDataSource的方法:
    OpenFromInitializationString(m_szInitialString.AllocSysString());最后一步:给分!
      

  8.   

    CString m_szInitialString;
    char str[]="1234";
    m_szInitialString.Format("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%s;Mode=Share Deny None;Extended Properties=;Jet OLEDB:System database=;Jet OLEDB:Registry Path=;Jet OLEDB:Database Password=%s;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False","C:\\My Documents\\db3.mdb",str);// hr = db.OpenWithServiceComponents("Microsoft.Jet.OLEDB.3.51", &dbinit);
    hr = db.OpenFromInitializationString(m_szInitialString.AllocSysString());
    if (FAILED(hr))
    return hr;
    试过了 ,还是不行呀,,难道是数据库有问题吗??给我一个可以的例子吧。 还有,可以告诉我如何关闭数据库吗?我运行了Close()可是它只关闭行集,,数据库还是不可以改写,我想实现恢复数据,就是把备份的考过来,可是数据还在使用行不通!!
    我的E-mail:[email protected]
    还有完成后你可以来这里 
    http://expert.csdn.net/Expert/topic/2263/2263005.xml?temp=.5767328
    再拿一百分!!!谢谢!!!!!