|
|
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Собственно выполнение SQL-скрипта проблем не вызывает, но нужно сделать так, чтобы некоторые команды скрипта игнорировались. Конкретно, нужно игнорировать команды "connect" и "set clientlib", если они имеются в скрипте. Делаю так (подробности опущу): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Я решил, возможно неправильно, что если функция BeforeExec возвращает в качестве результата не ноль, то команда игнорируется. И, это действительно верно для команд "set clientlib" и "delete". Но вот "connect" всё равно выполняется, хоть ты тресни. Кто знает, как побороть? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 14:31:02 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
Сорри, конечно ExecuteScriptFile(PChar(FName), @ScriptError, @BeforeExec, @AfterExec); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 14:35:46 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
CONNECT отдельно обрабатывается, пропустить не получится в текущей версии. Скорее всего, просто забыл об этом, когда делал возможность игнорировать статементы. Только ждать исправления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 15:03:13 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
IBExpert, Спасибо за оперативный ответ. Буду искать пути обхода. Попробую в ScriptError просто проигнорировать ошибку, если она вызвана по коннекту (я ведь правильно понимаю, что Result := 0 в этой функции обработки ошибок позволит продолжить выполнение?). Правда плохо будет, если connect у конечного пользователя окажется правильным и выполнится без ошибок. И, раз уж Вы здесь, может сориентируете, когда обновление можно ждать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 15:11:21 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
С игнорированием ошибки ничего не получится. Там сначала происходит дисконнект текущего соединения, а уж потом вызывается OnBeforeExecuteStatement и создается новое соединение. Соответственно, даже если ошибку проигнорировать, коннекта уже не будет. Result = 1 в обработчике ошибок останавливает выполнение скрипта, Result = 2 - выполнение будет продолжено. ฺИсправленную версию ibescript постараюсь выложить завтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 15:31:59 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
Впрочем, исправил уже и выложил. Но не тестил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 16:26:50 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
IBExpert, Прошу прощения что встреваю, но как-то вспомнилось. То, что после ExecuteScriptFile идет принудительный дисконнект - это так и задумано, или случайно получилось? Или у меня руки неправильного радиуса? Суть задачи - есть много скриптов, которые надо последовательно выполнить на целевой базе. Ну и перед выполнением каждого скрипта надо присоединятся наново. Не то чтобы напрягает, но озвученный вопросс возник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 16:35:37 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
miwaonline, Не могу сказать, почему сделано именно так. Давно это было... А кучку скриптов из файлов на одном коннекте выполнить легко, достаточно собрать временный скрипт с INPUT'ами в нем и выполнить его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 16:41:06 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
Обновление забрал, проверил, работает. Огроменное спасибо! Пласт проблем снят. Что касается принудительного дисконнекта после выполнения скрипта... Получается, я зря DISCONNECT использую? А я то думаю, почему после выполнения скрипта дисконнект в качестве результата -1 возвращает. Вообще, можно конечно формировать один скрипт из пакета скриптов, но тогда в случае возникновения ошибки в одном из скриптов пакета, как определить в каком именно скрипте эта ошибка возникла? Придётся, видимо, каждый раз коннектиться перед выполнением скрипта. И ещё вопрос. А есть где-нибудь подробная документация по использованию IBEScript? Я что-то не смог найти. А то вот что какая процедура должна возвращать в качестве результата - не очень ясно. Ваша фраза "Result = 1 в обработчике ошибок останавливает выполнение скрипта, Result = 2 - выполнение будет продолжено." добавила вопросов. А что тогда Result = 0? Вроде тоже скрипт спокойно продолжает выполняться. И какие результаты и с каким значением могут возвращать другие процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 07:01:23 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFCВообще, можно конечно формировать один скрипт из пакета скриптов, но тогда в случае возникновения ошибки в одном из скриптов пакета, как определить в каком именно скрипте эта ошибка возникла? Придётся, видимо, каждый раз коннектиться перед выполнением скрипта. А колбек-функции тебе для чего даны? RhinoFCИ ещё вопрос. А есть где-нибудь подробная документация по использованию IBEScript? Я что-то не смог найти. А то вот что какая процедура должна возвращать в качестве результата - не очень ясно. Ваша фраза "Result = 1 в обработчике ошибок останавливает выполнение скрипта, Result = 2 - выполнение будет продолжено." добавила вопросов. А что тогда Result = 0? Вроде тоже скрипт спокойно продолжает выполняться. И какие результаты и с каким значением могут возвращать другие процедуры? А вот тут присоединяюсь. В свое время кроме примера на оффсайте и еще одного, немного более обширного где-то здесь больше ничего не нашел. Так что мысль о том, что я научился забивать микроскопом один тип гвоздей нет-нет да согреет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 08:40:49 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFCПолучается, я зря DISCONNECT использую? Получается, что зря. RhinoFC Вообще, можно конечно формировать один скрипт из пакета скриптов, но тогда в случае возникновения ошибки в одном из скриптов пакета, как определить в каком именно скрипте эта ошибка возникла? Ну, возьми да посмотри, что там в логах в этом случае повляется. Я вот так сходу не помню, а проверять лень. RhinoFCИ ещё вопрос. А есть где-нибудь подробная документация по использованию IBEScript? Нет такой. RhinoFCА то вот что какая процедура должна возвращать в качестве результата - не очень ясно. Ваша фраза "Result = 1 в обработчике ошибок останавливает выполнение скрипта, Result = 2 - выполнение будет продолжено." добавила вопросов. А что тогда Result = 0? Вроде тоже скрипт спокойно продолжает выполняться. В случае 0 поведение будет зависеть от значения STOPONERROR, которое по умолчанию равно OFF, а в скрипте переключается командой SET STOPONERROR ON/OFF RhinoFCИ какие результаты и с каким значением могут возвращать другие процедуры? Про обработчик ошибок я рассказал все. ฺBeforeExecuteStatement - любое ненулевое значение означает пропуск статемента. AfterExecuteStatement - любое ненулевое значение останавливает выполнение скрипта. Вроде все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 08:43:04 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
miwaonlineА колбек-функции тебе для чего даны? Да, про логи я ступил. Забыл, что речь про dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 08:44:55 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFCЧто касается принудительного дисконнекта после выполнения скрипта... Получается, я зря DISCONNECT использую? А я то думаю, почему после выполнения скрипта дисконнект в качестве результата -1 возвращает. А, вспомнил... Если ты вручную коннект создаешь функцией Connect, то для того, чтобы коннект не закрывался автоматом после выполнения скрипта, в опциях коннекта среди прочего нужно указать disconnect=manual. Тогда можно будет последовательно выполнить несколько скриптов на одном коннекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 09:27:40 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
IBExpert, О, disconnect=manual - это хорошо, сейчас проверим :) А как насчет более обширной документации по забиванию гвоздей микроскопом? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 10:11:40 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
miwaonline А как насчет более обширной документации по забиванию гвоздей микроскопом? ;) Ну что тебе сказать?... Будет время - обязательно документирую все :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 12:28:50 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
miwaonlineА колбек-функции тебе для чего даны? В колбэк-функции я получу инфу о том, какой стейтмент вызвал ошибку. А мне ещё надо в каком именно скрипте. А эта инфа потеряется, если я все скрипты солью в один и выполню его. Поэтому мне легче выполнять скрипты последовательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 12:33:32 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFCВ колбэк-функции я получу инфу о том, какой стейтмент вызвал ошибку. А мне ещё надо в каком именно скрипте. А эта инфа потеряется, если я все скрипты солью в один и выполню его. В общем-то, ничто не мешает анализировать INPUT'ы и вытаскивать из них имя файла текущего скрипта в свою переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 12:50:43 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
IBExpertRhinoFCВ колбэк-функции я получу инфу о том, какой стейтмент вызвал ошибку. А мне ещё надо в каком именно скрипте. А эта инфа потеряется, если я все скрипты солью в один и выполню его. В общем-то, ничто не мешает анализировать INPUT'ы и вытаскивать из них имя файла текущего скрипта в свою переменную. Ну вот тут я что-то недопонимаю. Есть два скрипта. Во втором ошибка (insertf into...). Сделал для проверки третий скрипт с двумя input'ами: input 's1.sql'; inpur 's2.sql'; Теперь его выполняю через ExecuteScriptFile. Возникает ошибка, которую отлавливаю в каллбэке ScriptError. Смотрю что даёт. Даёт ошибочный стэйтмент и сообщение об ошибке: 'Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 1, column 1. insertf.' Где я могу взять информацию о том, в каком из скриптов это произошло, в s1.sql или в s2.sql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 14:46:28 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFC, Намного раньше, когда ibescript сказал что-то типа "Executing INPUT 's2.sql'..." или что-то похожее (лень ставить експеримент чтобы узнать точную строку сообщения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:00:52 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFCГде я могу взять информацию о том, в каком из скриптов это произошло, в s1.sql или в s2.sql? В BeforeExec своем смотришь, что написано в INPUT, сохраняешь в свою переменную. При возникновении ошибки смотришь в эту переменную... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:03:45 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
miwaonlineRhinoFC, Намного раньше, когда ibescript сказал что-то типа "Executing INPUT 's2.sql'..." или что-то похожее (лень ставить експеримент чтобы узнать точную строку сообщения). В принципе, вариант с последовательным выполнением скриптов меня устраивает, как говорится, более чем. Но всё-же... Где раньше-то? В каллбэке BeforeExec? Он там input'ы не показывает. Только стэйтменты. Т.е. не говорит он ни чего об "executing input". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:10:57 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
IBExpertВ BeforeExec своем смотришь, что написано в INPUT, сохраняешь в свою переменную. При возникновении ошибки смотришь в эту переменную... А при возврате в главный скрипт что будет происходить?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:19:47 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
RhinoFCВ принципе, вариант с последовательным выполнением скриптов меня устраивает, как говорится, более чем. Но всё-же... Где раньше-то? В каллбэке BeforeExec? Он там input'ы не показывает. Только стэйтменты. Т.е. не говорит он ни чего об "executing input". Да, действительно. Но это поправимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:32:30 |
|
||
|
Выполнение скриптов с помощью ibescript.dll
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА при возврате в главный скрипт что будет происходить?.. Как минимум AfterExecuteStatement сработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:33:06 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38399572&tid=1564324]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 282ms |
| total: | 438ms |

| 0 / 0 |
