![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Username [D6, XP]
Id © (2006-06-13 11:07:00)Здраствуйте, уважаемые мастера.
Работаю в IBExpert-e с FB 1.5, проблема такая.
В триггере нужно вставить в поле таблицы имя пользователя.
Как узнать какой пользователь использует данный триггер?
Id (2006-06-14 15:42:00) [1]
> Desdechado © (13.06.06 22:04) [24]
Мне важен сам факт того, что кто-то без меня лазил.
Desdechado (2006-06-13 22:04:00) [2]>> А зачем тогда CURRENT_USER ?
> Есть люди, которые тоже знают мой LOGIN и Пароль.
если они знают твой логин, то в триггере это быдет тот же самый пользователь
разницы CURRENT_USER с одинаковым логином у разных персоналий не будет
Sergey13 (2006-06-13 15:08:00) [3]2[22] Id (13.06.06 14:57)
Для Insert доступно только NEW. Для Delete только OLD. Для Update оба значения.
Id (2006-06-13 14:57:00) [4]Еще для уточнения.
Для Update и delete использовать OLD.ID? Правильно?
Id (2006-06-13 14:42:00) [5]
> Оно "сидит" в new.id.
Спасибо, то, что надо! 8-)
Sergey13 (2006-06-13 14:30:00) [6]2 [19] Id (13.06.06 14:23)
На события какой таблицы настроен тригер? На Таблицу1? Тогда какие трудности с определением вставленного ID? Оно "сидит" в new.id.
Id (2006-06-13 14:23:00) [7]
> Sergey13 © (13.06.06 12:40) [18]
Триггер вставляет запись в Таблицу2, если на Таблице1 произошли изменения. Вот
Sergey13 (2006-06-13 12:40:00) [8]2[17] Id (13.06.06 12:26)
Странно, что наблюдая за Таблица1 ты пытаешься отследить ее изменения в тригерах на Таблица2. Или мне не понятен смысл работы.
Id (2006-06-13 12:26:00) [9]Таблица1 в Base
Работаю c Таблица1 в Delphi 6. Она заполняется.
Параллельно заполняется Таблица2 в той же базе. Её структура:
CREATE TABLE TRACK (
ID INTEGER NOT NULL,
USERNAME VARCHAR(50) COLLATE PXW_CYRL,
DATAEVENT DATE,
TIMEEVENT TIME,
TYPEEVENT VARCHAR(20) COLLATE PXW_CYRL,
NEWVALUE VARCHAR(250) COLLATE PXW_CYRL
);
где id - Первичный ключ, для него существует генератор,
Username - текущий пользователь,
Dataevent - текущая дата,
Timeevent - Текущая дата,
typeEvent - тип события (например - 'Update'),
NEWVALUE - номер изменяемой записи в Таблице1.
Триггеры на After Insert, update, delete
Sergey13 (2006-06-13 12:14:00) [10]2[15] Id (13.06.06 12:13)
Опиши последовательность твоей работы.
Id (2006-06-13 12:13:00) [11]
> Sergey13 © (13.06.06 12:08) [14]
Там используется другой триггер
Sergey13 (2006-06-13 12:08:00) [12]2 [13] Id (13.06.06 12:06)
Ну так он же у тебя есть при вставке в таблицу. Там же (в тригере) и заполняй лог.
Id (2006-06-13 12:06:00) [13]
> ИД-шник вставленной записи что ли?
Да
Id (2006-06-13 12:06:00) [14]
> А зачем тогда CURRENT_USER ?
Есть люди, которые тоже знают мой LOGIN и Пароль. Если я вышел с раб. места, то потом я увижу, что кто-то изменял базу.
Sergey13 (2006-06-13 12:02:00) [15]2[7] Id (13.06.06 11:57)
> А если машина локальная, можно на это опираться?
Если так, то проще, но ошибки все равно могут возникать, если например один генератор используется для разных таблиц и в разных транзакциях. Т.е. риск меньше, но есть. А тчо ты хочешь таким образом найти? ИД-шник вставленной записи что ли?
Сергей М. (2006-06-13 12:01:00) [16]
> Именно так и будет
А зачем тогда CURRENT_USER ?
Id (2006-06-13 12:00:00) [17]
> 100%-й гарантии доступа к базе лишь одного пользователя
> в каждый момент времени
Именно так и будет
Сергей М. (2006-06-13 11:59:00) [18]
> если машина локальная, можно на это опираться?
Опираться на это можно лишь в случае 100%-й гарантии доступа к базе лишь одногопользователя в каждый момент времени.
Id (2006-06-13 11:57:00) [19]
> Sergey13 © (13.06.06 11:52) [5]
А если машина локальная, можно на это опираться?
Сергей М. (2006-06-13 11:57:00) [20]
> Id (13.06.06 11:49) [4]
И действительно (см. [5]) - такая логика не терпит критики.
Пиши в ту самую "другую таблицу" непосредственно значение new.PrymaryKeyField