Доступ к базе данных Delphi 2009 ADO в режиме cmShareDenyWrite - PullRequest
0 голосов
/ 08 января 2010

У меня есть приложение Delphi 2009, который пытается открыть соединение ADO (dbGo) в файл Microsoft Access .MDB в режиме cmShareDenyWrite, используя Jet 4.0 поставщика OLE DB. Цель состоит в том, чтобы открыть файл .MDB в режиме чтения / записи, но для предотвращения других приложений от открытия файла в режиме записи: Другие приложения доступ к файлу в режиме чтения одновременно в порядке - на самом деле, это все дело.

Я использую комбинацию TADOConnection, TADOQuery (и / или TADOTable) и TDataSource, подключение к элементам управления данными, известно. Мое понимание от чтения документации (и чтения, и чтения) является то, что установки прав доступа в строке подключения к «Share Deny Write» будет делать трюк.

У меня нет проблемы открытия базы данных: Возвращенный режим в ADOConnection после успешного соединительном является cmShareDenyWrite, как и ожидалось. У меня нет никаких проблем, навигационных набор данных, используя свои средства управления данными в курсе. Однако, когда я пытаюсь изменить запись и опубликовать результаты, я не могу:. База данных, как представляется, в режиме только для чтения

По существу, это кажется, что выбор «Share Deny Write» для ADO доступа к таблице MDB отказывает мне способность писать в файл. Либо я что-то отсутствует, или это неподдерживаемый сценарий для поставщика OLE DB для JET.

Кто-нибудь есть идеи, где я собираюсь неправильно, или как я могу достигнуть моей первоначальной цели?

Заранее спасибо,

Джон Беннет

Ответы [ 2 ]

1 голос
/ 09 января 2010

Попробуйте событие AfterOpen в цикле TADOQuery, хотя TDataSet-> Fields устанавливает значение только для чтения на true.

это может работать, у меня была проблема с симуляцией, но это было в c ++ builder2010, поэтому она может не работать.

0 голосов
/ 09 января 2010

Мне кажется, вы хотите adModeShareExclusive, который должен открывать MDB в эксклюзивном режиме. То есть вы можете писать в него, но всем остальным запрещен любой доступ, чтение или запись. Это то, что определенно поддерживается Jet / ACE, поэтому проблема заключалась только в том, поддерживает ли это оболочка Jet OLEDB.

Конечно, я программист Access, а не программист Delphi, поэтому я могу ошибаться, но я смотрю на определения из библиотеки типов ADO в Access. Значение adModeShareExclusive равно 12, если оно не доступно как константа в вашей среде программирования.

...