我用AdoConnection连接,根本无法设置其action为true,并且提示:数据库已被其他程序“独占”请各位不吝指教,谢谢!

解决方案 »

  1.   

    看看你是不是用其他应用程序打开Access文件了,比如说:Access,或者你的应用程序已经运行了!
    超级猛料给你作参考:
    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;
     
      

  2.   

    with ADOConnection1 do
      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;
      

  3.   

    现在给你一个实例仅供参考:
    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;
      

  4.   

    可以动态设定也可静态设定。
    一般我喜欢动态的,例子如下(其中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';
      

  5.   

    ADOConnection1.ConnectionString := Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\下栽程序\人事管理\rsgl(s)\MDB\人事管理.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123;然后在所有里面找到
    Jet OLEDB:Database Password
    设置数据库的密码就可以  ADOConnection1.LoginPrompt := False
      

  6.   

    不是什么大问题,其实就是你在连接时,access数据库已经被打开了,在设置了密码的情况下
    access只允许用独占方式使用。还有,有可能你打开数据库后,忘了关闭(进程未退出)
    也有可能你的另一个adoconnection已经连在该数据库上了