powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
9 сообщений из 9, страница 1 из 1
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762293
Andrey Mamitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть представление (view) для которого определены INSTED OF INSERT, UPDATE и DELETE триггеры.
В ADP просто мастером создаю форму, которая базируется только на этом представлении. В результате в форме записи нельзя ни вставлять, ни изменять, ни удалять (на всякий случай UniqueTable выставлять равным имени представления пробовал).


Неужели нельзя организовать форму, которая бы просто делал Insert'ы,Update'ы и Delete'ы так, как будто под ней был бы не вид, а обыкновенная таблица?
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762300
alef120
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a Data Entry пробовал менять на NO
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762304
Andrey Mamitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DataEntry и так false.

Убрал WITH VIEW_METADATA из опредения вида. По мнению формы, записи добавлять стало можно но ОЧЕНЬ УМНЫЙ Access вместо того, что бы просто сделать Insert в это представление, участливо изучает из каких таблиц оно собрано и пытается вставить записи в них (о чем говорит и наличие всех этих таблиц в списке свойства "ОднозначнаяТаблицы").
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762317
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Andrey MamitkoОЧЕНЬ УМНЫЙ Access вместо того, что бы просто сделать Insert в это представление, участливо изучает из каких таблиц оно собрано и пытается вставить записи в них
То есть вместо того чтобы вставлять в одну? Возможно, дело в ключах.
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762323
Andrey Mamitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Именно не во Вьюху.

С "ключами" я вообще не заморачивался.
Т.е. я не представляю, где и кому какие ключи завести/указать.
Может подскажете, копать в какую сторону?

Попробовал для эксперимента сделать так:
Код: plaintext
1.
2.
3.
4.
  Set RS = New ADODB.Recordset  
  RS.CursorType = adOpenKeyset
  RS.LockType = adLockOptimistic
  RS.Open "SELECT * FROM V1_Measure", CurrentProject.Connection, , ,  adCmdText  
  Set Form.Recordset = RS
В итогда при попытке сделать "Post" (т.е. сохранить "запись") для новозаведенной записи на сервер шлется нечто для меня непонятное:
Код: plaintext
exec sp_execute  1 , NULL 
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762481
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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(...).
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762697
Andrey Mamitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если просто открыть представление (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 для поля таблицы, возвращаемой функцией?
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32762791
Andrey Mamitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл сказать,

INSERT'ы, DELET'ы и UPDATE'ы выполняются как надо (если, например, запускать из QA)
...
Рейтинг: 0 / 0
Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
    #32763175
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
FUNCTION dbo.__MTst_x ()
RETURNS @t TABLE (id int, [End] int, Len int,  Unique(id)) 
AS
	BEGIN
		INSERT INTO @t (id, [End], Len)
		SELECT b.id, min(e.id), min(e.id)-b.id+ 1  FROM Table1 b INNER JOIN Table2 e ON b.id<=e.id group by b.id
	RETURN
	END

Эта функция вернет обновляемую таблицу. Unique(id) объявляет уникальный индекс на @t.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Редактировать записи в форме на основе вида, допускающего Insert'ы, Update'ы и Delet'ы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]