conn As New ADODB.Connection
conn.Open "provider=microsoft.jet.oledb.4.0;data source=\\server1\share\sjk.mdb;jet oledb:database password=a123456;"我能用以上语句打开共享(完全共享的)在server1电脑中的数据库sjk.mdb但如果是只读共享,且在服务器server1中打开数据库,客户端就会出现“文件正在使用中”错误,无法打开,可是如果在服务器server1中打开数据库,就不会出错,怎么解决?我发现open语句还有个选项,但不知道它的具体值,请高手赐教

解决方案 »

  1.   

    建议采用odbc方式,控制面板>管理工具
      

  2.   

    在服务器server1中打开数据库的话你就无法访问了。你说的open选项是记录集的吧?锁定模式?
      

  3.   

    共享方式用ACCESS做网络数据库不稳当,还是用WSOCK传递SQL语句好点,尽管麻烦一些,容错要多做很多,但没有其他类似问题
      

  4.   

      conn.cursorlocation
      rs.cursorlocation
    通常是3(adclient)
      

  5.   

    就算用“共享”方式连接,也要写入文件 \\server1\share\sjk.ldb 的。
    但是只读共享无法写 ldb 文件,就被当作数据库被锁定而出现“文件正在使用中”错误。
      

  6.   

    那我猜错了,客户端不能写还是可以当作只读模式打开的。
    不过服务端先打开会生成 sjk.ldb,然后客户端就读到独占标记,报错。
      

  7.   

    这要看 Access 的判断逻辑了,大概不能生成 .ldb 文件,就认为所有连接都只能用只读方式打开,所以可以连接;而已经存在 .ldb 文件不能写,就认为其他连接正锁定中。还有服务端也应该是共享方式打开的。
      

  8.   

    我在服务端程序中,打开连接前加了一句conn.Mode=adModeShareDenywrite,这样就不会生成.ldb文件,客户端能正常打开,但是这样带来的问题是服务端程序无法往数据库中写入数据了,真是好事难全啊
      

  9.   

    Access 不适合多用户连接,可以考虑复制 mdb 到客户端后再打开使用。
      

  10.   

    虽然远程共享方式可以使用Access数据库,
    但是我以前编程时遇到过多用户操作远程共享Access数据库发生.mdb文件头损坏的问题,
    多方求证并非程序编写问题,而是Access不适合这种开发方法,
    所以访问远程计算机上的数据库建议使用网络数据库,
    DBMS可以协助处理并发、接入和断开、表锁等等一系列问题,
    或者自己开发一个单线程、命令队列式的.mdb的中间层服务挂在Server1上,
    事实上后来我也是这么做的,才避免了Access问题。
      

  11.   

    对了,多用户只读打开Access数据库也不稳定,
    因为它们必须同时以非只读方式打开Access文件,
    所以就算你在数据库连接中用ReadOnly打开也需要完全共享该目录。