我有一个Access 数据库,密码:123456
我在用 DAO 连接时通过:Dim db As Database
Set db = OpenDatabase("D:\123.mdb", False, False, ";pwd=123456")
db.Execute "CREATE TABLE AA (ID INT)"但在用 ADO 连接时报错:Dim oConnection As New ADODB.Connection
Dim StrConnect As StringStrConnect = "Provider=Microsoft.Jet.OLEDB.3.51;User ID=Admin;Password=123456;Persist Security Info=False;Data Source=D:\123.mdb"
   
oConnection .Open StrConnect  
'此时报错:不能启动应用程序,工作组信息文件丢失,或是已被其它用户以独占方式打开
'我用 Microsoft.Jet.OLEDB.4.0也试过,保同样的错;这个数据库我根本就没打开呀。是不是 Access 数据库那儿设置不对,还是别的什么,请各位高手指教!

解决方案 »

  1.   

    StrConnect = "provider=Microsoft.Jet.OLEDB.4.0;Data source =D:\123.mdb, ;Persist Security Info=False;Jet OLEDB:Database Password=123456"
      

  2.   

    谢谢:草原上狂奔的蜗牛
    同时:在 ACCESS97 和 ACCESS2000 中用同样的语句,都可以吧;用provider=Microsoft.Jet.OLEDB.3.51 也行,无需输入用户名:admin
      

  3.   

    还有,我有一个Access2000 数据库123.mdb,密码:123456
    我在用 DAO 连接时:
    Dim db As Database
    Set db = OpenDatabase("D:\123.mdb", False, False, ";pwd=123456")报错:不可识别的数据格式,但直接用 Data 控件时则能正常连接;
    对 Access97 数据库用以上两种方法都可正常连接,为什么???
    难道前一种方法只支持 Access97 数据库!
      

  4.   

    VB6里面带的是Access97的引擎(废话,98年哪来的Access2000)
    升级到VB.Net或者换ADO吧
      

  5.   

    可我已经打了 Jet4.0 补丁包,直接用 Data 控件时则能正常连接,该补丁包都支持些什么东东呀!我现在是在维护一个很老的小软件,里面只用到了 DAO 和 Data 控件(还是 Jet3.5 的),数据库吗肯定是 Access97,现在由于时间紧迫我只想将 Access97 升级到 Access2000 ;如果用 ADO 或者 .NET 那岂不是整个程序要从头写,时间不允许!
      

  6.   

    '此时报错:不能启动应用程序,工作组信息文件丢失,或是已被其它用户以独占方式打开
    '我用 Microsoft.Jet.OLEDB.4.0也试过,保同样的错;这个数据库我根本就没打开呀。///
    你直接給我開access看看
    在設置密碼的時候才會被獨佔
      

  7.   

    对呀,是在设置密码时需要独占,我的问题是:数据库根本就没打开,但由于连接字符串写成了
    StrConnect = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Password=123456;Persist Security Info=False;Data Source=D:\123.mdb"
    报错;此问题已通过  草原上狂奔的蜗牛 的连接字符串:
    StrConnect = "provider=Microsoft.Jet.OLEDB.4.0;Data source =D:\123.mdb, ;Persist Security Info=False;Jet OLEDB:Database Password=123456"
    顺利解决,谢谢 !我得新问题是:有一个Access2000 数据库123.mdb,密码:123456
    用 DAO 连接时:
    Dim db As Database
    Set db = OpenDatabase("D:\123.mdb", False, False, ";pwd=123456")报错:不可识别的数据格式,但直接用 Data 控件时则能正常连接;我已经打了 Jet4.0 补丁包
      

  8.   

    报错:不可识别的数据格式,但直接用 Data 控件时则能正常连接;我已经打了 Jet4.0 补丁包///
    你知道data控件只支持倒jet3.5也就是access97。
    所以你用data能连接,jet4.0却不能连接的时候,我很怀疑你是否是access2000 Access 数据库加了密码,直接由 Access 开启数据库时,会出现密码问话框,询问密码。但是若要由 VB 程序中开启,必须更改 VB 程序中开启数据库的指令,否则会出现错误讯息!以下针对各种状况,分别加以说明:1、 使用 DAO 语法开启数据库:OpenDatabase 
     若要由程序中开启,语法如下:
    Set DB = OpenDatabase(DatabaseName, False, False, ";Pwd=密码")
    实例例如:
    Dim db As Database
    Set db = OpenDatabase("C:\db1.mdb", False, False, ";Pwd=1")
    若要使用 Data 控件,设定方法如下:
    1、设定 DatabaseName 属性  ( 数据库名称 / 含路径 )
    2、设定 Connect 属性,将预设的字符串【Access】改成【;Pwd=密码】 ( 不含双引号 )
    3、设定 RecordSource 属性   ( 数据集 )
     
     
    2、
     使用 ADO 语法开启数据库:
     
     在使用 ADODC 或 DataEnvironment 设定好联机之后,直接利用属性窗口修改 ConnectionString 属性 (附属于 ADODC) 或 ConnectionSource 属性 (附属于 DataEnvironment 的 Connection 对象),修改的方法是在属性之后增加以下参数:
    ;Jet OLEDB:Database Password=密码除了 ADODC 及 DataEnvironment 之外, 直接使用 ADO 对象来开启含有密码的 mdb 数据库,设定参数的方法也是相同的。
     
     
    3、
     压缩加了密码的数据库:CompactDatabase
     
     DBEngine.CompactDataBase "原数据库文件名", "新数据库文件名", , , ";pwd=密码"
    实例例如:
    DBEngine.CompactDatabase "C:\Db1.mdb", "C:\Db2.mdb", , , ";pwd=1"
      
    4、
     修复加了密码的数据库: RepairDatabase
     
     不必理会数据库设定的密码!
    DBEngine.RepairDataBase "数据库文件名"
    实例例如:
    DBEngine.RepairDataBase "C:\Db1.mdb"
      90.07.06 加注:在 DAO 3.6 之后,RepairDatabase Method 已经无法使用了,您必须改用 ADO 的 CompactDatabase Method 来取代了 DAO3.5 时的 RepairDatabase method!CompactDatabase Method 也合并了以往 DAO 3.5x 时代的 RepairDatabase Method 及 CompactDatabase Method 的功能,详细的说明请看以下二个单元:
      

  9.   

    谢谢 莫依我的数据库是由 Access97 转换到 Access2000,并设定了密码。
    在 Jet4.0 补丁还没打之前,用 Data 控件是不能访问该  Access2000 数据库的,我试过,在 Data 控件的属性栏的 Connect 只能看到 “access”;在我打了 Jet4.0 补丁包后,在 Data 控件的属性栏的 Connect 可以看到 “access”和“access2000;”;当 Connect 选择“access”时不能打开数据库,但当 Connect 选择“access2000;”时可以打开该Access2000数据库!这说明我的 Jet4.0 补丁是打成功了,而且数据库确实是 Access2000 。现在就是用
    Dim db As Database
    Set db = OpenDatabase("D:\123.mdb", False, False, ";pwd=123456")
    打不开,是不是该语句写的不对!
    另:是不是由于数据库 是由 Access97 转换到 Access2000 而非真正的 Access2000。
      

  10.   

    那你還成ado去開開看。。總之,我沒有遇見你那樣的問題,access97轉成access2000當然算2000啦問題是在於你電腦上裝的是access????你用Ado連接看看Option ExplicitPrivate Rs As New ADODB.Recordset
    Private Conn As New ADODB.Connection'--如何用RecordSet連接Access
    Private Sub Form_Load()
     Dim strConn As String
     
     ' 連接數據庫的字符串
     ' 連接帶密碼的數據庫,直接在連接符後面加上Jet OLEDB:DataBase Password='您的密碼'
     ' 連接Access97數據庫需要使用Jet.OLEDB.3.5,Access2K和以上數據庫使用Jet.OLEDB.4.0
     strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test.mdb;Persist Security Info=False"
     
     ' 使用用戶端資料遊標
     Conn.CursorLocation = adUseClient
     ' 打開Access的連接
     Conn.Open strConn
     
     ' 如果RecordSet的狀態不是關閉狀態,則關閉Recordset
     If Rs.State <> adStateClosed Then Rs.Close
     
     ' Recordser打開表People
     Rs.Open "Select * from People", Conn, adOpenKeyset, adLockOptimistic
     
     ' 報告出 一共多少筆數據,測試是否存在數據
     ' MsgBox Rs.RecordCount
     
     ' 綁定進DataGrid
     Set DataGrid1.DataSource = Rs
     
     With DataGrid1
     
      ' 設置DataGrid標題
       .Columns(0).Caption = "編號"
       .Columns(1).Caption = "姓名"
       
      ' 設置 DataGrid的寬度
       .Columns(0).Width = 0       ' 設置成為隱藏狀態,相同的方法可以應用在各種網格控件上面
       .Columns(1).Width = 2000    ' 設置正常需要的寬度
       
     End With
    End Sub
      

  11.   

    ADO 连接没问题,Data 控件和 ADODC 控件也没问题,唯独在 DAO 时有此问题,很郁闷!无论如何,还是要谢谢你了!!!
      

  12.   

    嘿嘿,那你換台機器得了。呵呵~~用ado打開也不錯啊,偶每次都懶得花時間鑽牛角尖。除非偶象現在這麼閒,我可能才弄弄。我現在不能下載,否則你發給我看,我給你看看就好了。呵呵……建議你用取消密碼用dao看看
      

  13.   

    谢谢了,
    我的问题是要维护一个很老的程序(DAO+Jet3.51+Access97+必需的密码),现要在最短的时间内将数据库由 Access97 升级到 Access2000 且必须要有密码(里面的数据要保密),要是改用 ADO 的话,那工作量解太大了。不过,要是实在没办法,那就只能大换血了:改用 ADO !
    我在换台机子试试!
    谢谢!
      

  14.   

    还有一问题:这个有密码的 Access 数据库在我用 SQL SERVER2000 中的数据导入向导时总是报错:
       错误源: Microsoft Jet Database Engine
       错误描述:不能启动应用程序,工作组信息文件丢失,或是已被其它用户以独占方式打开
       
       但如果那掉密码,则导入成功!正在郁闷中 
      

  15.   

    去問問zjcxc,他現在在線,我沒有sqlserver的服務端,所以我一般就是用語句導的。
    你問問他有啥辦法?
      

  16.   

    用SQL的导入/导出向导的时候,输入ACCESS数据库的文件名用户名和密码别输,切记(除非你设置了工作组)
    点"高级",第四行:
    jet OLEDB:Database Password 中输入你的ACCESS数据库密码.
      

  17.   

    都說人家隻有isqlw用,從來就是隻有語句去寫,才沒有你們那麼舒服去向導-_-被老大罵ing~~-_-