|
Персонализация
|
|||
---|---|---|---|
#18+
Всем привет! Есть форма, в которой вводятся строки. Каждый раз, когда вводится новая строка, ее копия записывается по временную табличку через триггер WVR. Пока пользователь "ходит" по строкам туда-сюда - синхронизация строк с табличкой работает нормально. Но стоит только удалить строку (или очистить запись) - синхронизация строк и записей в табличке нарушается. Т.е. например было введено на форме 5 строк. Во временную табл. тоже записалось 5 строк. Но потом взяли и две строки удалили с формы. А в табличке так и осталось 5 записей. Подскажите, пожалуйста, как можно синхронизировать данный процесс? Как через персонализацию "отреагировать" на нажатие кнопок "Удалить" или "Очистить запись"? Модератор: Тема перенесена из форума "Oracle". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 16:32 |
|
Персонализация
|
|||
---|---|---|---|
#18+
В том то и дело, что синхронизация в данном случае настроена не нормально - не описана синхронизация удаления строк. Ее и надо описать. Необходимо отслеживать в формсах это событие и одновременно удалять строки из временной таблицы. Например, можно использовать триггер ON-DELETE или POST-DELETE. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 11:17 |
|
Персонализация
|
|||
---|---|---|---|
#18+
Maratus, но ведь речь идет о персонализации. Используется стандартная форма и я в нее не имею права влезать. Странно конечно, но получается, что через персонализацию никак не отследить нажатие кнопок "Удалить" ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 12:39 |
|
Персонализация
|
|||
---|---|---|---|
#18+
asimakovMaratus, но ведь речь идет о персонализации. На самом деле тяжело понять о чем идет речь. Не понятен термин "Персонализация". Что используется под временной таблицей и что делает триггер WVR? asimakovСтранно конечно, но получается, что через персонализацию никак не отследить нажатие кнопок "Удалить" Можно отслеживать события в базе данных, если что-то реальное происходит в ней по кнопке "Удалить". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:29 |
|
Персонализация
|
|||
---|---|---|---|
#18+
Maratus, Персонализация = Индивидуализация. Временная таблица - временная табличка, которую я сам создаю (CREATE GLOBAL TEMPORARY TABLE my_table_tmp ...) Триггер WVR = WHEN-VALIDATE-RECORD В том-то и дело, что в базе пока ничего не происходит, все происходит на форме без сохранения (пока) данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:19 |
|
Персонализация
|
|||
---|---|---|---|
#18+
Если нет доступа к редактированию формы, то ничего не сможете сделать. Если есть - то на блок из которого удаляются строки вешается триггер, который перехватывают событие удаления строк из блока и переопределяет или дополняет его. On-Delete - Заменяет стандартный процесс управления удаляемыми записями в Oracle Forms Post-Delete - Проверочные транзакции при удалении записи из БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 15:37 |
|
Персонализация
|
|||
---|---|---|---|
#18+
Maratus, К сожалению доступа к форме нет, но все равно, спасибо за обстоятельный ответ! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 16:09 |
|
Персонализация
|
|||
---|---|---|---|
#18+
asimakov, Допустим, текущая персонализация складывает записи во временную таблицу. Каждой записи в качестве уникального идентификатора присваивает порядковый номер строки в блоке (:SYSTEM.CURSOR_RECORD). Можно попробовать следующее: Настраиваем обработку следующих событий 1. На событии WHEN-NEW-FORM-INSTANCE инициализируем глобальную переменную XX_PREV_REC = 0 2. На событии WHEN-NEW-RECORD-INSTANCE нужного блока сравниваем значение XX_PREV_REC и :SYSTEM.CURSOR_RECORD. Если совпадают, значит запись была удалена и произошел сдвиг нумерации строк блока. Удаляем из временной таблицы запись с индикатором=:SYSTEM.CURSOR_RECORD. Затем update временная_таблица set индикатор=индикатор-1 where индикатор > :SYSTEM.CURSOR_RECORD. 3. На событии WHEN-NEW-RECORD-INSTANCE нужного блока присваиваем глобальной переменно XX_PREV_REC значение :SYSTEM.CURSOR_RECORD. Должно сработать, поскольку триггер WHEN-NEW-RECORD-INSTANCE срабатывает при перемещении на новую строку. При этом меняется и номер строки :SYSTEM.CURSOR_RECORD. Если триггер сработал, а номер строки не изменился, значит произошло удаление или очистка записи. Только удаление строки от очистки тут не различишь. Хотя и тут, наверное, можно извернуться, запоминая значение системной переменной RECORD_STATUS. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2011, 09:02 |
|
|
start [/forum/topic.php?fid=51&msg=37429017&tid=1878636]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 474ms |
0 / 0 |