powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
21 сообщений из 21, страница 1 из 1
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39412174
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша, приветствую!

Есть вот такой код, который вызывает сабж:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function ExecuteIBEScript(aScriptText: string; aIBEBlockProgress: TIBEBlockProgress = nil; aIBEHandleError: TIBEHandleError = nil): Boolean;
var
  IBEHandle: THandle;
  ESP: TExecuteScriptProc2;
begin
  Result := False;
  IBEBlockProgress := aIBEBlockProgress;
  IBEHandleError := aIBEHandleError;
  IBEHandle := LoadLibrary(cIBESCRIPT_DLL);
  try
    if IBEHandle > HINSTANCE_ERROR then
    begin
      ESP := GetProcAddress(IBEHandle, 'ExecScriptText2');
      if @ESP <> nil then
        ESP(PAnsiChar(AnsiString(aScriptText)), @HandleError, @BeforeExec, @AfterExec, @BlockProgress);
      Result := True;
    end;
  finally
    if IBEHandle > HINSTANCE_ERROR then
      FreeLibrary(IBEHandle);
  end;
end;



Ну а туда скармливается стандартный IBEBlock по сравнению баз:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
execute ibeblock  as  
begin
  
cbb = 'execute ibeblock (LogMessage variant)
as 
begin 
ibec_progress(LogMessage); 
end';  

SourceDB = ibec_CreateConnection(__ctInterBase,
'DBName="SERV1:DB_1"; ClientLib=fbclient.dll; User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');
TargetDB = ibec_CreateConnection(__ctInterBase,
'DBName="SERV2:DB_2"; ClientLib=fbclient.dll; User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');   

try
  ibec_CompareMetadata(SourceDB, TargetDB, 'd:\test.txt', 'ServerVersion=FB25; OmitDescriptions; IgnoreIBEObjects; DescriptionMode=COMMENT', cbb);
finally
  ibec_CloseConnection(TargetDB);
  ibec_CloseConnection(SourceDB);
end;  
end;



Самописная программка которая автоматизирует создания скрипта для обновления меты баз. Т.к. сейчас усиленно готовимся к переходу на трешку в продакшене то и решили подтянуть и крайний IBEScript.dll версия от 27.10.2016. На версии IBEScript.dll от 25.02.2014 все выполняется нормально, а вот на сабжевой валится с ошибкой что connection shutdown.
Ну и хочется понять собственно почему на более новой версии валится с ошибкой и есть ли в новой версии dll-ки какие-то фишки в части поддержки FB30, а именно в плане ibec_CompareMetadata в режиме ServerVersion=FB30.

Спасибо.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39412512
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что версия от 27.10.2016 вызывает fb_shutdown перед выгрузкой клиента, в том числе для FB 3.
Попробуй сегодняшний билд, только что выложил.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39412663
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, Спасибо, проверим.
IBExpertперед выгрузкой клиента
Вот только не понял зачем при выгрузки dll-ки вызывать fb_shutdown? Если конечно я правильно понял фразу :)
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413229
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim KovalenkoВот только не понял зачем при выгрузки dll-ки вызывать fb_shutdown? Если конечно я правильно понял фразу :)

Когда ты закрываешь последний (в блоке) коннект, перед выгрузкой fbclient.dll вызывается (вызывалась) fb_shutdown.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413530
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,
Саша, привет.
Увы вот такая бяка все равно лезет, на старой dll-ке - все нормально.

Запускается, бежит строка че делает, потом доходит до

DB target from version [01.03.2017] to version [03.03.2017]
Comparing in progress...
Linking dependencies... definitions...

а потом

Валится сообщение.
Unsuccessful execution caused by a system error that precludes successful execuption of subsequent statements.
connection shutdown
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413586
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В эксперте тот же блок тоже ошибку дает?
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413620
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Нет, программа (по крайне мере на 2017.2.7.1) отрабатывает нормально. Но на Linking dependencies... definitions... тоже задумывается, но потом бежит дальше и дает результирующий скрипт.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413854
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, тогда осталось проверить на сравнении какой-нибудь другой базы. Можно даже с самой собой.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413873
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша, не очень понимаю что это дает.
Есть след. набор фактов.
1. Старая dll-ка отрабатывает нормально, НО не понятно что там с поддержкой FB30?
2. IBExpert и старый и новый отрабатывает нормально.
3. Новая, в том числе и от 01 марта падает

Вывод, на мой не посвященный взгляд, достаточно очевидный. Что-то в dll-ке
Ибо и код IBBlock и вызов не меняется, идет подмена только dll-ки. и тот же IBBlock в свежем IBExpert-е отрабатывает на ура.

Вопрос, что даст сравнение других баз? Не должна работоспособность dll-ки зависеть от места базы или самой базы. Тем более это практически одна и та же по мета. Т.е. source - это база разработчиков, target - эталонная, копии которой работают в продакшене. Т.е. просто некая дельта, причем односторонняя. От source к target.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39413879
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это воспроизводится с любой базой, то и я у себя это воспроизведу на любой базе, скорее всего.
Если только на конкретной - то без нее я не воспроизведу.
Вот что это дает.

А, вот еще вижу, что у тебя в строке коннекта просто fbclient.dll указана. А откуда оно его тягает?? Ты уверен, что это клиент от тройки?
Не, ты попробуй полный путь к fbclient.dll прописать.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414064
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не проблема попробую.
Только. это я сравниваю пока что именно FB2.5 (см код IBEBlock) т.е. даже когда и source и target 2.5 не сравнивает и падает.
А fbclient.dll лежит в той же папке с exe-ком.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414217
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim KovalenkoДа не проблема попробую.
Только. это я сравниваю пока что именно FB2.5 (см код IBEBlock) т.е. даже когда и source и target 2.5 не сравнивает и падает.
А fbclient.dll лежит в той же папке с exe-ком.

А. Мне почему-то почудилось, что речь о FB3.
Тогда все понятно. Для FB 2.5 fb_shutdown дергается и в актуальной версии IBEScript. Дергать ее или не дергать - определяется по версии fbclient.dll, версия сервера в настройках ibec_CompareMetadata рояли не играет.

Как лечить - я, честно говоря, пока не представляю.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414229
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумал такой вариант. В начале блока (или непосредственно перед дисконнектами) нужно вызвать

ibec_SetEnvironmentVariable('IBECallFBShutdown', FALSE);

Это предотвратит вызов fb_shutdown после дисконнекта.
После дисконнектов можно вернуть обратно:

ibec_SetEnvironmentVariable('IBECallFBShutdown', TRUE);

Или не возвращать, если в эксперте FB 2.5 embedded не используется.

IBEScript нужно свежий скачать.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414523
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertibec_SetEnvironmentVariable('IBECallFBShutdown', FALSE);

Если я правильно понял, то это нужно вставить вот так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
execute ibeblock  as  
begin
  {Вот сюда добавляем строчку}
  ibec_SetEnvironmentVariable('IBECallFBShutdown', FALSE);
  {Далее без изменений}
cbb = 'execute ibeblock (LogMessage variant)
as 
begin 
ibec_progress(LogMessage); 
end';  

SourceDB = ibec_CreateConnection(__ctInterBase,
'DBName="SERV1:DB_1"; ClientLib=fbclient.dll; User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');
TargetDB = ibec_CreateConnection(__ctInterBase,
'DBName="SERV2:DB_2"; ClientLib=fbclient.dll; User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');   

try
  ibec_CompareMetadata(SourceDB, TargetDB, 'd:\test.txt', 'ServerVersion=FB25; OmitDescriptions; IgnoreIBEObjects; DescriptionMode=COMMENT', cbb);
finally
  ibec_CloseConnection(TargetDB);
  ibec_CloseConnection(SourceDB);
end;  
end;



А для FB3 то же нужен этот вызов или ты отключил его и мне тогда нужно анализировать добавлять или нет отключение дисконнекта в зависимости от версии FB?
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414549
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim KovalenkoЕсли я правильно понял, то это нужно вставить вот так?

Пойдет.

Maxim KovalenkoА для FB3 то же нужен этот вызов или ты отключил его и мне тогда нужно анализировать добавлять или нет отключение дисконнекта в зависимости от версии FB?

Ничего больше анализировать не надо. Для клиента FB 3 fb_shutdown и так не вызывается, значение IBECallFBShutdown не проверяется.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414555
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertПойдет.

Ok, попробуем.
Но IBEScript.dll нужно скачать свежую?
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414576
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim KovalenkoНо IBEScript.dll нужно скачать свежую?

А сам как думаешь? Мой ответ на этот вопрос чуть выше был.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414594
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert А сам как думаешь?

Так не очень понятно, т.к. от 1 марта я скачивал, где ты отключал shutdown для FB3, а тут я вставляю строчку, и вроде у тебя ничего не добавляется. Я уже посмотрел что крайний IBEScript.dll от 5 марта. Заберем, не вопрос.
Спасибо!
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414633
Maxim Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовали, по крайне мере не упало и скрипт сваял похожий на правду. А то получалось совсем интересно, вытаскивалась мета из источника, потом материлось на shutdown, но ibblock дорабатывал честно до конца, а т.к. данные по target были пустые он благополучно создавал результирующий скрипт где все объекты базы дропались. Клевый компарер получался)).
Саш, может этот вариант тоже защитить от дурака, если по target ни одной строчки меты вытащить не получилось, то что-то вразумительное писать, что мол нету у тебя ничего по приемнику?
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39414644
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, сравнивать и впрямь стало не хуже, чем в 2013 году :)
Для меня просто эталоном является IBEScript.dll от сентября 2013 года.
Несколько десятков-сотен по клиентам раскидано, не обновляется он в нашей среде автоматом.
Потом Александр затеял масштабные переделки по компареру и были какое-то время нестыковки, которые ему сообщали и он исправлял. Теперь все отлично.
Я периодически сравниваю при работах у клиентов скрипты при сравнении метаданных, слепленные старым этим IBEScript и новым, который у меня. Отличия лишь иногда в порядке следования однотипных операторов, ну тут уж - понятно - как выборка легла из системных таблиц.

Не будет лениво если, то затею обновление IBEScript у клиентов в ходе очередного автообновления своего автообновлятора :)
Простите за каламбур.
...
Рейтинг: 0 / 0
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
    #39415497
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o_v_aТеперь все отлично.О, позитив, спасибо! А то у меня тоже графморда сделана к компрареру, у которой "под капотом" как раз версия "до революции компарера".
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]