我在程序中用ADO控件连接本地Access数据库时,如果Access本身有密码的话,同时我输入的密码是正确的(我试了许多次了),ADO根本就连接不上,系统提示Access数据库文件没有独占使用或者被其它应用程序调用。反而,如果我连接一个空密码的Access数据库时,则连接成功。本来我以为是该Access数据库文件坏了,于是我用Access程序重新建立一个新的(有密码)的Access文件,但是连接时还是出现该问题,而如果是空密码时却连接成功!!!
同时,我在代码中用原生ADO代码来连接也出现相同的问题,必须空密码才能成功!!!为什么会出现这种情况,在此请有经验的大侠指点!!!
请不要跟我说重装系统,我只想看看有没有其他人也碰到过相同的情况和改问题的解决方法。
注:Access文件是2000版本;Delphi6已打过SP2补丁,系统Win2000 Server也打过SP2补丁。
同时,我在代码中用原生ADO代码来连接也出现相同的问题,必须空密码才能成功!!!为什么会出现这种情况,在此请有经验的大侠指点!!!
请不要跟我说重装系统,我只想看看有没有其他人也碰到过相同的情况和改问题的解决方法。
注:Access文件是2000版本;Delphi6已打过SP2补丁,系统Win2000 Server也打过SP2补丁。
解决方案 »
- 窗体置顶
- 如何在系统文件夹下创建文本文件
- ★★(急)求购“酒店管理系统”源代码!!!Delphi + MS SQL开发,私下交易,1万元左右,有意请看要求......
- 求助一个用WebBrowser1控件做的浏览器问题???
- 我的sql语句为何出错呀?
- 回答小问题送分!!
- 为什么delphi xe 中DatasetProvider 的BeforeGetRecords的参数OwnerData: OleVariant总是空值?
- delphi能作出java的水波效果吗?
- 请朋友们介绍一下:DELPHI组件开发的好网站或是好书籍
- 急!请问Delphi中如何读取Formula One(*.vts)文件,正确回答者满分奉上。
- 求一:ADSL上网能用的传真软件或在局域网能共享的拔号软件
- 求助高手
sConnectString : String;
begin
if Not AdoCn.connected then
begin
sConnectString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + gsDatabase + ';Persist Security Info=False;Jet OLEDB:Database Password=system';
AdoCn.ConnectionString := sConnectString;
AdoCn.LoginPrompt := False;
AdoCn.Connected := True;
end;
使用正确的话绝对没有问题!
我程序里这样: 我的密码是0000加上下面的
Jet OLEDB:Database Password=0000;这段试试Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=业务数据库.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:Database Password=0000;
我刚才试了一下,还是一样的错误!!!同时发现输入的密码出现在Password文本框
ADO控件组一般都用来连接ACCESS数据库的。在数据库没有设密码的时候,用CONNECTSTRING就可以实现连接,但是如果有密码的,这时这个属性就不能用了,无论你怎么设置都无法连接!
该怎么解决呢?我问了一下朋友,对有密码的ACCESS数据库如果用ADO只能动态设定,而且这里面的参数很复杂,其实并不是设的东西负责而是这个语句很繁琐!
下面我把代码贴出,以供参考!const{TADOConnection 连接数据库的参数} ADOLinkString ='Provider=Microsoft.Jet.OLEDB.4.0;' + 'Password=%s;' //用户工作组(*.mdw)密码 + 'User ID=%s;' //用户工作组(*.mdw)用户名Admin + 'Data Source=%s;' //数据库文件(*.mdb)位置 + 'Persist Security Info=True;' + 'Mode=ReadWrite;' // 数据库打开方式 + 'Extended Properties=""' //默认值为空 + 'Jet OLEDB:System Database=""' //用户工作组文件 + 'Jet OLEDB:Registry Path=""' //注册路径 + 'Jet OLEDB:Database Password=%s;' //数据库密码 + 'Jet OLEDB:Engine Type=1;' + 'Jet OLEDB:Database Locking Mode=1;' + 'Jet OLEDB:Global Partial Bulk Ops=2;' + 'Jet OLEDB:Global Bulk Transactions=1;' + 'Jet OLEDB:New Database Password=%s;' //?密码 + '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';var mainDBPath, mdwPassword, mdwUserID, mdbDataSource, mdbUserID, mdbPassword, mdbNewPassword:string;begin mainDBPath :=ExtractFilePath(ParamStr(0)); mdwPassword :=''; mdwUserID :='Admin'; mdbDataSource :=mainDBPath+'data\hongyu.mdb'; mdbUserID :='Admin'; mdbPassword :='123456'; mdbNewPassword :=''; //---这样设置完后再连接到控件的属性上就可以了!---// with ADOQry_User do begin {以上是给变量赋值} Active :=False; ConnectionString :=Format(ADOLinkString, [mdwPassword, mdwUserId, mdbDataSource, mdbPassword, mdbNewPassword]);{初始连接参数} end;end;
http://www.codelphi.com/channel/jsjn/read.asp?ano=764
besthing 评论于 2002-7-19 14:26:00 今有一更好方法,不敢独自享用.分享!
当我们使用ADO控件的CONNECTIONSTRING属性时候,弹出自动连接字符串配置向导.共四个页面(PROVIDER\CONNECTION\ADVANCED\ALL),只要将该向导翻到ALL页面,然后在Jet OLEDB:Database Password项目添上ACCESS数据库密码就可以.而CONNECTION的页面只需要选择一下数据库所在的目录就可以了(DELPHI5需在该页输入ACCESS数据库密码,DELPHI6不需要,空着就可以了)