我用AdoConnection连接,根本无法设置其action为true,并且提示:数据库已被其他程序“独占”请各位不吝指教,谢谢!
解决方案 »
- 远程计算机监控系统
- 各位高手,能否用一个二进制文件来为维护2张不同数据表内容?
- ADO在C/S中多表连接更新的问题
- 请问在delphi中如何调用另一个delphi程序并且将参数传递进去?
- 如何在存储过程中返回执行中的错误提示字符串?然后在Delphi程序中显示出来
- 简单问题,请问如何分别得到,年,月,日
- 高分求救!!如何在窗体中调用Web服务器文件???
- 一个关于"删重复"的软件制作,有经验的朋友过来看看
- 我想做一个档案管理系统。。。
- 如何让一个从TComponent继承下来的组件栏它的Parent(是一个Form)的事件。
- 如何在线程执行完之后,释放资源
- ShellTreeView的显示的问题,还望大家多多指教!
超级猛料给你作参考:
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;
begin
ConnectionString := 'Provider = MicroSoft.jet.OLEDB.4.0;'+
'Persist Security Info = False;'+
'Data Source=D:\*.mdb;'+//数据库本地目录
'Mode = ReadWrite;'+
'Jet OLEDB:Database Password=*****;'// 加入密码
Connected := True;//Open DataBase
end;
procedure TForm1.FormCreate(Sender: TObject);
var
s1,s2:string;
beginif copy(GetCurrentDir,length(GetCurrentDir),1)='\' then
s1:='Data Source=' + GetCurrentDir + 'bobopxn.dll;'
else
s1:='Data Source=' + GetCurrentDir + '\bobopxn.dll;';
s2:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;';
s2:=s2+s1;
s2:=s2+'Mode=Share Deny None;Extended Properties="";';
s2:=s2+'Jet OLEDB:System database="";';
s2:=s2+'Jet OLEDB:Registry Path="";';
s2:=s2+'Jet OLEDB:Database Password="pxn7559";';
s2:=s2+'Jet OLEDB:Engine Type=5;';
s2:=s2+'Jet OLEDB:Database Locking Mode=1;';
s2:=s2+'Jet OLEDB:Global Partial Bulk Ops=2;';
s2:=s2+'Jet OLEDB:Global Bulk Transactions=1;';
s2:=s2+'Jet OLEDB:New Database Password="";';
s2:=s2+'Jet OLEDB:Create System Database=False;';
s2:=s2+'Jet OLEDB:Encrypt Database=False;';
s2:=s2+'Jet OLEDB:Don'+''''+'t Copy Locale on Compact=False;';
s2:=s2+'Jet OLEDB:Compact Without Replica Repair=False;';
s2:=s2+'Jet OLEDB:SFP=False';
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=s2;
ADOConnection1.Connected:=true;adotable1.close;
adotable1.open;
while not adotable1.Eof do
begin
combobox1.Items.Add(adotable1.fieldbyname('CCOUNTRY').asstring);
adotable1.next;
end;
adotable2.close;
adotable2.open;
while not adotable2.Eof do
begin
combobox2.Items.Add(adotable2.fieldbyname('CDESCRIPT').asstring);
adotable2.next;
end;
combobox1.ItemIndex:=-1;
combobox2.ItemIndex:=0;
end;
一般我喜欢动态的,例子如下(其中CurrentDirStr是取得了当前目录的字符串,数据库名是dia.mdb ,密码是:abcabc1976):
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+CurrentDirStr+'\aide\dia.mdb;Persist Security '
+'Info=False;Jet OLEDB:Database Password=abcabc1976';
Jet OLEDB:Database Password
设置数据库的密码就可以 ADOConnection1.LoginPrompt := False
access只允许用独占方式使用。还有,有可能你打开数据库后,忘了关闭(进程未退出)
也有可能你的另一个adoconnection已经连在该数据库上了