我有一个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提供程序不支持的场景。
有没有人知道我哪里出错了,或者我怎么能完成我原来的目标?
提前致谢,
John Bennett
答案 0 :(得分:1)
尝试使用TADOQuery上的AfterOpen事件循环,通过TDataSet-> Fields将只读值设置为true。
这可能工作我有一个类似的问题,但它是在c ++ builder2010,所以它可能无法正常工作。
答案 1 :(得分:0)
在我看来,您需要adModeShareExclusive,它应该以独占模式打开MDB。也就是说,您可以写信给它,但禁止所有其他人访问,读取或写入。这是Jet / ACE肯定支持的,所以问题实际上只是Jet OLEDB包装器是否支持它。
当然,我是Access程序员,而不是Delphi程序员,所以我可能错了,但我正在查看Access中ADO类型库的定义。 adModeShareExclusive的值为12,以防它在编程环境中不可用作常量。