Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016 / 21 сообщений из 21, страница 1 из 1
01.03.2017, 09:55
    #39412174
Maxim Kovalenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Саша, приветствую!

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

Код: 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
01.03.2017, 15:18
    #39412512
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Потому что версия от 27.10.2016 вызывает fb_shutdown перед выгрузкой клиента, в том числе для FB 3.
Попробуй сегодняшний билд, только что выложил.
...
Рейтинг: 0 / 0
01.03.2017, 17:19
    #39412663
Maxim Kovalenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
IBExpert, Спасибо, проверим.
IBExpertперед выгрузкой клиента
Вот только не понял зачем при выгрузки dll-ки вызывать fb_shutdown? Если конечно я правильно понял фразу :)
...
Рейтинг: 0 / 0
02.03.2017, 16:14
    #39413229
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Maxim KovalenkoВот только не понял зачем при выгрузки dll-ки вызывать fb_shutdown? Если конечно я правильно понял фразу :)

Когда ты закрываешь последний (в блоке) коннект, перед выгрузкой fbclient.dll вызывается (вызывалась) fb_shutdown.
...
Рейтинг: 0 / 0
03.03.2017, 10:24
    #39413530
Maxim Kovalenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
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
03.03.2017, 11:28
    #39413586
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
В эксперте тот же блок тоже ошибку дает?
...
Рейтинг: 0 / 0
03.03.2017, 12:35
    #39413620
Maxim Kovalenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
IBExpert,

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

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

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

А, вот еще вижу, что у тебя в строке коннекта просто fbclient.dll указана. А откуда оно его тягает?? Ты уверен, что это клиент от тройки?
Не, ты попробуй полный путь к fbclient.dll прописать.
...
Рейтинг: 0 / 0
04.03.2017, 12:22
    #39414064
Maxim Kovalenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Да не проблема попробую.
Только. это я сравниваю пока что именно FB2.5 (см код IBEBlock) т.е. даже когда и source и target 2.5 не сравнивает и падает.
А fbclient.dll лежит в той же папке с exe-ком.
...
Рейтинг: 0 / 0
05.03.2017, 05:17
    #39414217
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
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
05.03.2017, 09:16
    #39414229
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Придумал такой вариант. В начале блока (или непосредственно перед дисконнектами) нужно вызвать

ibec_SetEnvironmentVariable('IBECallFBShutdown', FALSE);

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

ibec_SetEnvironmentVariable('IBECallFBShutdown', TRUE);

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

IBEScript нужно свежий скачать.
...
Рейтинг: 0 / 0
06.03.2017, 10:08
    #39414523
Maxim Kovalenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
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
06.03.2017, 10:38
    #39414549
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExecScriptText2 ошибка на версии IBEScript.dll от 27.10.2016
Maxim KovalenkoЕсли я правильно понял, то это нужно вставить вот так?

Пойдет.

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

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

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

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

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

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


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