|
|
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
есть табл.форма для добавления, изменеия и удаления записи на основе ХП вот кусок триггера, который срабатывает в табл, на основе которой создана ХП if @SumSchet>@SumNakl raiserror('Сумма документа меньше суммы прихода.',16,1) if @SumScheta<@SumNakl begin raiserror('Сумма документа не может быть больше суммы прихода.',16,1) rollback end во втором условии выдается сообщение с откатом (оно работает нормально: выдает сообщение и не дает сохранить строку в форме в первом условии должно выскакивать просто сообщение (оно действительно выскакивает) но! после этого выдается стандартное сообщение о том, что кто-то уже другой поправил ту же запись и предлагается 3 варианта: либо сохранить запись, либо сохранить в буфер, либо отменить изменения. мне не надобно вот этого стандартного сообщения от аксесса. мне надо, чтобы было просто мое сообщение: 'Сумма документа меньше суммы прихода.' никакого отката тут уже не нужно как этого добиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 12:58 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
Предложу проверить след.: - в начале триггера Set Nocount on - строку синхронизации и уникальную таблицу на форме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 13:15 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
Может это? "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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 13:21 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
начале триггера Set Nocount on строку синхронизации и уникальную таблицу на форме. усе это есть Severity Level 10: Status Information если ставить 10, то сообщения вообще никакого не выдается если 11, то ситуация, что я написал выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 13:29 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
В adp ХР + SQL 2000 если без всяких формочек править таблицу, то вываливает сообщение, запись сохранить не дает , при попытке закрытия выдает "Сохранение невозможно продолжить да нет", после отмены изменений открываем снова таблицу - изменения там есть (можно не закрывать/открывать, сделать реквери) Как что raiseerror некошерный метод для пользовательский сообщений. Кажись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 13:42 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
а перехватить ошибку в форме не бывает через Form_Error(DataErr As Integer, Response As Integer)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 13:44 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
если итить по пути отлавнивания ошибки в форме, то там тянется ошибка дальше Private Sub Form_Error(DataErr As Integer, Response As Integer) Select Case DataErr Case 7787 ' та самая ошибка, которая выдает сообщение о правке записи кем-то другим Response = acDataErrContinue Case Else Response = 1 End Select 7787 я проигнорирую, но запись все равно не сохраняется, пока я еще раз не щелкну на этой же строке. если же сделать попытку закрыть форму после игнорирования ошибки то выдается еще одно системное сообщение от аксесса: В данное время сохранение объекта невозможно. Закрыть объект БД? Да или Нет? тоже не выход. осталось воспользоваться событием формы "До обновления" и запустить там проверку выдать сообщение. было бы красивее и чище это сделать на триггере, но деваться некуда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:06 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
А в общих чертах что триггер-то делает? Может он правит таблицы, которые участвуют в запросе для формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:09 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
Да он может ничего не делать, кроме raiserror Код: plaintext 1. 2. 3. 4. 5. 6. Точно так же себя ведет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:16 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
пардон за ложный путь >но запись все равно >не сохраняется, пока >я еще раз не щелкну >на этой же строке. а программно реализовать это (или что за этим стоит - SaveRecord, например) не бывает? Гемор еще тот но в качестве варианта... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:18 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
2 Лох Позорный Я почему спрашиваю, у меня достаточно много есть триггеров с raiserror и таких проблем пока что не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:25 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
2 Кабысдох Да ну нафик такие варианты. А если действительно кто-то запись изменил? А ты эти изменения не глядя програмно затрешь? Не дело SQL Server'а пользовательскими окошками заниматься. Не дело. На BeforUpdate вызов проверки и нормально 2 incold Странно, а у меня первый же (приведенный) триггер такую фигню выдал. На новой таблице, без каких либо извратов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:32 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
я же сказал, что триггер сверяет 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:35 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
И програмно не дает изменить таблицу с таким триггером. Вываливает ошибку на rst.Update. Но в таблице данные таки меняются. Плохой метод однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 14:41 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
И еще. Хам, ты представь, что тебе понадобится сделать 'Сумма документа меньше суммы прихода. Продолжать да/нет?' и тебе сразу расхочется это в триггер пихать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:04 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
Пусть ХП возвращает код, а по этому коду в Аксессе выводи msgbox. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:11 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
с ХП я уже давно бы все сообщения получил. я вот хотел триггер помучить. а по поводу Да/Нет я уже думал. думал-думал думал-думал а потом надоело думать и написал сюда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:21 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
Была у меня такая штука. Триггер навроде ничего не делает с таблицей , а долбаный Акес ругается "отменить и тд." Оказалось , что таким образом он реагирует на использование inserted и deleted в запросах. Обошел так : SELECT ЧтоНужно INTO #TmpTbl FROM inserted(deleted) ... потом в запросах использовал временную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:49 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
И забудь про это, это же кривость такая, что мало не покажется. Проще/лучше начал транзакцию, слил данные, проверил процедурой, если что-то не понравилось, спросил что делать и подтвердил,/отменил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:54 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
2 Latuk Нигде ничего не используется. Весь триггер - из одной строчки raiserror ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:55 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
>select @Cod=Код, @Docum=[Код Документ],@S=Состояние from inserted Почему ты уверен , что inserted содержит только одну строку? Этот код зарубит тебе пакетные обновления , что бывает очень неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:58 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
"Почему ты уверен , что inserted содержит только одну строку?" я на форме правлю одну строку. и вставляю тоже одну строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 16:01 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
А что, вставку из буфера обмена в адп отменили что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 16:12 |
|
||
|
adp 2002. сообщение от триггера
|
|||
|---|---|---|---|
|
#18+
Я тоже сначала только через форму правил. А потом вдруг понадобилось 100... накладных ошибочно забитых на одного клиента перекинуть на другого. Ну говорю без проблем Пару запросов делов то ... Не тут то было С тех пор в триггерах пишу код способный работать с многострочными транзакциями, или по крайней мере пишу проверку "Если многострочная то не выполнять" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 16:17 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32251337&tid=1679661]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 349ms |

| 0 / 0 |
