|
|
|
| Здравствуйте.
Снова возникла проблема с защищёнными таблицами.
Есть форма, с источником данных вида:
SELECT * FROM Таблица1 WHERE ((NameOwner)=CurrentUser()) WITH OWNERACCESS OPTION;
Запись в таблицу для юзера запрещена. Соответственно в форме он может добавлять записи, но не имеет возможности их изменять.
Понадобилась мне, ещё одна таблица с такой-же схемой доступа, и связанная с первой таблицей один-ко-многим по ключевому полю.
Для второй таблицы создал я вторую форму с аналогичным источником:
SELECT * FROM Таблица2 WHERE ((NameOwner)=CurrentUser()) WITH OWNERACCESS OPTION;
и вставил её в первую форму как подчинённую. Прописал связь по ключевым полям таблиц.
Отображается всё как обычно - в подчинённой форме записи, связанные с записью в основной.
Только вот беда - добавлять записи можно только в основной форме (в таблицу1), а в подчинённой (в таблицу2) - нет.
Если убрать связь - добавление в подчинённой форме работает, но при этом, в ней отображаются все записи, принадлежащие юзеру, а не только связанные с записью в основной форме. Ну а мне конечно надо, чтобы наоборот.
Попробовал изменить запрос для подчинённой формы – убрал WHERE ((NameOwner)=CurrentUser()) – он в принципе ни к чему - связь и так отберёт только нужные записи, но добавление не заработало.
И не пойму я никак логику - почему связь форм запрещает добавлять записи в подчинённую форму?
| |
|
| |
|
|
|
| как работает связь "основная-подчиненная" формы через главные и подчиненные поля, мне например неизвестно, то ли фильтром, то ли еще каким хитрым способом.
Попробуйте в источнике строк подчиненной фрпмы указать условие со ссылкой на ключевое поле основной формы.
SELECT * FROM Таблица2 WHERE ID = [foms].[Форма].ID WITH OWNERACCESS OPTION;
и на событие "текущая запись" основной формы делать Requery подчинненой | |
|
| |
|
|
|
| Здорово!
Простое решение - самое действенное.
А Requery делать не нужно, все работает само. Только перед вставкой новой записи BeforeInsert требуется скопировать ключ из основной формы в подчинённую.
Большое спасибо! | |
|
| |
|
|
|
| >Только перед вставкой новой записи BeforeInsert требуется
можно просто установить Default_Value для поля FK в подчиненной = полю PK в основной форме | |
|
| |
|
|
|
| Возможно, что правильнее не использовать SQL в такой ситуации, а реализовывать штатным запросами и в свойствах запроса в режиме конструктора указывать в RunPermissions юзера. Таким образом, удастся переложить на виртуальную машину access все проблемы, да и работать будет быстрее, чем sql | |
|
| |