|
|
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
Есть представление (view) для которого определены INSTED OF INSERT, UPDATE и DELETE триггеры. В ADP просто мастером создаю форму, которая базируется только на этом представлении. В результате в форме записи нельзя ни вставлять, ни изменять, ни удалять (на всякий случай UniqueTable выставлять равным имени представления пробовал). Неужели нельзя организовать форму, которая бы просто делал Insert'ы,Update'ы и Delete'ы так, как будто под ней был бы не вид, а обыкновенная таблица? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2004, 12:52:04 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
a Data Entry пробовал менять на NO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2004, 13:28:46 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
DataEntry и так false. Убрал WITH VIEW_METADATA из опредения вида. По мнению формы, записи добавлять стало можно но ОЧЕНЬ УМНЫЙ Access вместо того, что бы просто сделать Insert в это представление, участливо изучает из каких таблиц оно собрано и пытается вставить записи в них (о чем говорит и наличие всех этих таблиц в списке свойства "ОднозначнаяТаблицы"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2004, 13:38:53 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
Andrey MamitkoОЧЕНЬ УМНЫЙ Access вместо того, что бы просто сделать Insert в это представление, участливо изучает из каких таблиц оно собрано и пытается вставить записи в них То есть вместо того чтобы вставлять в одну? Возможно, дело в ключах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2004, 14:37:02 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
Именно не во Вьюху. С "ключами" я вообще не заморачивался. Т.е. я не представляю, где и кому какие ключи завести/указать. Может подскажете, копать в какую сторону? Попробовал для эксперимента сделать так: Код: plaintext 1. 2. 3. 4. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2004, 14:51:12 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
Andrey MamitkoЕсть представление (view) для которого определены INSTED OF INSERT, UPDATE и DELETE триггеры. В ADP просто мастером создаю форму, которая базируется только на этом представлении. В результате в форме записи нельзя ни вставлять, ни изменять, ни удалять (на всякий случай UniqueTable выставлять равным имени представления пробовал). А если просто открыть представление (view) - без формы. Оно обновляемое? Если нет - значит оно просто не обновляемое. Наличие INSTED OF INSERT, UPDATE и DELETE триггеров есть необходимое, НО НЕ ДОСТАТОЧНОЕ условие обновляемости. Andrey Mamitko Неужели нельзя организовать форму, которая бы просто делал Insert'ы,Update'ы и Delete'ы так, как будто под ней был бы не вид, а обыкновенная таблица? Можно. Варианты: 1) Правильно построенное представление. Основная фишка: дожны быть явно выбраны все PK (или поле Unique INDEX) для всех таблиц, участвующих в представлении. 2) Временная или постоянная вспомогательная таблица. 3) Вид на основе UDF, возвращающей таблицу (не инлайн UDF) - это самое простое и дешевое. Но при определении таблицы возвращающемой UDF надо задать Unique(...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 06:43:44 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
А если просто открыть представление (view) - без формы. Оно обновляемое? Хм... Ну в EnterpriseManager'е записи добавлять, удалять, изменять можно, при этом, очевидно, что раотают именно триггеры. Если нет - значит оно просто не обновляемое. Наличие INSTED OF INSERT, UPDATE и DELETE триггеров есть необходимое, НО НЕ ДОСТАТОЧНОЕ условие обновляемости. Если не сложно, расскажите, пожалуйста, про это побольше(?) Т.е. чего мне еще может не хватать, при условии что в EnterpriseManager'е записи доавлять можно (правда только когда вид создан с параметром WITH VIEW_METADATA). Можно. Варианты: 1) Правильно построенное представление. Основная фишка: дожны быть явно выбраны все PK (или поле Unique INDEX) для всех таблиц, участвующих в представлении. Фишка в том, что в этих триггерах определена некоторая логика, по которой записи рассовываются по нескольким таблицам. Access эту логику все равно не угадает, и все, что ему нужно сделать, это произвести Insert в вид. Единственное, что меня коробит, это то, что я нигде не укзал поля, по которому Access сможет "синхноизировать" записи, которые он отображает с записями в Представленнии (поле это в представлении есть и оно же является первичным ключем одной из таблиц, учавствующих представлении). Может в этом дело? Но тогда где это поле указать? 2) Временная или постоянная вспомогательная таблица. Вот тут я, к сожалению, совсем не понял, чем она мне поможет :( 3) Вид на основе UDF, возвращающей таблицу (не инлайн UDF) - это самое простое и дешевое. Но при определении таблицы возвращающемой UDF надо задать Unique(...) А вот это, вероятно, помоч может. Т.е., если я правильно понимаю, в этом случае Access при всем желании не угадает, как собрано это представление и ему ничего не останется кроме как просто сделать Insert? Вот только что такое Unique(...) в данном случае? Типа PK для поля таблицы, возвращаемой функцией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 11:07:45 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
Забыл сказать, INSERT'ы, DELET'ы и UPDATE'ы выполняются как надо (если, например, запускать из QA) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 11:47:03 |
|
||
|
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
|
|||
|---|---|---|---|
|
#18+
Andrey Mamitko А если просто открыть представление (view) - без формы. Оно обновляемое? Хм... Ну в EnterpriseManager'е записи добавлять, удалять, изменять можно, при этом, очевидно, что раотают именно триггеры. А в Аccess-е? Не судьба открыть? Если не сложно, расскажите, пожалуйста, про это побольше(?) Т.е. чего мне еще может не хватать, при условии что в EnterpriseManager'е записи доавлять можно (правда только когда вид создан с параметром WITH VIEW_METADATA). Должны быть явно выбраны все PK (или поле Unique INDEX) для всех таблиц, участвующих в представлении. Фишка в том, что в этих триггерах определена некоторая логика, по которой записи рассовываются по нескольким таблицам. Access эту логику все равно не угадает, и все, что ему нужно сделать, это произвести Insert в вид. Access имеет собственные представления о способности View к обновлению. Пока эти представления не будут иметь место - Access не обновляет вид. Должны быть явно выбраны все PK (или поле Unique INDEX) для всех таблиц, участвующих в представлении . Вот тут я, к сожалению, совсем не понял, чем она мне поможет. Это единственное решение для SQL 7.0. Создаете вспомогательную таблицу с нужными полями, заполняете в ХР данными и возвращаете Select * FROM Эта_таблица для редактирования в форме. Ну а далее по вкусу... А вот это, вероятно, помоч может. Т.е., если я правильно понимаю, в этом случае Access при всем желании не угадает, как собрано это представление и ему ничего не останется кроме как просто сделать Insert? Access выполняет INSERT, если считает View обновляемым. И никак иначе. UDF возвращает временную таблицу. Если это временная таблицу - обновляемая, то и вид построенный на ней WITH VIEW_METADATA - обновляемый => Access выполнит INSERT. Чтобы временная таблица была обновляемой нужно чтобы на ней были определены PK или UNIQUE INDEX. Вот только что такое Unique(...) в данном случае? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Эта функция вернет обновляемую таблицу. Unique(id) объявляет уникальный индекс на @t. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:13:58 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32762697&tid=1670638]: |
0ms |
get settings: |
10ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 407ms |

| 0 / 0 |
