powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / adp 2002. сообщение от триггера
36 сообщений из 36, показаны все 2 страниц
adp 2002. сообщение от триггера
    #32251251
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть табл.форма для добавления,
изменеия и удаления записи
на основе ХП
вот кусок триггера,
который срабатывает в табл,
на основе которой создана ХП

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

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

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

в первом условии
должно выскакивать
просто сообщение (оно действительно выскакивает)
но!
после этого выдается
стандартное сообщение
о том, что кто-то уже
другой поправил ту же
запись и предлагается
3 варианта: либо сохранить
запись, либо сохранить в
буфер, либо отменить изменения.
мне не надобно вот этого
стандартного сообщения от
аксесса.
мне надо, чтобы было
просто мое сообщение:
'Сумма документа меньше суммы прихода.'
никакого отката тут уже не нужно
как этого добиться?
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251298
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предложу проверить след.:
- в начале триггера Set Nocount on
- строку синхронизации и уникальную таблицу на форме.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251314
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это?
"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
adp 2002. сообщение от триггера
    #32251337
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начале триггера Set Nocount on
строку синхронизации и уникальную таблицу на форме.
усе это есть

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

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
adp 2002. сообщение от триггера
    #32251443
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в общих чертах что триггер-то делает?
Может он правит таблицы, которые участвуют в запросе для формы?
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251459
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да он может ничего не делать, кроме 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
adp 2002. сообщение от триггера
    #32251463
пардон за
ложный путь

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

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

2 incold
Странно, а у меня первый же (приведенный) триггер такую фигню выдал.
На новой таблице, без каких либо извратов.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251504
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я же сказал,
что триггер сверяет
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
adp 2002. сообщение от триггера
    #32251517
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И програмно не дает изменить таблицу с таким триггером. Вываливает ошибку на rst.Update. Но в таблице данные таки меняются.
Плохой метод однозначно.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251576
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще. Хам, ты представь, что тебе понадобится сделать
'Сумма документа меньше суммы прихода. Продолжать да/нет?'
и тебе сразу расхочется это в триггер пихать
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251591
Nick987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть ХП возвращает код, а по этому коду в Аксессе выводи msgbox.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251620
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с ХП я уже давно
бы все сообщения
получил.
я вот хотел триггер
помучить.
а по поводу Да/Нет
я уже думал.

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

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

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

С тех пор в триггерах пишу код способный работать с многострочными транзакциями, или по крайней мере пишу проверку
"Если многострочная то не выполнять"
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251785
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня, как и у incold'a, никаких лишних сообщений...
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251806
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 IgorM & ALL
Сделал ситуацию с таким сообщением...хреново однако.

У меня не было никаких сообщений по той причине, что в ленточных и табличных формах данные на основе сложных запросов (или с обработкой в триггерах) не редактируются.

Для таких данных всегда две формы:
Ленточная с параметрами поиска - для просмотр с кнопкой по кнопке
открывается простая форма редактирования текущей записи, в которой сохранение записи по кнопке, вызовом функции.
При такой организации raiserror обрабатывается нормально без сообщений о конфликте записи.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251817
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю. У меня MS SQL Server 2000 (сервис паки сейчас не скажу), аксес ХР, mdac 2.7
У кого-нибудь (кроме incold и IgorM) на такой конфигурации редактирование таблицы проходит успешно - в случае простешего триггера, который единственное что делает - raiserror?
У меня редактировать не получается ни через форму, ни напрямую открыв таблицу (через аксес adp), ни программно через ADODB.Recordset
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251819
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
апаздал
Incold вычеркивается
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251829
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри еще раз за дезинформацию.

Глянул более внимательно на свои триггера - везде, где есть raiseerror, рядышком стоит Rollback.
Просто raiseerror не использую, но после тестирования в любых случаях идет на конфликт записи.
Вывод: если нужно просто сообщить без отката - вешаем процедурку на BeforeUpdate.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251881
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подвожу итог:
от чего ушел
к тому и пришел
подтвердили мои
искания и другого решения
не оказалось
спасибо, родненькие
спасибки УСЕМ
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251922
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я что-то не так делаю? Есть таблица, на нее вешается триггер:

Код: plaintext
1.
2.
3.
4.
5.
6.
ALTER TRIGGER Таблица1_Trigger1
ON dbo.Таблица1 
FOR UPDATE, INSERT 
AS 
set nocount on 
rollback
raiserror ('aaa',  11 , 1 )


Всё, больше ничего не делаю (cкажу сразу rollback нужен только для insert'а, на чистом update работает и без него).

Ни в форме на основе таблицы, ни при ее (таблицы) прямом редактировании, ничего кроме MessageBox'а с текстом "ааа" не выскакивает. Или я неправильно понял и воспроизвел ситуацию?

AccXP SP2 - 10.4302.4219
MSDE 2000 SP3 - 8.00.760
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251953
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 IgorM
Для неместных повторяю - rollback убери.
И скажи что получится. Хотя можешь и не говорить. И так ясно.
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251955
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raiserror устанавливает глобальную переменную @@Error. А коль есть ошибка, то Акес (и в том числе другие клиенты - QA, EM) считают что произошла ошибка, о чем честно и сообщают, хотя сама вставка была выполнена и на верное ничего с этим не поделаешь
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251978
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП: Ты постинги целиком читаешь или нет? Специально ведь оговорил "rollback нужен только для insert'а, на чистом update работает и без него" ... Что еще я делаю не так?
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32251993
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2IgorM

ЛП имел ввиду (наверное) просто выдачу сообщения из триггера (без rollback'ов). Т.е. когда нужно сообщить юзеру о чем-то без отката. Тогда твой способ некатит.

Интересная проблема, которая меня еще не затронула - но думаю все еще в переди. Хотя я пошел бы путем предложенным самим Хамом - отлавливание ошибок на форме, возможно можно попробовать отслеживать Connection.Errors
...
Рейтинг: 0 / 0
adp 2002. сообщение от триггера
    #32252068
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно - проехали, мы "спорили" о разном, я говорил только о невыдаче стандартного сообщения о трех вариантах, в остальном - согласен. Признаю, что первым не вчитался во все сообщения...
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / adp 2002. сообщение от триггера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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