📄 subject_63048.htm
字号:
<p>
序号:63048 发表者:风儿 发表日期:2003-12-01 10:54:10
<br>主题:请问有什么办法能够让Access数据库不让用户能打开(比如用密码保护),而程序照样可以访问?
<br>内容:请问有什么办法能够让Access数据库不让用户能打开(比如用密码保护),而程序照样可以访问?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-12-01 11:00:21
<br>内容:当然可以呀,accress中 <BR>工具->安全->设置数据库密码<BR>程序访问打开数据库时,<BR>以ODBC为例:<BR>db.OpenEx("DSN=mydatasource;UID=admin;PWD=password",CDatabase::noODBCDialog);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风儿 回复日期:2003-12-01 11:37:34
<br>内容:浪际天涯:<BR>只用用ODBC连接?ODBC我嫌它要在客户机上去手动(有没有自动设的?)的太麻烦了。ADO的就没有办法了,对吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-12-01 15:31:29
<br>内容:ADO也可以呀,ODBC也可以在程序启动时自动注册数据源(注册数据源的代码我已经发过帖子,找一下吧)<BR>下面是ADO连接数据库的:<BR>ConnectionPtr m_pConnection;<BR>// 初始化COM,创建ADO连接等操作<BR>AfxOleInit();<BR>m_pConnection.CreateInstance(__uuidof(Connection));<BR><BR>// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,<BR>// 因为它有时会经常出现一些意想不到的错误。jingzhou xu<BR>try <BR>{ <BR> // 打开本地Access库Demo.mdb<BR> m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb;User ID=userName;Password=userPassword;","","",adOpenUnspecified);<BR>}<BR>catch(_com_error e)<BR>{<BR> AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");<BR> return FALSE;<BR>} <BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-12-01 15:39:59
<br>内容:在注册表里动态注册数据源,在app的InitInstance里写一个注册数据源的函数,我把我程序里的一段粘给你<BR>函数调用:<BR>CMyApp::InitInstance()<BR>{<BR> CString dbpath;<BR> char modulfile[200];<BR> //获取主程序路径及程序文件名<BR> ::GetModuleFileName(NULL,modulfile,200);<BR> dbpath=modulfile;<BR> //去掉程序文件名,将路径存入dbpath<BR> dbpath=dbpath.Left(dbpath.ReverseFind('\\'));<BR> //将数据库路径存入dbpath<BR> dbpath.Format("%s\\data\\ebotaxdb.mdb",dbpath);<BR> //注册数据源<BR> if(!LoadDbSource("ebootaxdb",dbpath,"远程报税企业端")){<BR> AfxMessageBox("数据初始化错误");<BR> return false;<BR> }<BR>}<BR>在App中添加一个函数,函数实现:<BR>BOOL CMyApp::LoadDbSource(CString strSourceName, CString strSourceDb, CString strDescription)<BR>{<BR> //strSourceName:数据源名<BR> //strSourceDb:数据库路径<BR> //strDescription:数据源描述<BR><BR> //存放打开的注册表键 <BR> HKEY hKey; <BR> DWORD dw; <BR> //存放注册表 API函数执行的返回值 <BR> LONG lReturn; <BR> //存放要打开的子键 <BR> CString strSubKey; <BR> //检测是否安装了 MS Access ODBC driver:odbcjt32.dll <BR> //获得 Windows系统目录 <BR> char sysDir[MAX_PATH]; <BR> char drvName[]="\\odbcjt32.dll" ; <BR> ::GetSystemDirectory (sysDir,MAX_PATH); <BR> strcat(sysDir,drvName); <BR> CFileFind findFile; <BR> if(!findFile.FindFile (sysDir)) <BR> { <BR> MessageBox(NULL,"您的计算机系统中没有安装 MS Access的 ODBC驱动程序 odbcjt32.dll,您将无法加载该类数据源。 " ,"错误",MB_ICONERROR); <BR> return false; <BR> }<BR> strSubKey="SOFTWARE\\ODBC\\ODBC.INI\\"+strSourceName; <BR> ::RegDeleteKey(HKEY_CURRENT_USER,(LPCTSTR)strSubKey);<BR> //创建 ODBC数据源在注册表中的子键 <BR> lReturn=::RegCreateKeyEx(HKEY_CURRENT_USER,(LPCTSTR)strSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,&dw); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> //设置数据源的各项参数 <BR> CString strDbq=strSourceDb; <BR> CString strDriver=sysDir; <BR> DWORD dwDriverId=25; <BR> CString strFil="MS Access;" ; <BR> DWORD dwSafeTransactions=0; <BR> CString strUid=""; <BR> lReturn=::RegSetValueEx (hKey,"DBQ" ,0L,REG_SZ,(CONST BYTE*)((LPCTSTR) strDbq),strDbq .GetLength ());<BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"Description" ,0L,REG_SZ,(CONST BYTE*)((LPCTSTR)strDescription),strDescription.GetLength()); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"Driver" ,0L,REG_SZ,(CONST BYTE*)((LPCTSTR)strDriver),strDriver.GetLength ()); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"DriverId",0L,REG_DWORD,(CONST BYTE*)(&dwDriverId),sizeof(dw));<BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"FIL" ,0L,REG_SZ,(CONST BYTE* )((LPCTSTR) strFil),strFil .GetLength ()); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"SafeTransactions" ,0L,REG_DWORD,(CONST BYTE*)(&dwSafeTransactions),sizeof(dw)); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"UID" ,0L,REG_SZ,(CONST BYTE*)((LPCTSTR)strUid),strUid.GetLength ());<BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR><BR> //创建 ODBC数据源的 Jet子键 <BR> strSubKey+="\\Engines\\Jet" ; <BR> lReturn=::RegCreateKeyEx (HKEY_CURRENT_USER ,(LPCTSTR)strSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,&dw); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> //设置该子键下的各项参数 <BR> CString strImplict=" " ; <BR> CString strUserCommit=" Yes" ; <BR> DWORD dwPageTimeout=5; <BR> DWORD dwThreads=3; <BR> DWORD dwMaxBufferSize=2048; <BR> lReturn=::RegSetValueEx (hKey,"ImplictCommitSync" ,0L,REG_SZ,(CONST BYTE*)((LPCTSTR)strImplict),strImplict.GetLength ()*1); <BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"MaxBufferSize" ,0L,REG_DWORD,(CONST BYTE*)(&dwMaxBufferSize),sizeof(dw)); <BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"PageTimeout" ,0L,REG_DWORD,(CONST BYTE*)(&dwPageTimeout),sizeof(dw));<BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"Threads" ,0L,REG_DWORD,(CONST BYTE*)(&dwThreads),sizeof(dw));<BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegSetValueEx (hKey,"UserCommitSync" ,0L,REG_SZ,(CONST BYTE*)((LPCTSTR)strUserCommit),strUserCommit.GetLength ()); <BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegCloseKey (hKey); <BR> //设置 ODBC数据库引擎名称 <BR> lReturn=::RegCreateKeyEx (HKEY_CURRENT_USER ,(LPCTSTR)("SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources"),0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,&dw); <BR> if(lReturn != ERROR_SUCCESS) <BR> return false; <BR> lReturn=::RegOpenKeyEx (HKEY_CURRENT_USER,"SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources" ,0L,KEY_WRITE,&hKey);<BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> CString strDbType="Microsoft Access Driver (*.mdb)";<BR> ::RegDeleteValue(HKEY_CURRENT_USER,strSourceName);<BR> lReturn=::RegSetValueEx (hKey,strSourceName,0L,REG_SZ,(CONST BYTE*)((LPCTSTR)strDbType),strDbType.GetLength()); <BR> ::RegCloseKey(hKey);<BR> ::flushall();<BR> if(lReturn !=ERROR_SUCCESS) <BR> return false; <BR> ::flushall();<BR> return true; <BR> <BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风儿 回复日期:2003-12-01 17:24:38
<br>内容:非常感谢“浪际天涯 ”的热心帮助!~—~<BR>你下面这段ADO连接在Access的方法,在设了“设置数据库密码”密码之后是连接不上的,这个我已试过了。另外userName和userPassword是指在Access中的?如果是在那设的,那别说“设置数据库密码”,就是不设连接也都是错误的。不然的话,我不明白我的做法跟你的有何不一样才会造成二种不同的结果了。<BR> // 打开本地Access库Demo.mdb<BR> m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb;User ID=userName;Password=userPassword;","","",adOpenUnspecified);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-12-01 17:56:05
<br>内容:Data Source=Demo.mdb;User ID=userName;Password=userPassword;<BR>改为:<BR>Data Source=你的数据库;User ID=admin;Password=你设置的密码;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风儿 回复日期:2003-12-02 10:56:43
<br>内容:m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb;User ID=admin;Password=123;","","",adOpenUnspecified); <BR><BR>这样设没错吧?<BR>可是我还是连接不上数据.:(
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -