我用Microsoft Access97创建了一个数据库再用VC6向导对数据库进行测试连接,提供者是:Microsoft Jet 4.0 OLE DB Provider当数据库没有密码时一切正常,建立的程序也可以成功打开数据库但是,在我给数据库加上密码的时候,在向导的“连接”那一页加上密码也不能连接数据库...,后来经过多次尝试发现(在“所有”那一页的:“Jet OLE DB:Database Password:“加上正确的密码后向导可以连接成功),本以为就这样成功了,可是没有想到这样建立的工程一样无法打开数据库这是为什么?
一定检查一下你的密码长度
将密码改为123测试一下-----------------------
May you succeed!
------------------------
所以你的连接字符串需要如下这样写:
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
没有整理,想你也看的明白
他是用向导生成连接的,不需要自己写Open的TO 搂主:
你试试用Microsoft Jet 3.1 OLE DB Provider连接-----------------------
May you succeed!
------------------------
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);
hr = this->m_pConnection->Open( (_bstr_t)sql, "", "",adModeUnknown);ADO的我看不明白?
{
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); }
};
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());最后一步:给分!
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
再拿一百分!!!谢谢!!!!!