powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / xIBEScript.dll 64-bit
25 сообщений из 69, страница 1 из 3
xIBEScript.dll 64-bit
    #39978756
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заинтересованные в 64-битной версии IBEScript.dll для своих приложений есть?
Имеется xIBEScript.dll 64-bit; движок абсолютно новый, с нуля; состояние - пре-альфа, я бы сказал :)
Некоторые сложные функции в IBEBlock типа ibec_CompareTables, ibec_CompareMetadata пока не реализованы.
Выполнение стандартных SQL скриптов должно работать - этот функционал хочется отладить в первую очередь.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #39978780
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

О! Конечно интересно. А по какому адресу сие чудо можно скачать себе. Выложите URL, хочется по-тестировать.
А какие версии ЖП она поддерживает (2,3,4) ? Спасибо. Будем пробовать!
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #39978792
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AltHasp
А по какому адресу сие чудо можно скачать себе.


Выложил сюда:
https://www.ibexpert.com/rus/xIBEScript.sfx.exe

AltHasp
А какие версии ЖП она поддерживает (2,3,4) ?


Снаружи там [почти] все так же, как и в актуальных IBEscript.exe/dll
Специально поддержка каких-то версий не резалась, если только случайно.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #39984570
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил реализацию ibec_ExtractMetadata, ibec_ExecSQLScript, ibec_CompareTables, ibec_CompareMetadata.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #39991296
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert,
Да, заинтересованные есть. Пока интересует выполнение скрипта создания БД на родном SQL без IBEBlock. Также интересует работоспособность подобного скрипта
database_update.sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
execute ibeblock as
begin
  clib = ibec_GetGlobalVar('ClientLib', 'gds32.dll');
  BaseName = ibec_GetGlobalVar('dbName', ibec_ExtractFileName(ibec_GetCurrentDir()));

  ConnectionString = 'dbname=' || BaseName || ';user=sysdba;password=masterkey;clientlib=' || clib;
  conn = ibec_CreateConnection(__ctFirebird, ConnectionString);

  ibec_UseConnection(conn);

  select max(generation) from version_info into :GenValue;
  if (GenValue is null) then GenValue = 0;

  while (True) do begin
    GenNext = GenValue + 1;
    FileName = 'update_' || GenValue || '_' || GenNext || '.sql';
    if (not ibec_FileExists(FileName)) then break;

    ibec_Progress('');
    ibec_Progress('Executing script ' || FileName);

    cbb = 'execute ibeblock (BlockData variant) as
           begin
             sMessage = BlockData;
             if (sMessage is not null) then
               ibec_Progress(ibec_StringReplace(sMessage, '' : '', '' : ['' || ibec_Now || ''] '', 0));
           end';

    StartTime = ibec_GetTickCount;
    Msg = ibec_ExecSQLScript(conn, FileName, 'StopOnError=True', cbb);
    if (Msg is null) then
    begin
      ibec_Progress('Script executed successfully.');
    end
    else
    begin
      ibec_Progress('');
      ibec_Progress('Script executed with errors.');
    end;

    ibec_Progress('Total execution time: ' || (ibec_GetTickCount - StartTime) || 'ms');
    ibec_Progress('==================================================');
    
    insert into version_info (generation) values (:GenNext);
    commit;

    GenValue = GenNext;
  end;

  ibec_CloseConnection(conn);
end

Пока к сожалению проверить не могу. Еще не все переведено на 64-бит.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #39991301
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik
Пока к сожалению проверить не могу. Еще не все переведено на 64-бит.


Там в архиве кроме dll еще и экзешник есть, просто подсунуть ему скрипт.
Пока нашел одну проблему с вызовом функций без параметров:
StartTime = ibec_GetTickCount;
Без скобок - ibec_GetTickCount() - работать не будет, но это сейчас поправим.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40014494
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert , какие-то изменения в 64-битной версии с момента последнего поста появились?
Сейчас при вызове ibec_ExecSQLScript получаю такое сообщение:
-------- ERROR ----------
Unknown server version: . Known versions are: IB5X, IB61, IB65, IB70, IB71, IB75, IB2007, FB10, FB15, FB20, FB21, FB25, FB30, FB40, YA10.
Хотя 32-битное приложение работает нормально.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40014698
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik
какие-то изменения в 64-битной версии с момента последнего поста появились?


Да, там много. На днях обновлю - дам знать в этой теме.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40015838
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40016503
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, к сожалению в одном из скриптов та же ошибка, про неизвестную версию сервера, и дополнительно получил

-------- ERROR ----------
PSQL terminator (;) expected but 'into' found

в скрипте
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
execute ibeblock as

declare ibeblock cbb (BlockData variant) as
begin
  sMessage = BlockData;
  if (sMessage is not null) then
    ibec_Progress(ibec_StringReplace(sMessage, ' : ', ' : [' || ibec_Now() || '] ', 0));
end;

begin
  clib = '"' || ibec_GetGlobalVar('ClientLib', 'gds32.dll') || '"';
  BaseName = ibec_GetGlobalVar('dbName', ibec_ExtractFileName(ibec_GetCurrentDir()));

  ibec_Progress('');
  ibec_Progress('BaseName = ' || BaseName);

  ConnectionString = 'dbname="' || BaseName || '";user=sysdba;password=masterkey;SQLDialect=3;names=win1251;clientlib=' || clib;
  conn = ibec_CreateConnection(__ctFirebird, ConnectionString);
  try
    ibec_UseConnection(conn);

    select max(generation) from version_info into :GenValue;
    if (GenValue is null) then GenValue = 0;

    while (True) do 
    begin
      GenNext = GenValue + 1;
      FileName = 'update_' || GenValue || '_' || GenNext || '.sql';
      if (not ibec_FileExists(FileName)) then break;

      ibec_Progress('');
      ibec_Progress('Executing script ' || FileName);

      StartTime = ibec_GetTickCount();
      Msg = ibec_ExecSQLScript(conn, FileName, 'StopOnError=True', cbb);
      if (Msg is null) then
      begin
        ibec_Progress('Script executed successfully.');
      end
      else
      begin
        ibec_Progress('');
        ibec_Progress('Script executed with errors.');
      end;

      ibec_Progress('Total execution time: ' || (ibec_GetTickCount() - StartTime) || 'ms');
      ibec_Progress('==================================================');
      
      insert into version_info (generation) values (:GenNext);
      commit;

      GenValue = GenNext;
    end;
  finally
    ibec_CloseConnection(conn);
  end
end
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40016597
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik
IBExpert, к сожалению в одном из скриптов та же ошибка, про неизвестную версию сервера


Исправил. Но версию сервера таки стоит указывать для пущей определенности: ServerVersion=FB25 или какая она там у тебя.

oleg_oleinik
и дополнительно получил

-------- ERROR ----------
PSQL terminator (;) expected but 'into' found


Тоже исправил.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40017226
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, версию сервера в общем случае я не знаю, он на стороне заказчика и 32-битная версия как-то нормально отрабатывала такое. Переданный мной скрипт так и не работает

-------- ERROR ----------
''='' expected but ';' found

Разный вывод результатов у 32/64 версий для одного и того же скрипта
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
execute ibeblock as
begin
  if (not exists (select id from mlist)) then 
  begin
    mark_name = ibec_GetGlobalVar('user_name', 'Тестовый маркшейдер');
    insert into mlist (name) values (:mark_name);
    commit;
  end;
end

32-битная версияD:\LGGT\Projects\Bases\Scripts\journals>..\..\..\FBLocal\IBEScript -GClientLib=fbembed.dll setup.sql
IBEScript Version 2020.11.9.1 Copyright (c) 2002-2020 IBExpert Ltd (www.ibexpert.com)
Executing script: setup.sql
(Line: 10) : Executing IBEBlock...


Error in script: setup.sql
Error occurred while executing following statement (line 10):
-------- STATEMENT ----------
IF not exists (select id from mlist)

-------- ERROR ----------
Cannot perform operation -- DB is not open.


Script executed with errors.
Total execution time: 0ms
64-битная версияD:\LGGT\Projects\Bases\Scripts\journals>..\..\..\FBLocal64\IBEScript -GClientLib=fbembed.dll setup.sql
xIBEScript Version 2020.11.9.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)
Executing script: D:\LGGT\Projects\Bases\Scripts\journals\setup.sql
(Line: 1): Executing IBEBlock... FAILED!

Error occurred while executing following statement:
-------- STATEMENT ----------
execute ibeblock as
begin
if (not exists (select id from mlist)) then
begin
mark_name = ibec_GetGlobalVar('user_name', '???????? ??????????');
insert into mlist (name) values (:mark_name);
commit;
end;
end



-------- ERROR ----------
Cannot perform operation -- DB is not open.

Successful Time spent: 00:00.000
И непонятная кодировка результата второго скрипта. При перехвате вывода выяснилось, что это utf-8. Такое ощущение, что 64-битная версия и загружает скрипт в другой кодировке.

PS: Наша компания при переводе дельфийского приложения на 64 бита сначала убрала асмовские вставки, потом приведение типов pointer/integer заменили на pointer/int_ptr, ну и по мелочи. Я думал у вас также. А тут такое ощущение, что полностью новое приложение пишется.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40017412
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik
А тут такое ощущение, что полностью новое приложение пишется.


Об этом было сказано в самом первом сообщении темы: да, полностью новое.

Ну и на твоем блоке я могу только проверить работу парсера, а как блок выполняется - не могу.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40017589
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, так у меня скрипт видимо проверку синтаксиса не проходит.

-------- ERROR ----------
''='' expected but ';' found


для проверки скрипта в БД нужна таблица

Код: plsql
1.
2.
3.
CREATE TABLE VERSION_INFO (
    GENERATION  INTEGER
);



Запускаю на выполнение командой
xIBEScript -GClientLib=fbembed.dll -GdbName=[алиас БД] database_update.sql

во время работы скрипт ищет в текущей папке файлы с именами
update_0_1.sql
update_1_2.sql
...
и пытается выполнить все необходимые для обновления структуры БД
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40017608
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik
IBExpert, так у меня скрипт видимо проверку синтаксиса не проходит.

-------- ERROR ----------
''='' expected but ';' found


Да нет, твой блок у меня парсится без ошибок сейчас. А в этих update_0_1.sql что? Может, там парсер ошибки находит?
Он вообще доходит до выполнения этих скриптов или сразу ошибку выше выплевывает?

Завтра еще посмотрю, что там может быть.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40017702
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, update_0_1.sql это предполагается скрипт, сгенерированный через инструмент сравнения БД за минусом строки коннекта.
Но сейчас в папке нет ни одного такого файла.
Полный результат выполненияxIBEScript Version 2020.11.12.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)

Executing script: D:\LGGT\Projects\Bases\Scripts\database_update.sql
(Line: 1): Executing IBEBlock... FAILED!

Error occurred while executing following statement:
-------- STATEMENT ----------
execute ibeblock as

declare ibeblock cbb (BlockData variant) as
begin
sMessage = BlockData;
if (sMessage is not null) then
ibec_Progress(ibec_StringReplace(sMessage, ' : ', ' : [' || ibec_Now() || '] ', 0));
end;

begin
clib = '"' || ibec_GetGlobalVar('ClientLib', 'gds32.dll') || '"';
BaseName = ibec_GetGlobalVar('dbName', ibec_ExtractFileName(ibec_GetCurrentDir()));

ibec_Progress('');
ibec_Progress('BaseName = ' || BaseName);

ConnectionString = 'dbname="' || BaseName || '";user=sysdba;password=masterkey;SQLDialect=3;names=win1251;clientlib=' || clib;
conn = ibec_CreateConnection(__ctFirebird, ConnectionString);
try
ibec_UseConnection(conn);

select max(generation) from version_info into :GenValue;
if (GenValue is null) then GenValue = 0;

while (True) do
begin
GenNext = GenValue + 1;
FileName = 'update_' || GenValue || '_' || GenNext || '.sql';
if (not ibec_FileExists(FileName)) then break;

ibec_Progress('');
ibec_Progress('Executing script ' || FileName);

StartTime = ibec_GetTickCount();
Msg = ibec_ExecSQLScript(conn, FileName, 'StopOnError=True', cbb);
if (Msg is null) then
begin
ibec_Progress('Script executed successfully.');
end
else
begin
ibec_Progress('');
ibec_Progress('Script executed with errors.');
end;

ibec_Progress('Total execution time: ' || (ibec_GetTickCount() - StartTime) || 'ms');
ibec_Progress('==================================================');

insert into version_info (generation) values (:GenNext);
commit;

GenValue = GenNext;
end;
finally
ibec_CloseConnection(conn);
end
end


-------- ERROR ----------
''='' expected but ';' found


Time spent: 00:00.000
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40018474
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik,

Исправил кое-что, и вывод об ошибке сделал более детальным.
Пробуй.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40018707
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, основной скрипт, вызываемый через IBEScript сейчас выполняется нормально.
Но есть еще замечания:
1. При отсутствии файла скрипта получаем циклическую ошибку
xIBEScript Version 2020.11.15.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)

Executing script: D:\LGGT\Projects\Bases\Scripts\journals\test.sql
Exception at 000000010001C089: EFOpenError:
Unable to open file "test.sql".
xIBEScript Version 2020.11.15.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)

Executing script: D:\LGGT\Projects\Bases\Scripts\journals\test.sql
Exception at 000000010001C089: EFOpenError:
Unable to open file "test.sql".
xIBEScript Version 2020.11.15.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)

2. При вызове подчиненного скрипта через ibec_ExecSQLScript что-то неправильно с кодировкой.
Очень похоже на то, что описано здесь: https://www.sql.ru/forum/1328448/neponyatnoe-povedenie-ibec-createdatabase
Только закрытие БД и окрытие её заново в текущей ситуации не помогают.
Для тестов можно взять скрипты из той темы.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40023838
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40027116
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, ошибка при отсутствии файла скрипта починилась, нашел новые

1. Если в скрипте последний "end" не заканчивается переводом строки или ";" - скрипт не парсится
Код: plaintext
xIBEScript Version 2020.12.2.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)

Executing script: D:\LGGT\Projects\Bases\Scripts\test.sql
(Line: 1): Executing IBEBlock... FAILED! Error occured while parsing IBEBlock (line 1):
-------- STATEMENT (line 7/7) ----------
e

-------- ERROR ----------
''='' expected but '' found

Time spent: 00:00.000
2. Следующий скрипт не выполняется, даже если добавить в конце пустую строку
Код: plaintext
test.sqlexecute ibeblock as
begin
clib = '"' || ibec_GetGlobalVar('ClientLib', 'gds32.dll') || '"';
ConnectionString = 'dbname=test.fdb;user=sysdba;password=masterkey;SQLDialect=3;names=win1251;clientlib=' || clib;
conn = ibec_CreateDatabase(__ctFirebird, ConnectionString);
ibec_CloseConnection(conn);
end

Получаем ошибку
Код: plaintext
xIBEScript Version 2020.12.2.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)

Executing script: D:\LGGT\Projects\Bases\Scripts\test.sql
(Line: 1): Executing IBEBlock... FAILED!

Error occured while executing IBEBlock (line 1):
-------- STATEMENT (line 5/5) ----------
conn = ibec_CreateDatabase(__ctFirebird, ConnectionString)

-------- ERROR ----------
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 28.
user_name.
----------------------------------
SQLCODE: -104
SQLSTATE: 42000
GDSCODE: 335544569

Successful

Time spent: 00:00.078
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40029422
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik,

Исправил обе проблемы.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40031386
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert,

Теперь в этом же скрипте ругается на sysdba
xIBEScript Version 2020.12.20.1 (very Alpha) Copyright (c) 2002-2020 IBExpert KG (www.ibexpert.net)
Executing script: D:\LGGT\Projects\Bases\Scripts\test.sql
(Line: 1): Executing IBEBlock... FAILED!

Error occured while executing IBEBlock (line 1):
-------- STATEMENT (line 5/5) ----------
conn = ibec_CreateDatabase(__ctFirebird, ConnectionString)

-------- ERROR ----------
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 33.
"sysdba".
----------------------------------
SQLCODE: -104
SQLSTATE: 42000
GDSCODE: 335544569

Successful
Time spent: 00:00.063
Если из строки коннекта убрать user=sysdba, то скрипт отрабатывает нормально.

В скрипте, вызванном через ibec_ExecSQLScript не отрабатывает DESCRIBE.
Error occurred while executing following statement (line 506):
-------- STATEMENT ----------
DESCRIBE DOMAIN DOM_BOOLEAN
'??? BOOLEAN ? ??????????? ?? ????'
-------- ERROR ----------
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
DESCRIBE.
---------------------------------
SQLCODE: -104
SQLSTATE: 42000
GDSCODE: 335544569
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40034826
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40035087
oleg_oleinik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert,
при выполнении
Код: plsql
1.
Msg = ibec_ExecSQLScript(conn, FileName, 'StopOnError=True', cbb);

происходит или порча значения conn или закрытие connection. После этой строчки получаем разные ошибки, в зависимости от того, что дальше происходит.
Error occured while executing IBEBlock (line 1):
-------- STATEMENT (line 55/55) ----------
ibec_CloseConnection(conn)

-------- ERROR ----------
Cannot perform operation -- DB is not open.
-------- ERROR ----------
There is no active connection.

FAILED!
Это происходит даже если вызываемый скрипт будет пустой.
...
Рейтинг: 0 / 0
xIBEScript.dll 64-bit
    #40035481
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_oleinik

происходит или порча значения conn или закрытие connection.


Исправил.
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 1 из 3
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / xIBEScript.dll 64-bit
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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