|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
Добрый день! Пытаюсь обновить одну базу VFP (.DBC) из другой. Поскольку пр-ние FoxPro знаю плохо, стал делать как привычнее - Delphi/ADO. И все бы ничего - но к некоторым таблицам привязаны триггеры, которые срабатывают при изменении записи. И вылетают ошибки типа "Trigger failed", "Row cannot be located for updating.." и пр. К тектам триггеров, как я понимаю, доступа нет - т.к. есть только база .DBC, есть .app Возникает вопрос - можно ли их как-то отключить? Если нет, то что делать? Ситуация странная - из самой бух.пр-мы изменить какой-нить налог - пжлста. А когда делаю это же программно, update-ом - получаю ошибку о "Trigger failed" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 13:44 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
> К тектам триггеров, как я понимаю, доступа нет - т.к. есть только база .DBC Именно там и находится код триггеров. Правда исходный текст можно оттуда изъять, тогда нужен рефокс. > Возникает вопрос - можно ли их как-то отключить? DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE > Если нет, то что делать? Посмотреть, что там внутри Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
> вылетают ошибки типа "Trigger failed" Понятное дело, там небось ссылки на закрытые таблицы и несуществующие переменные. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 15:24 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
Delete trigger, как я понимаю вообще удаляет триггер, т.е. дропает его. Мне же нужно временно отключить его на время моего обновления. Этого, как я понял, нельзя. Modify сделать, не имея текста триггера, тоже невозможно - если только заменить его на новый. Удалить - и восстановить потом - я также не смогу, не имея исходного текста, так? А из .DBC его выдернуть напрямую (а потом вставить обратно) нельзя никак? .. ссылки на закрытые таблицы и несуществующие переменные А табл. и переменные эти в тексте самой пр-мы, так? Тогда получается что извне изменить таблицу просто невозможно, даже если обновл. данные корректны? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 15:41 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
Подожди.. Код: plaintext 1. 2.
вкладка Table, там есть информация о триггерах? Возможно там вызвается какая-либо функция, которая зашита в app. Или Код: plaintext 1. 2. 3. 4.
Ты можешь сохранить содержимое (COPY MEMO to xxx.txt), удалить триггер, выполнить свои действия, а затем восстановить мемо из файла (APPEND MEMO property FROM xxx.txt OVERWRITE as 0). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 16:05 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
Там есть название триггерах, констрайнтах и пр. 2-ой вариант - с копированием в мемо - попробую обдумать, только в property не просто текст, там все в куче; довольно рискованно так отключать - сбойнет, а триггер уже не восстановишь. В общем куда ни кинь... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 16:40 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
> Там есть название триггерах, констрайнтах и пр. Там должно быть выражение, возвращающее .t. для соотв. операции. Возможно, это имя функции (или хр. процедуры), о чем я уже говорил. > 2-ой вариант - с копированием в мемо - попробую обдумать, только в property не просто текст, там все в куче; довольно рискованно так отключать - сбойнет, а триггер уже не восстановишь. В общем куда ни кинь... Правильно, не только текст. А кто сказал что мемо это только текст? Расширение txt я от недалекой фантазии в примере привел. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 17:26 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
Для просмотра/редактирования текстов хранимых процедур и триггеров можно воспользоваться командой MODIFY PROCEDURE Код: plaintext 1.
По названиям можно догадаться к какой таблице и на какое действие триггер. Ну и, как рекомендовал NNN,не удаляя кода возвратить .T., где нужно. Чего то типа ALTER TABLE ... DISABLE TRIGGER... как в TSQL нет ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 19:10 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
Небольшое дополнение Если пользоваться MODIFY PROCEDURE, то там в тексте должна быть одна важная строка Код: plaintext
Код выше этой строки сгенерирован RI Builder-ом и может быть с помощью того же RI Builder-а перегенерирован. Код ниже - написан разработчиком, не виден для RI Builder-а и не изменяется при регенерации. При одинаковых именах триггеров в верхней и нижней части, написанный разработчиком код оверрайдит сгенерированный. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 08:45 |
|
Срабатывание триггеров в VFP
|
|||
---|---|---|---|
#18+
не факт, что триггер использует хр. процедуру. еще один способо добраться до текста триггера: Код: plaintext 1. 2.
В файле дожно быть что-то вроде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Смотри, что у тебя стоит после *UpdateTrigger . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 09:08 |
|
|
start [/forum/topic.php?fid=41&fpage=425&tid=1598391]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 179ms |
0 / 0 |