Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) триггер на перехват событий создания, удаления и изменения (число прочтений - 6601 )
MichaelM
YaBB Newbies
*
Отсутствует



Сообщений: 10
Зарегистрирован: 20. Августа 2007
Пол: Мужской
Re: триггер на перехват событий создания, удаления и изменения
Ответ #15 - 09. Июля 2009 :: 14:13
Печать  
1) не отменяет транзакцию тк тригер пишкт в другую бд
2) зачемже проверку делать в конце с ролбэком
- разве нельзя  до начала действий провеерить
  
Наверх
 
IP записан
 
marina
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 14. Июня 2009
Re: триггер на перехват событий создания, удаления и изменения
Ответ #16 - 09. Июля 2009 :: 14:14
Печать  
разобралась почему. Оказывается в таблицу записывается совсем не тот @@spid, который определяется в триггере. В таблице пользователей - 53, а в триггере 52
Как такое может быть?

Вот запись в таблицу пользователей:
     Cmd2 = СоздатьОбъект("ADODB.Command");
     Cmd2.ActiveConnection = Соединение;      
     Cmd2.CommandText = "INSERT INTO T_1Susers (Username,spid) VALUES ('"+ИмяПользователя()+"',@@spid) ";
     TUser = CreateObject("ADODB.RecordSet");
     TUser = Cmd2.Execute; //Выполнение и получение набора данных
  
Наверх
 
IP записан
 
marina
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 14. Июня 2009
Re: триггер на перехват событий создания, удаления и изменения
Ответ #17 - 09. Июля 2009 :: 14:15
Печать  
MichaelM писал(а) 09. Июля 2009 :: 14:13:
1) не отменяет транзакцию тк тригер пишкт в другую бд
2) зачемже проверку делать в конце с ролбэком
- разве нельзя  до начала действий провеерить  


Сделала так:
    SQLсоздание1 ="CREATE TRIGGER " + ИмяТриггера1 + " ON " +  Таблица + " FOR DELETE, INSERT, UPDATE 
    | AS 
     | set nocount on
    | BEGIN
     |DECLARE @Username as varchar(50)
     |SELECT @Username = Username FROM [Journal].[dbo].[T_1Susers] where spid = @@SPID
    | If @Username LIKE 'Test'
    |  Begin
    |      Return
    |  End      
..........
ситуация та же
  
Наверх
 
IP записан
 
marina
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 14. Июня 2009
Re: триггер на перехват событий создания, удаления и изменения
Ответ #18 - 09. Июля 2009 :: 14:19
Печать  
Получилось вообще интересно, в 1С при каждом заходе @@SPID разный, а в триггере всегда 52
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: триггер на перехват событий создания, удаления и изменения
Ответ #19 - 09. Июля 2009 :: 16:48
Печать  
соединение-то новое открывается, конечно будет другой spid
  
Наверх
 
IP записан
 
marina
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 14. Июня 2009
Re: триггер на перехват событий создания, удаления и изменения
Ответ #20 - 09. Июля 2009 :: 21:36
Печать  
тогда получается, что все что тут писали не работает. Как же тогда в триггере выяснить пользователя, под которым вносятся изменения? У меня задача следующая - не добавлять запись в таблицу TemporaryTableSQL, если изменения вносятся под пользователем Test
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: триггер на перехват событий создания, удаления и изменения
Ответ #21 - 09. Июля 2009 :: 21:40
Печать  
да просто использовать соединение 1С
RS = СоздатьОбъект("ODBCRecordset");
RS.УстБД1С();//можно и не писать, по умолчанию 1С
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: триггер на перехват событий создания, удаления и изменения
Ответ #22 - 10. Июля 2009 :: 07:46
Печать  
(18)
Процедура ПриНачалеРаботыСистемы()
    глRecordSet.Выполнить("DELETE FROM [Journal].[dbo].[T_1Susers] where spid = @@SPID");
    глRecordSet.Выполнить("INSERT INTO [Journal].[dbo].[T_1Susers] (Username,spid)
     VALUES ('"+ИмяПользователя()+"',@@spid) ";
  
Наверх
 
IP записан
 
marina
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 14. Июня 2009
Re: триггер на перехват событий создания, удаления и изменения
Ответ #23 - 10. Июля 2009 :: 08:43
Печать  
val писал(а) 10. Июля 2009 :: 07:46:
(18)
Процедура ПриНачалеРаботыСистемы()
   глRecordSet.Выполнить("DELETE FROM [Journal].[dbo].[T_1Susers] where spid = @@SPID");
   глRecordSet.Выполнить("INSERT INTO [Journal].[dbo].[T_1Susers] (Username,spid)
    VALUES ('"+ИмяПользователя()+"',@@spid) ";


Если добавлять в spid @@spid, то почему-то он не совпадает со spid в триггере. Сделала так:
     Запрос=СоздатьОбъект("ODBCRecordSet");
     ТЗ_пид = "
     |Select convert(varchar(10), @@SPID) PID
     |";
     Запрос.Открыть(ТЗ_пид);
     Запрос.ВНачало();
     ПИД = Сокрлп(Запрос.ПолучитьЗначение(1));


И передаю в таблицу пользователей ПИД. Так работает
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: триггер на перехват событий создания, удаления и изменения
Ответ #24 - 10. Июля 2009 :: 09:40
Печать  
(23) тип полядолжно быть: SPID int
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать