Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически часто с пользователем)
Текущее время: 28.10.2024 15:20

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 18.09.2012 16:53 
Не в сети

Зарегистрирован: 18.09.2012 16:07
Сообщения: 5
Подскажите как получить предыдущее значение поля?
Есть таблица "Перемещения", в нее триггером попадают данные из основной таблицы при изменении "Сотрудник".
Идея такая, чтобы при изменении поля "Сотрудник" данные из таблицы попадали в таблицу перемещения автоматически, но в таблице "перемещения" должен учитывать не только новый, но также и старый пользователь, чтобы было видно от кого и кому передали. Но получить значение старого пользователя при помощи триггера у меня не получается. Подскажите как выйти из данной ситуации?
Заранее спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18.09.2012 17:29 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
1. Использовать другое время срабатывания триггера
2. Включить историю изменений и слазить туда за старым значением
3. Отказаться вообще от данной затеи в пользу другой, более правильной реализации того же самого.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20.09.2012 03:14 
Не в сети

Зарегистрирован: 18.09.2012 16:07
Сообщения: 5
Ivan писал(а):
1. Использовать другое время срабатывания триггера
2. Включить историю изменений и слазить туда за старым значением
3. Отказаться вообще от данной затеи в пользу другой, более правильной реализации того же самого.

Я конечно понимаю что надо сделать что-то из этого, новсе мои попытки не привели к нужнгму результату...
Если можно расскажите по подробнее.
1. Какое другое можно ипользовать время срабатывания для моих целей?
2. История изменений включна. Но как сделать чтобы значение из него попадало в таблицу перемещения?
3. А какая будет более правильная? Буду благодарен за совет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20.09.2012 09:00 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Прежде всего поясните, под "предыдущим значением поля" вы подразумеваете запись, у которой ID меньше на единицу?
Или то значение, которой было до ввода нового значения в то же пол в ту же запись?
Неплохо бы сделать скриншот вашей таблицы "Перемещения".

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20.09.2012 13:02 
Не в сети

Зарегистрирован: 18.09.2012 16:07
Сообщения: 5
Ivan писал(а):
Прежде всего поясните, под "предыдущим значением поля" вы подразумеваете запись, у которой ID меньше на единицу?
Или то значение, которой было до ввода нового значения в то же пол в ту же запись?
Неплохо бы сделать скриншот вашей таблицы "Перемещения".
Да конечно я имею ввиду предыдущее значение поля (т.е. до занесения туда нового значения).
Скриншот думаю будет излишним, она почти такая-же как в демонстрационной базе. Там есть id устройства, дата и время перемещения, ОТ КОГО и КОМУ перемещено (текствые поля совмещающие в себе кабинет и фамилию сотрудника). Вот как раз заполнение этих полей меня и интересует... КОМУ я заполняю нормально триггером, но ОТ КОГО получить не удается...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20.09.2012 14:05 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Т.е. есть две таблицы - основная qdfMain (где меняем значение поля UserName) и вторая "Перемещения" tblMovements (где фиксируется OldUser и NewUser), так? Тогда предыдущее значение можно взять из этой второй таблицы "Перемещения".

1. Попробуйте в триггере задать "Когда срабатывает" - "При изменении записи" или "При изменении" поля. Может быть, при каком-то варианте удастся прочитать старое значение с помощью ссылки в угловых скобках. Если же нет - надо делать запрос.
2. Написать INSERT INTO ... SELECT
3. Я думаю - надо смотреть в tblMovements.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21.09.2012 08:44 
Не в сети

Зарегистрирован: 18.09.2012 16:07
Сообщения: 5
Ivan писал(а):
Т.е. есть две таблицы - основная qdfMain (где меняем значение поля UserName) и вторая "Перемещения" tblMovements (где фиксируется OldUser и NewUser), так? Тогда предыдущее значение можно взять из этой второй таблицы "Перемещения".
Да именно так. Хм... брать предыдущее поле из этой же таблицы? хитро. Попробую, но мне кажется должен быть более простой способ...
Ivan писал(а):
1. Попробуйте в триггере задать "Когда срабатывает" - "При изменении записи" или "При изменении" поля. Может быть, при каком-то варианте удастся прочитать старое значение с помощью ссылки в угловых скобках. Если же нет - надо делать запрос.
к сожалению все триггеры по угловым скобками выводят значение нового поля а старого нет.... А какой запрос и чему тут можно придумать?

Цитата:
2. Написать INSERT INTO ... SELECT
не совсем понял куда это написать. Эту команду
выполняет мой триггер на основной таблице вставляя данные в таблице перемещений.
Цитата:
3. Я думаю - надо смотреть в tblMovements.
я туда и смотрю, но толку от смотрения пока не много... :wink:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21.09.2012 08:45 
Не в сети

Зарегистрирован: 18.09.2012 16:07
Сообщения: 5
yarcom писал(а):
Ivan писал(а):
Т.е. есть две таблицы - основная qdfMain (где меняем значение поля UserName) и вторая "Перемещения" tblMovements (где фиксируется OldUser и NewUser), так? Тогда предыдущее значение можно взять из этой второй таблицы "Перемещения".
Да именно так. Хм... брать предыдущее поле из этой же таблицы? хитро. Попробую, но мне кажется должен быть более простой способ...
Ivan писал(а):
1. Попробуйте в триггере задать "Когда срабатывает" - "При изменении записи" или "При изменении" поля. Может быть, при каком-то варианте удастся прочитать старое значение с помощью ссылки в угловых скобках. Если же нет - надо делать запрос.
к сожалению все триггеры по угловым скобками выводят значение нового поля а старого нет.... А какой запрос и чему тут можно придумать?

Цитата:
2. Написать INSERT INTO ... SELECT
не совсем понял куда это написать. Эту команду
выполняет мой триггер на основной таблице вставляя данные в таблице перемещений.
Цитата:
3. Я думаю - надо смотреть в tblMovements.
я туда и смотрю, но толку от смотрения пока не много... :wink:


И еще один вопрос. Как сама таблица updatehistory получает значения полей?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21.09.2012 10:44 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Ну, что я вам могу сказать? -Учитесь писать SQL-запросы, типовой вопрос №18 смотрите, там все ссылки.
tblUpdatehistory - да, это еще одно место, куда можно сходить за предыдущим значением поля. Она заполняется на основе внутренней программной логики (hardcoded).

>все триггеры по угловым скобками выводят значение нового поля а старого нет.... А какой запрос и чему тут можно придумать?
Для начала скажите, у вас редактирование в форме или в таблице?
Запрос элементарный в ту же запись (которая изменяется) и, тк на момент выполнения триггера она еще не сохранена (хотя это зависит и от времени срабатывания триггера), то запрос должен вернуть вам именно предыдущее значение.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB