Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access и ТРИГГЕРЫ / 11 сообщений из 11, страница 1 из 1
10.09.2003, 19:31
    #32261660
ultras
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Есть триггер - обновляет вычисляемые поля
------------------------------------------
CREATE TRIGGER TRG_TABLE1 ON dbo.TABLE1
FOR UPDATE

AS

UPDATE TABLE1
SET
F1 = F2 + F3, F 4 = F2-(F3+F1)
--------------------------------------------

При редактировании непосредственно в MS SQL - триггер работает исправно..Access ADP же выдает ошибку:

"Key column information is unsufficient or incorrect"

Таблица не связана с другими таблицами, имеет ключ по первому полю,
предположим, П0. Тип поля - bigint Autonumber

Когда лючевое поле снимаю - Аксесс вообще блокирует рекордсет


Что делать, чтоб Аксесс позволял редактировать таблицу TABLE1 ?
...
Рейтинг: 0 / 0
10.09.2003, 19:44
    #32261673
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Выкатывай полный текст триггера.
...
Рейтинг: 0 / 0
10.09.2003, 20:03
    #32261683
ultras
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
ALTER TRIGGER TRG_S_SUM_UPDATE
ON dbo.S
FOR UPDATE

AS

UPDATE FA_CARD_SERIES
SET
S_COM_AMOUNT=(S_COUNT* S_DEN * S_C_COM/100),
S_T_AMOUNT=S_DEN * S_COUNT,
S_AMOUNT=(S_DEN * S_COUNT)-(S_COUNT * S_DEN *S_C_COM/100)
...
Рейтинг: 0 / 0
10.09.2003, 20:08
    #32261687
ultras
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Ошибся - так верно

ALTER TRIGGER TRG_S_SUM_UPDATE
ON dbo.S
FOR UPDATE

AS

UPDATE S
SET
S_COM_AMOUNT=(S_COUNT* S_DEN * S_C_COM/100),
S_T_AMOUNT=S_DEN * S_COUNT,
S_AMOUNT=(S_DEN * S_COUNT)-(S_COUNT * S_DEN *S_C_COM/100)

В SQL Enterprise manager работает
В Аксесс - нет
...
Рейтинг: 0 / 0
10.09.2003, 20:13
    #32261692
ultras
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Интересная особенность

Я создал простую таблицу с тремя полями, одно из них - обновляемое триггромТак вот, после того, как Аксесс выдаст ошибку о нарушении ключа, он предлагает отменить изменения.
Нажимаю отмену..Но потом, при открытии таблицы - мои изменения оказываются сохраненными

Что же делать?
...
Рейтинг: 0 / 0
11.09.2003, 09:54
    #32261917
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
может set nocount on поможет ?
...
Рейтинг: 0 / 0
11.09.2003, 12:55
    #32262280
ultras
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Не помогает

Логически, после апдейта записи, даже Enterprise Manager тоже ругается, ссылаясь на уже обновленный рекордсеи
Думаю, что аксесс видит уже обновленный рекордсет и поэтому считает, что запись не вписывается в условия ключевого поля.
Может, кто-то знает, как обмануть Аксесс.
Неужели никто никогда не работал в аксессе с триггерами на апдейт?
...
Рейтинг: 0 / 0
11.09.2003, 13:06
    #32262307
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Работали и все нормально.
Стандартные методы против таких сообщений:

- в начало триггера set nocount on
- на форме однозначная таблица и строка синхронизации

Но если ключевое поле счетчик, тогда возможны проблемы с тем, что триггер не правильно определяет номер счетчика, соответственно идет ошибка.

Эта проблема уже обсуждалась - сделали немного корявое решение кажется через переменную, или что-то в этом роде.
Поищи по форуму.
...
Рейтинг: 0 / 0
11.09.2003, 13:19
    #32262332
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
если изменяешь данные в форме то сделай следующее

1. обязательно включи в источник данных примари кей таблицы
2 пропиши в строке синхронизации

select * from таблица_которая_обновляется where ID = ?

ID в примере имя поля примари кей

или

select * from (таблица_которая_обновляется) where ID = ?

синтаксис неправильный но работает

или


select * from таблица_которая_обновляется with (nolock) where ID = ?
...
Рейтинг: 0 / 0
11.09.2003, 13:28
    #32262350
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
ОЙ, МАТЬ а на текст триггера я и не посмотрел .....

а где WHERE ?????????????
...
Рейтинг: 0 / 0
11.09.2003, 14:04
    #32262428
ultras
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access и ТРИГГЕРЫ
Всем большое спасибо. Заработало
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access и ТРИГГЕРЫ / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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