Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / adp 2002. сообщение от триггера / 25 сообщений из 36, страница 1 из 2
29.08.2003, 12:58
    #32251251
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
есть табл.форма для добавления,
изменеия и удаления записи
на основе ХП
вот кусок триггера,
который срабатывает в табл,
на основе которой создана ХП

if @SumSchet>@SumNakl
raiserror('Сумма документа меньше суммы прихода.',16,1)

if @SumScheta<@SumNakl
begin
raiserror('Сумма документа не может быть больше суммы прихода.',16,1)
rollback
end

во втором условии
выдается сообщение
с откатом (оно работает нормально:
выдает сообщение и не дает сохранить
строку в форме

в первом условии
должно выскакивать
просто сообщение (оно действительно выскакивает)
но!
после этого выдается
стандартное сообщение
о том, что кто-то уже
другой поправил ту же
запись и предлагается
3 варианта: либо сохранить
запись, либо сохранить в
буфер, либо отменить изменения.
мне не надобно вот этого
стандартного сообщения от
аксесса.
мне надо, чтобы было
просто мое сообщение:
'Сумма документа меньше суммы прихода.'
никакого отката тут уже не нужно
как этого добиться?
...
Рейтинг: 0 / 0
29.08.2003, 13:15
    #32251298
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
Предложу проверить след.:
- в начале триггера Set Nocount on
- строку синхронизации и уникальную таблицу на форме.
...
Рейтинг: 0 / 0
29.08.2003, 13:21
    #32251314
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
Может это?
"Severity level 10 messages are informational and indicate problems caused by mistakes in the information you have entered. Severity levels from 11 through 16 are generated by the user, and can be corrected by the user.
Severity levels from 17 through 25 indicate software or hardware errors. You should inform the system administrator whenever problems that generate errors with severity levels 17 and higher occur. The system administrator must resolve these errors and track their frequency. When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement. "


И еще оттуда же

Severity Level 10: Status Information

This is an informational message that indicates a problem caused by mistakes in the information the user has entered. Severity level 0 is not visible in SQL Server.

Severity Levels 11 through 16

These messages indicate errors that can be corrected by the user
...
Рейтинг: 0 / 0
29.08.2003, 13:29
    #32251337
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
начале триггера Set Nocount on
строку синхронизации и уникальную таблицу на форме.
усе это есть

Severity Level 10: Status Information
если ставить 10,
то сообщения вообще
никакого не выдается
если 11, то ситуация,
что я написал выше
...
Рейтинг: 0 / 0
29.08.2003, 13:42
    #32251371
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
В adp ХР + SQL 2000 если без всяких формочек править таблицу, то вываливает сообщение, запись сохранить не дает , при попытке закрытия выдает "Сохранение невозможно продолжить да нет", после отмены изменений открываем снова таблицу - изменения там есть (можно не закрывать/открывать, сделать реквери)
Как что raiseerror некошерный метод для пользовательский сообщений. Кажись.
...
Рейтинг: 0 / 0
29.08.2003, 13:44
    #32251376
Кабыздох
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
а перехватить
ошибку в форме
не бывает через
Form_Error(DataErr As Integer, Response As Integer)?
...
Рейтинг: 0 / 0
29.08.2003, 14:06
    #32251438
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
если итить по пути
отлавнивания ошибки
в форме, то там тянется
ошибка дальше

Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case DataErr
Case 7787 ' та самая ошибка, которая выдает сообщение о правке записи кем-то другим
Response = acDataErrContinue
Case Else
Response = 1
End Select

7787 я проигнорирую,
но запись все равно
не сохраняется, пока
я еще раз не щелкну
на этой же строке.
если же сделать
попытку закрыть форму
после игнорирования ошибки
то выдается еще одно
системное сообщение
от аксесса: В данное время сохранение объекта невозможно. Закрыть объект БД? Да или Нет?

тоже не выход.

осталось воспользоваться
событием формы "До обновления"
и запустить там проверку
выдать сообщение.
было бы красивее и чище
это сделать на триггере,
но деваться некуда
...
Рейтинг: 0 / 0
29.08.2003, 14:09
    #32251443
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
А в общих чертах что триггер-то делает?
Может он правит таблицы, которые участвуют в запросе для формы?
...
Рейтинг: 0 / 0
29.08.2003, 14:16
    #32251459
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
Да он может ничего не делать, кроме raiserror

Код: plaintext
1.
2.
3.
4.
5.
6.
ALTER TRIGGER Table1_Trigger1
ON dbo.Table1
FOR UPDATE
AS
    set nocount on
    raiserror ('aaa',  11 , 1 )

Точно так же себя ведет.
...
Рейтинг: 0 / 0
29.08.2003, 14:18
    #32251463
adp 2002. сообщение от триггера
пардон за
ложный путь

>но запись все равно
>не сохраняется, пока
>я еще раз не щелкну
>на этой же строке.

а программно
реализовать это
(или что за этим
стоит - SaveRecord,
например) не бывает?
Гемор еще тот
но в качестве
варианта...
...
Рейтинг: 0 / 0
29.08.2003, 14:25
    #32251480
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
2 Лох Позорный
Я почему спрашиваю, у меня достаточно много есть триггеров с raiserror и таких проблем пока что не было.
...
Рейтинг: 0 / 0
29.08.2003, 14:32
    #32251496
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
2 Кабысдох
Да ну нафик такие варианты.
А если действительно кто-то запись изменил? А ты эти изменения не глядя програмно затрешь?
Не дело SQL Server'а пользовательскими окошками заниматься. Не дело.
На BeforUpdate вызов проверки и нормально

2 incold
Странно, а у меня первый же (приведенный) триггер такую фигню выдал.
На новой таблице, без каких либо извратов.
...
Рейтинг: 0 / 0
29.08.2003, 14:35
    #32251504
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
я же сказал,
что триггер сверяет
2 суммы.
никаких добавлений
и исправлений в другие таблицы
не происходит.
надо:
в одном случае
просто надо выдать
сообщение не отменяя
исправлений, а в другом
выдать сообщение и
отменить исправление

ALTER TRIGGER [Накладные расхода товара_ INSERT_update]
ON dbo.[Накладные расхода товара]
FOR INSERT,update
AS
set nocount on
declare @Cod bigint
declare @Docum bigint, @S tinyint

select @Cod=Код, @Docum=[Код Документ],@S=Состояние from inserted

if @S=2
declare @SumS money, @SumN money
set @SumS=isnull((SELECT SUM([Документы состав].[Количество заявки] * [Документы состав].Цена)
FROM [Документы состав] INNER JOIN
Документы ON [Документы состав].[Код документа] = Документы.Код
WHERE ([Документы состав].[Код документа] = @Docum) AND (Документы.[Код Тип документа] = 2)),0)
set @SumN=isnull((SELECT sum(Количество* Цена)
FROM [Расход товара]
WHERE ([Код накладной] = @Cod)),0)
if @SumS>@SumN
begin
raiserror('Сумма документа меньше суммы прихода.',16,1)

end
if @SumS<@SumN
begin
raiserror('Сумма документа не может быть больше суммы прихода.',16,1)
rollback
end
...
Рейтинг: 0 / 0
29.08.2003, 14:41
    #32251517
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
И програмно не дает изменить таблицу с таким триггером. Вываливает ошибку на rst.Update. Но в таблице данные таки меняются.
Плохой метод однозначно.
...
Рейтинг: 0 / 0
29.08.2003, 15:04
    #32251576
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
И еще. Хам, ты представь, что тебе понадобится сделать
'Сумма документа меньше суммы прихода. Продолжать да/нет?'
и тебе сразу расхочется это в триггер пихать
...
Рейтинг: 0 / 0
29.08.2003, 15:11
    #32251591
Nick987
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
Пусть ХП возвращает код, а по этому коду в Аксессе выводи msgbox.
...
Рейтинг: 0 / 0
29.08.2003, 15:21
    #32251620
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
с ХП я уже давно
бы все сообщения
получил.
я вот хотел триггер
помучить.
а по поводу Да/Нет
я уже думал.

думал-думал
думал-думал
а потом надоело
думать и написал сюда
...
Рейтинг: 0 / 0
29.08.2003, 15:49
    #32251667
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
Была у меня такая штука.
Триггер навроде ничего не делает с таблицей , а долбаный Акес ругается "отменить и тд."

Оказалось , что таким образом он реагирует на использование inserted и deleted в запросах.

Обошел так :
SELECT ЧтоНужно INTO #TmpTbl FROM inserted(deleted) ...
потом в запросах использовал временную таблицу.
...
Рейтинг: 0 / 0
29.08.2003, 15:54
    #32251686
bazaea
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
И забудь про это, это же кривость такая, что мало не покажется.
Проще/лучше начал транзакцию, слил данные, проверил процедурой, если что-то не понравилось, спросил что делать и подтвердил,/отменил.
...
Рейтинг: 0 / 0
29.08.2003, 15:55
    #32251688
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
2 Latuk
Нигде ничего не используется. Весь триггер - из одной строчки raiserror
...
Рейтинг: 0 / 0
29.08.2003, 15:58
    #32251693
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
>select @Cod=Код, @Docum=[Код Документ],@S=Состояние from inserted
Почему ты уверен , что inserted содержит только одну строку?
Этот код зарубит тебе пакетные обновления , что бывает очень неудобно.
...
Рейтинг: 0 / 0
29.08.2003, 16:01
    #32251699
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
"Почему ты уверен , что inserted содержит только одну строку?"
я на форме правлю
одну строку.
и вставляю тоже
одну строку.
...
Рейтинг: 0 / 0
29.08.2003, 16:12
    #32251718
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
А что, вставку из буфера обмена в адп отменили что-ли?
...
Рейтинг: 0 / 0
29.08.2003, 16:17
    #32251733
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
Я тоже сначала только через форму правил.
А потом вдруг понадобилось 100... накладных ошибочно забитых на одного
клиента перекинуть на другого.
Ну говорю без проблем Пару запросов делов то ...
Не тут то было

С тех пор в триггерах пишу код способный работать с многострочными транзакциями, или по крайней мере пишу проверку
"Если многострочная то не выполнять"
...
Рейтинг: 0 / 0
29.08.2003, 16:47
    #32251785
IgorM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
adp 2002. сообщение от триггера
А у меня, как и у incold'a, никаких лишних сообщений...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / adp 2002. сообщение от триггера / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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