Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Снова про WITH OWNERACCESS OPTION
 
 автор: buka   (01.03.2007 в 08:26)   личное сообщение
 
 

Здравствуйте.
Снова возникла проблема с защищёнными таблицами.

Есть форма, с источником данных вида:
SELECT * FROM Таблица1 WHERE ((NameOwner)=CurrentUser()) WITH OWNERACCESS OPTION;
Запись в таблицу для юзера запрещена. Соответственно в форме он может добавлять записи, но не имеет возможности их изменять.

Понадобилась мне, ещё одна таблица с такой-же схемой доступа, и связанная с первой таблицей один-ко-многим по ключевому полю.
Для второй таблицы создал я вторую форму с аналогичным источником:
SELECT * FROM Таблица2 WHERE ((NameOwner)=CurrentUser()) WITH OWNERACCESS OPTION;
и вставил её в первую форму как подчинённую. Прописал связь по ключевым полям таблиц.
Отображается всё как обычно - в подчинённой форме записи, связанные с записью в основной.
Только вот беда - добавлять записи можно только в основной форме (в таблицу1), а в подчинённой (в таблицу2) - нет.

Если убрать связь - добавление в подчинённой форме работает, но при этом, в ней отображаются все записи, принадлежащие юзеру, а не только связанные с записью в основной форме. Ну а мне конечно надо, чтобы наоборот.
Попробовал изменить запрос для подчинённой формы – убрал WHERE ((NameOwner)=CurrentUser()) – он в принципе ни к чему - связь и так отберёт только нужные записи, но добавление не заработало.

И не пойму я никак логику - почему связь форм запрещает добавлять записи в подчинённую форму?

  Ответить  
 
 автор: osmor   (01.03.2007 в 08:54)   личное сообщение
 
 

как работает связь "основная-подчиненная" формы через главные и подчиненные поля, мне например неизвестно, то ли фильтром, то ли еще каким хитрым способом.
Попробуйте в источнике строк подчиненной фрпмы указать условие со ссылкой на ключевое поле основной формы.
SELECT * FROM Таблица2 WHERE ID = [foms].[Форма].ID WITH OWNERACCESS OPTION;
и на событие "текущая запись" основной формы делать Requery подчинненой

  Ответить  
 
 автор: Buka   (01.03.2007 в 10:47)   личное сообщение
 
 

Здорово!
Простое решение - самое действенное.
А Requery делать не нужно, все работает само. Только перед вставкой новой записи BeforeInsert требуется скопировать ключ из основной формы в подчинённую.

Большое спасибо!

  Ответить  
 
 автор: Explorer   (01.03.2007 в 11:07)   личное сообщение
 
 

>Только перед вставкой новой записи BeforeInsert требуется


можно просто установить Default_Value для поля FK в подчиненной = полю PK в основной форме

  Ответить  
 
 автор: rokin   (01.03.2007 в 11:31)   личное сообщение
 
 

Возможно, что правильнее не использовать SQL в такой ситуации, а реализовывать штатным запросами и в свойствах запроса в режиме конструктора указывать в RunPermissions юзера. Таким образом, удастся переложить на виртуальную машину access все проблемы, да и работать будет быстрее, чем sql

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList