【问题标题】:Delphi 2009 ADO database access in cmShareDenyWrite mode以 cmShareDenyWrite 模式访问 Delphi 2009 ADO 数据库
【发布时间】:2010-01-08 14:14:10
【问题描述】:

我有一个 Delphi 2009 应用程序,它尝试使用 Jet 4.0 OLE DB 提供程序以 cmShareDenyWrite 模式打开到 Microsoft Access .MDB 文件的 ADO 连接 (dbGo)。目标是以读/写模式打开 .MDB 文件,但要防止其他应用程序以写模式打开文件:其他应用程序同时以读模式访问文件是可以的——事实上,这就是重点。

我正在使用 TADOConnection、TADOQuery(和/或 TADOTable)和 TDataSource 的组合,连接到数据感知控件。我通过阅读文档(以及阅读和阅读)的理解是,将连接字符串中的访问权限设置为“共享拒绝写入”就可以了。

我打开数据库没有问题:连接成功后在ADOConnection中返回的模式是cmShareDenyWrite,正如预期的那样。使用我的数据感知控件导航数据集没有问题。但是,当我尝试更改记录并发布结果时,我无法:数据库似乎处于只读模式。

基本上,似乎为 ADO 访问 MDB 表选择“共享拒绝写入”会拒绝 ME 写入文件的能力。要么我遗漏了一些东西,要么这是 JET 的 OLE DB 提供程序不受支持的方案。

有没有人知道我哪里出错了,或者我如何才能实现我最初的目标?

提前致谢,

约翰·贝内特

【问题讨论】:

    标签: database delphi delphi-2009 ado jet


    【解决方案1】:

    尝试通过 TDataSet->Fields 将只读值设置为 true 的 TADOQuery 循环上的 AfterOpen 事件。

    这可能有效,我有一个类似的问题,但它在 c++builder2010 中,所以它可能不起作用。

    【讨论】:

    • 乔纳森,谢谢你的想法:我会试试这个并回复。
    【解决方案2】:

    在我看来,您需要 adModeShareExclusive,它应该以独占模式打开 MDB。也就是说,您可以对其进行写入,但禁止其他所有人访问、读取或写入。这是 Jet/ACE 绝对支持的东西,所以问题只是 Jet OLEDB 包装器是否支持它。

    当然,我是 Access 程序员,而不是 Delphi 程序员,所以我可能是错的,但我正在查看 Access 中 ADO 类型库的定义。 adModeShareExclusive 的值为 12,以防它在您的编程环境中不能作为常量使用。

    【讨论】:

    • David,感谢您的评论,但我正在寻找 ShareDenyWrite:我的程序应该能够读/写数据库,但让其他程序可以同时读取它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多