powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEBlock: ошибки, вопросы, предложения - сюда
71 сообщений из 71, показаны все 3 страниц
IBEBlock: ошибки, вопросы, предложения - сюда
    #39994919
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модераторы, закрепите, пожалуйста, тему.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39994933
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SQL Editor сохраняются дефолтные параметры блока.

Пример: блок
Код: sql
1.
2.
3.
4.
5.
6.
7.
EXECUTE IBEBLOCK (
  prm variant = 'A'
)
AS
BEGIN
  ibec_ShowMessage(prm);
END 

Жмем F9. Появляется запрос ввода параметров. Для параметра prm установлено значение A .

Теперь меняем дефолтное значение
Код: sql
1.
2.
3.
4.
5.
6.
7.
EXECUTE IBEBLOCK (
  prm variant = 'B'
)
AS
BEGIN
  ibec_ShowMessage(prm);
END 

Запускаем, а для параметра установлено значение A
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39994943
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
В SQL Editor сохраняются дефолтные параметры блока.


Не дефолтные, а последние использованные. Вот поэтому и.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39994969
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Не дефолтные, а последние использованные
А можно тогда их как-то сбросить к дефолтным? Сейчас, когда знаю об этой особенности, открываю новое окно SQL Editor
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39994980
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
EXECUTE IBEBLOCK
AS
BEGIN
  SELECT 1 FROM rdb$database AS DATASET ds;
END 

Parsing error
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39995079
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: sql
1.
2.
3.
4.
5.
EXECUTE IBEBLOCK
AS
BEGIN
  SELECT 1 FROM rdb$database AS DATASET ds;
END 

Parsing error


Это не лечится. Вставляй что-нибудь перед AS DATASET (WHERE 1=1), иначе парсер считает это алиасом таблицы.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39995080
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А можно тогда их как-то сбросить к дефолтным? Сейчас, когда знаю об этой особенности, открываю новое окно SQL Editor


Ну вот, переоткрыв окно. Зачем заводить входные параметры, если лень их вводить?
Можно их в локальных переменных с теми же дефолтами прописать. Или в Script Executive блок выполнять - там ничего спрашивать не будет.

Кнопочку очередную лепить не буду.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39995164
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При сравнении BIGINT поля с NULL получается Invalid variant operation
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
EXECUTE IBEBLOCK
AS
BEGIN
  SELECT
    CAST(1 AS BIGINT)
  FROM
    rdb$database db
  AS DATASET ds;

  val = NULL;
  IF (ibec_ds_GetField(ds, 0) < val) THEN
    ibec_ShowMessage('TRUE');
  ELSE
    ibec_ShowMessage('FALSE');
END

Для остальных типов, вроде, работает
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39995449
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
При сравнении BIGINT поля с NULL получается Invalid variant operation



Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39998538
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ibec_ExtractMetadata умеет добавлять данные в существующий файл? Что-то в документации не нашел.

А если нет, то можно добавить такую возможность?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39998878
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
  res = 'Res: ';
  val = 5.6;
  res .= val;
  ibec_ShowMessage(res);

Сейчас у меня выводитсяRes: 5 , 6Как бы вместо запятой поставить точку? var_Cast(5.6, __typeString) тоже возвращает строку с запятой. ibec_FormatFloat возвращает с точкой, но там нужно правильно указать число знаков после запятой.

ibec_StringReplace использовать?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39999144
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
ibec_ExtractMetadata умеет добавлять данные в существующий файл? Что-то в документации не нашел.


Нет, не умеет. И не будет уметь.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #39999148
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Как бы вместо запятой поставить точку? var_Cast(5.6, __typeString) тоже возвращает строку с запятой. ibec_FormatFloat возвращает с точкой, но там нужно правильно указать число знаков после запятой.

ibec_StringReplace использовать?


Можно и ibec_StringReplace.
Можно и ibec_FormatFloat: ibec_FormatFloat('0.########', 5.6)
Можно и ibec_Format: ibec_FormatFloat('%.g', 5.6)
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40003926
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    NAME       VARCHAR(32) NOT NULL
);

ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (ID);

Блок
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      t.id
    FROM
      test t
    AS CURSOR
      cur_tst
  DO
    UPDATE test t SET
      t.name = 'abc'
    WHERE
      CURRENT OF cur_tst;
END; 

На UPDATE ошибка
Unknown cursor.
Dynamic SQL Error.
SQL error code = -504.
Invalid cursor reference.
Cursor CUR_TST is not found in the current context.

При таком блоке
Код: 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.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      t.id
    FROM
      test t
    AS CURSOR
      cur_tst
  DO BEGIN
    var = NULL;
    SELECT
      MIN(t.name)
    FROM
      test t
    WHERE
      t.id = cur_tst.id
    INTO
      :var;

    IF (:var IS NOT NULL) THEN
      UPDATE test t SET
        t.name = :var
      WHERE
        CURRENT OF cur_tst;
  END
END; 

на строке
Код: sql
1.
IF (:var IS NOT NULL) THEN

ошибкаAccess violation at address 004059D8 in module 'IBExpert.exe'. Read of address 00000060

И еще вопрос: можно как-то детализовать ошибку "Parsing error"? Не хватает номера строки возникновения и текста, вида "ожидалось А, а найдено Б". Если текст сложно, то хотя бы номер строки. Если у тебя и строк нет, то проблемный оператор. Очень тяжело искать на больших скриптах.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40004173
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

На UPDATE ошибка


WHERE CURRENT OF вряд ли будет реализовано в ibeblock.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40004174
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

И еще вопрос: можно как-то детализовать ошибку "Parsing error"? Не хватает номера строки возникновения и текста, вида "ожидалось А, а найдено Б". Если текст сложно, то хотя бы номер строки. Если у тебя и строк нет, то проблемный оператор. Очень тяжело искать на больших скриптах.


Вот что я у себя вижу, например:
Код: plaintext
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.
IBEScript Version 2020.9.22.1 Copyright (c) 2002-2020 IBExpert Ltd (www.ibexpert.com)

Executing script: Block1.ibb
(Line: 15) : Executing IBEBlock...


Error in script: Block1.ibb
Error occurred while executing following statement (line 15):
--------  STATEMENT ----------
execute ibeblock
returns (htmlpage blob)
as
begin
  htmlpage = '<P>Select a table from the list below:</P><SELECT ID="TableSelect">';
  for select rdb$relation_name, rdb$relation_id from rdb$relations
      orders by rdb$relation_name
      into :rel_name, :rel_id
  do
  begin
    rel_name = ibec_Trim(rel_name);
    htmlpage = htmlpage || ibec_chr(13) || ibec_chr(10) || '    <option value="' || :rel_id || '">' || rel_name || '</OPTION>';
  end
  htmlpage = htmlpage || ibec_chr(13) || ibec_chr(10) || '</SELECT>';
end


 --------  ERROR ----------
At line 6, column 17:
Parsing error! 


Script executed with errors.
Total execution time: 0ms


А у тебя что?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40004176
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

на строке
Код: sql
1.
IF (:var IS NOT NULL) THEN

ошибкаAccess violation at address 004059D8 in module 'IBExpert.exe'. Read of address 00000060



Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40004198
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
А у тебя что?
Наверное отбой. В SQL Editor пишется просто Parsing Error. Но если кликнуть на ошибку, то на нужную строку (вернее на следующую за ней) все таки переходит.

В SQL Executive сообщение "At line 12, column 12: Parsing error!" и позиционирование правильное
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40004203
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
[В SQL Editor пишется просто Parsing Error. Но если кликнуть на ошибку, то на нужную строку (вернее на следующую за ней) все таки переходит.

В SQL Executive сообщение "At line 12, column 12: Parsing error!" и позиционирование правильное


Не, правильное в SQL Editor :)
В строке 'var = NULL' синтаксических ошибок нет.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40006327
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то фигня происходит при создании курсора с TIMESTAMP полем.

Например, так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      1,
      CURRENT_TIMESTAMP AS datetime
    FROM
      rdb$database
    AS CURSOR
      cur
  DO
    var_t = DATEADD(DAY, 1, cur.datetime);
END;

получаю ошибкуexpression evaluation not supported.
Invalid data type in addition of part to DATE/TIME/TIMESTAMP in DATEADD.если пробовать логировать
Код: sql
1.
EXECUTE PROCEDURE sp_d_log(cur.datetime);

то в лог попадает значение "1"
На рабочей базе (на тестовой повторить не смог) получаю ошибкуIncompatible column/host variable data type.
Dynamic SQL Error.
SQL error code = -303.
conversion error from string "20-AUG-2020 16:21:32.0000".
Если в запросе выбирать только одно поле или вместо курсора использовать INTO vars, то все работает
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40006367
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
если пробовать логировать
Код: sql
1.
EXECUTE PROCEDURE sp_d_log(cur.datetime);

то в лог попадает значение "1"


Можно просто в отладчике на закладку Last statement заглянуть - там все видно.
Разберемся...
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40006449
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Какая-то фигня происходит при создании курсора с TIMESTAMP полем.


Проверь в сегодняшней версии.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40006582
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Проверь в сегодняшней версии.
Все заработало. Только наткнулся на такую особенность
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      t.id,
      t.datetime
    FROM
      test t
    AS CURSOR
      cur
  DO
    EXECUTE PROCEDURE sp_log(cur.datetime);
END;

В лог пишется "2020-10-08 17:07:12.1620"
А если такой код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      1,
      CURRENT_TIMESTAMP AS datetime
    FROM
      rdb$database
    AS CURSOR
      cur
  DO
    EXECUTE PROCEDURE sp_d_log(cur.datetime);
END;

То в лог попадает "8-ОCT-2020 14:04:04.0000". Это вообще не критично, но смущают разные форматы
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40006611
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
То в лог попадает "8-ОCT-2020 14:04:04.0000". Это вообще не критично, но смущают разные форматы


Очевидно, в первом случае значение в процедуру попадает уже в виде строки, а конвертация в строку выполнена на клиенте.
Во втором случае в процедуру приходит нормальный timestamp.
Если у t.datetime тип такой же, как у CURRENT_TIMESTAMP, то странно это.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40006856
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Если у t.datetime тип такой же, как у CURRENT_TIMESTAMP, то странно это.
Код: sql
1.
2.
3.
4.
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    DATETIME   TIMESTAMP
);

CURRENT_TIMESTAMP, по идее, тоже TIMESTAMP
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007052
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
CURRENT_TIMESTAMP, по идее, тоже TIMESTAMP


Чего-то ты не договариваешь... Вот тестовый пример:
Код: plsql
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
  execute statement 'CREATE TABLE TEST_TIMESTAMP (TS  TIMESTAMP)';
  commit;

  insert into test_timestamp (ts) values (current_timestamp);
  commit;

  FOR
    SELECT
      ts as ts1,
      CURRENT_TIMESTAMP AS ts2
    FROM
      test_timestamp
    AS CURSOR
      cur
  DO
  begin
    var_t1 = cur.ts1;
    var_t2 = cur.ts2;
  end;
END;



В отладчике вижу, что все ОК: значения обеих переменных одинаково сформатированы и отображаются - как таймштамп, а не как строка.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007693
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
В отладчике вижу, что все ОК:
В отладчике да.

Вот тебе мой пример

Подготовка
Код: 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.
SET SQL DIALECT 3;

CREATE TABLE LOGS (
    ID           BIGINT GENERATED BY DEFAULT AS IDENTITY,
    "TIMESTAMP"  TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    "MESSAGE"    BLOB SUB_TYPE 1 SEGMENT SIZE 128
);

ALTER TABLE LOGS ADD CONSTRAINT PK_LOGS PRIMARY KEY (ID);

SET TERM ^ ;

CREATE OR ALTER PROCEDURE sp_d_log (
  in_msg TYPE OF COLUMN logs."MESSAGE")
AS
BEGIN
  IN AUTONOMOUS TRANSACTION DO
    INSERT INTO logs (
      "MESSAGE"
    ) VALUES (
      :in_msg
    );
END^

SET TERM ; ^

Скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      CURRENT_TIMESTAMP AS datetime
    FROM
      rdb$database t
    AS CURSOR
      cur
  DO
    EXECUTE PROCEDURE sp_d_log(cur.datetime);

  EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP);
END;

Результат
IDTIMESTAMPMESSAGE15412.10.2020 12:57:19.20412-OCT-2020 12:57:19.000015512.10.2020 12:57:19.2042020-10-12 12:57:19.2040
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007723
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В процедуре надо указать тип
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE OR ALTER PROCEDURE sp_d_log (
  in_msg TYPE OF COLUMN logs."MESSAGE")
AS
BEGIN
  IN AUTONOMOUS TRANSACTION DO
    INSERT INTO logs (
      "MESSAGE"
    ) VALUES (
      CAST(:in_msg AS TIMESTAMP)
    );
END
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007789
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Вот тебе мой пример


Хех, так это совсем другое дело, и в нем все правильно:

1. EXECUTE PROCEDURE sp_d_log(cur.datetime) сначала препарируется как EXECUTE PROCEDURE sp_d_log(:Param), затем параметру через AsString присваивается значение cur.datetime. Здесь и происходит конвертация из таймштампа в строку.

2. EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP) отправляется на сервер как есть, конвертация выполняется сервером.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007849
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
2. EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP) отправляется на сервер как есть, конвертация выполняется сервером.
Хорошо. А откуда тогда такое поведение?
_Vasilisk_
Код: sql
1.
2.
3.
4.
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    DATETIME   TIMESTAMP
);

_Vasilisk_
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      t.id,
      t.datetime
    FROM
      test t
    AS CURSOR
      cur
  DO
    EXECUTE PROCEDURE sp_d_log(cur.datetime);
END;


В лог пишется "2020-10-08 17:07:12.1620"


P.S. Завтра соберу полный пример
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007923
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Хорошо. А откуда тогда такое поведение?


Я ж только что объяснил, п.1. Это равносильно выполнению запроса в SQL редакторе:
Код: plsql
1.
EXECUTE PROCEDURE sp_d_log(cast(:param as timestamp))


В лог попадет клиентский вариант конвертации таймштампа в строку, а не серверный.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40012499
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя ли сделать так, чтобы
Код: sql
1.
2.
ibec_Cast(TRUE, __typeString);
ibec_Cast(FALSE, __typeString);

возвращало TRUE и FALSE, а не -1 и 0?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40012948
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А нельзя ли сделать так, чтобы
Код: sql
1.
2.
ibec_Cast(TRUE, __typeString);
ibec_Cast(FALSE, __typeString);

возвращало TRUE и FALSE, а не -1 и 0?


А если у кого-то это уже используется в коде, то и фиг с ним, да?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40013037
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для функции ibec_CreateConnection ConnectionType __ctMySQL поддерживается? Если да, то в каком формате нужно задавать параметры подключения?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40013048
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Для функции ibec_CreateConnection ConnectionType __ctMySQL поддерживается?


Никогда не поддерживался. И в принципе MySQL давно не поддерживается.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40015053
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему для этого кода
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXECUTE IBEBLOCK
AS
BEGIN
  IF (
    FALSE AND
    ibec_MessageDlg('Test', __mtWarning, __mbOK) = __mrYes
  ) THEN
    ibec_ShowMessage('Nothing');
END; 

появляется сообщение Test? Или сокращенные булевские вычисления не реализованы?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40015127
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Или сокращенные булевские вычисления не реализованы?


Именно так. Оптимизированы только некоторые функции типа ibec_coalesce.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40036276
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert зависает SQL редакторе на конструкции:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
EXECUTE IBEBLOCK
AS
  DECLARE PERIOD_ID INTEGER = null;
BEGIN
  merge into PS_PROPOSE_SOURCE as dest
      using TMP_RAD_PS_SELLERS_ALL as src
      on dest.PERIOD_ID = src.PERIOD_ID and dest.ORGANIZATION_ID = src.ORGANIZATION_ID and dest.PERIOD_ID = :PERIOD_ID
    when matched then delete;

END;


Коннект на базу необязательный.
Загрузка процесса 100%
IBExpert 2021.1.7.1
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40036336
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs
IBExpert зависает SQL редакторе на конструкции:


Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40036484
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs
IBExpert зависает SQL редакторе на конструкции:


Исправил.

Спасибо!
Немного не до конца...ошибка без коннекта на базу )
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037005
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

Немного не до конца...ошибка без коннекта на базу )


Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037082
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs

Немного не до конца...ошибка без коннекта на базу )


Исправил.

Опять не до конца :)
Происходит выход из цикла при первой итерации без каких-либо ошибок...
Код: 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.
EXECUTE IBEBLOCK
AS
  DECLARE PERIOD_ID INTEGER = NULL;
BEGIN
  I = 0;

  -- Инициализация и расчет опорного периода
  HIGHDIM = 3;
  FOR I = 0 TO HIGHDIM DO
  BEGIN
    --PERIOD_ID = MY_PERIODS[I];
    IBEC_PROGRESS(I);


    merge into PS_PROPOSE_SOURCE as dest
        using TMP_RAD_PS_SELLERS_ALL as src
        on dest.PERIOD_ID = src.PERIOD_ID and dest.ORGANIZATION_ID = src.ORGANIZATION_ID and dest.PERIOD_ID = :PERIOD_ID
      when matched then delete;

    ibec_Sleep(100);

    commit;

  end

  ibec_MessageDlg(I, 0, 0);
END;
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037095
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

Опять не до конца :)


Я не буду сам придумывать MERGE, который должен работать.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037098
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs

Опять не до конца :)


Я не буду сам придумывать MERGE, который должен работать.

И не нужно ничего придумывать. Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.
Даже ibec_MessageDlg не вызывается.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037201
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs
Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.


У меня твой MERGE по очевидным причинам не заработает. А если он не заработает, то возникнет эксепшен и на выход. Здесь все правильно.
А работающий MERGE мне придумывать лень, чтобы проверить.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037225
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs
Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.


У меня твой MERGE по очевидным причинам не заработает. А если он не заработает, то возникнет эксепшен и на выход. Здесь все правильно.
А работающий MERGE мне придумывать лень, чтобы проверить.

А так?
Код: sql
1.
2.
CREATE table PS_PROPOSE_SOURCE (PERIOD_ID integer, ORGANIZATION_ID integer);
CREATE table TMP_RAD_PS_SELLERS_ALL  (PERIOD_ID integer, ORGANIZATION_ID integer);


p.s. Firebird3
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037311
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

А так?


Другое дело. Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094016
Spz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spz
Гость
Добрый день!
У меня 1 ошибка и 1 пожелание.

Ошибка или баг: (IBExpert 2021.8.31.1)
при редактировании вьюшки появляется вкладка "Скрипт пересоздания",
в которой генерится что-то совершенно другое, чем редактируемая вьюшка.

И еще пожелание очень облегчающее жизнь рядовому программеру:
Сделать чтобы IBExpert умел запускать запросы в тексте окна SQL editor,
отделенные ; (подобно PL SQL Developer) и исполнять запрос где находится
курсор без необходимости точного выделения того, что надо исполнить.

Например
Select * from employees;
Select * from lamers;
Select * from firms;
если курсор находится во второй строке, то
по F9 выполнится второй запрос.

Алгоритм простой:
1. От курсора идем назад до первого знака ; или до начала полного текста, запоминаем как х1 (начало блока)
2. От курсора идем вперед до первого знака ; или до конца полного текста, запоминаем как x2 (конец блока)
3. Исполняем запрос, скопированный от x1 до x2.

Заранее спасибо.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094036
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spz
Добрый день!
У меня 1 ошибка и 1 пожелание.


Какое отношение они имеют к этой теме?

1. Это именно он - скрипт пересоздания представления.

2. Разделить запросы пустой строкой и использовать Ctrl+Shift+F9.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094102
Spz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spz
Гость
Прошу прощения, невнимательно прочитал название темы.
Мне пересоздать сообщение или можно перенести его в корень?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094234
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spz

Мне пересоздать сообщение или можно перенести его в корень?


Если остались вопросы, создавай новую тему.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40107408
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то напуталось в последних версиях с приоритетом операций
Код: sql
1.
2.
3.
4.
5.
6.
execute ibeblock
as
begin
  IF ('a' <> 'c' OR 'b' <> 'd') THEN
    ibec_ShowMessage('OK');
end

или
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
execute ibeblock
as
begin
  a = 'a';
  b = 'b';
  IF (a <> 'c' OR b <> 'd') THEN
    ibec_ShowMessage('OK');
end

получаю ошибкуInvalid variant type conversion
Если расставить скобки
Код: sql
1.
2.
3.
4.
5.
6.
execute ibeblock
as
begin
  IF (('a' <> 'c') OR ('b' <> 'd')) THEN
    ibec_ShowMessage('OK');
end

то все работает
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40107627
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Что-то напуталось в последних версиях с приоритетом операций


Похоже, что никогда и не работало...
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40107858
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Похоже, что никогда и не работало...
Точно работало. У меня скрипт перестал работать только после обновления эксперта
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40107931
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Точно работало. У меня скрипт перестал работать только после обновления эксперта


Да, таки работало. Нашел уже, где собака порылась. Но ремонт займет какое-то время - там все непросто.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40108549
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Что-то напуталось в последних версиях с приоритетом операций


Попробуй свежую версию. Грамматику парсера перелопатил основательно, так что возможны всякие сюрпризы.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40108572
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Попробуй свежую версию
Исходная проблема исправлена. А дальше будем посмотреть
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40108630
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Исходная проблема исправлена


Это лишь следствие нарастающих проблем в парсере, который уже еле-еле справляется с усложнившейся грамматикой PSQL FB 3/4.
Ты бы потихоньку щупал xIBEScript . Там движок совсем другой, с нуля написанный.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40108701
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Ты бы потихоньку щупал xIBEScript .
Во-первых у меня основная часть скриптов выполняется или через IBExpert, или только на моей машине, через IBEScript.exe. А там где нужна IBEScript.dll приложение 32-битное
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40108734
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
или только на моей машине, через IBEScript.exe.


Там экзешник тоже есть.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40113131
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли возможность через ibescript выполнить sweep?
Пока использую
Код: plaintext
ibec_Exec('gfix.exe -sw '....)
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40113653
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений,

Специальной функции для свипа нет.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40113708
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно добавить функцию ibec_ChangeExt для смены расширения? А то сейчас приходится писать так
Код: sql
1.
2.
3.
LobFile = ibec_preg_Replace('\.[sS][qQ][lL]$', '.lob', SqlFile);
IF (LobFile = SqlFile) THEN
  LobFile .= '.lob';
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40114922
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А можно добавить функцию ibec_ChangeExt для смены расширения? А то сейчас приходится писать так
Код: sql
1.
2.
3.
LobFile = ibec_preg_Replace('\.[sS][qQ][lL]$', '.lob', SqlFile);
IF (LobFile = SqlFile) THEN
  LobFile .= '.lob';



Сложно что-ли? Или чего? Можно так:
Код: sql
1.
LobFile = ibec_preg_Replace('(?i)\.sql$', '.lob', SqlFile);



Или даже так:
Код: sql
1.
LobFile = ibec_preg_Replace('\.([^\.])*$', '.lob', SqlFile);



На всякую ерунду отдельных функций не напишешься.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40115008
Mik86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При компиляции процедуры ругается:
Код: plsql
1.
Function 'list'  is not window function, OVER  clause cannot be used.


Если проигнорировать ошибку и все равно с компилить то сам запрос в процедуре успешно выполняется.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40115103
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mik86
При компиляции процедуры ругается:
Код: plsql
1.
Function 'list'  is not window function, OVER  clause cannot be used.


Если проигнорировать ошибку и все равно с компилить то сам запрос в процедуре успешно выполняется.


Это вообще не сюда. И воспроизводимый пример где?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40131100
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу скопировать ХП в ту же базу с другим именем, ошибка
IBEConnecting to D:\...\exp6.fdb... Successful.
Connecting to D:\...\exp6.fdb... Successful.
==== ERROR =========
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 8.
exists.
---------------------------------
SQLCODE: -104
SQLSTATE: 42000
GDSCODE: 335544569
====================
Такое с любой ХП. Версия ИБЭ 2022.01.14.1
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40131139
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvb
Хочу скопировать ХП в ту же базу с другим именем, ошибка


У меня все нормально. Смотри на закладке Blocks, там в блоке ошибка, очевидно.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40131537
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Ругается на эти операторы:
Код: sql
1.
2.
3.
4.
bSrcPackages = exists(select rdb$relation_name from rdb$relations
                          where (rdb$relation_name = 'RDB$PACKAGES'));
............
bUseCommentOn = exists(select rdb$relation_name from rdb$relations where (rdb$relation_name = 'RDB$PACKAGES'));


Возможно, потому, что у меня Fb2.5 и типа boolean нету. Но это область IBEBlock, так что все может быть.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40131605
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvb

Возможно, потому, что у меня Fb2.5 и типа boolean нету. Но это область IBEBlock, так что все может быть.


Не, в 2.5 действительно не будет работать. Там в SELECT EXISTS (...) преобразуется, а это только с тройки работает.
У себя я поправил блок, свой ты сам можешь подрихтовать:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select rdb$relation_name
         from rdb$relations
         where (rdb$relation_name = 'RDB$PACKAGES')
         into :tmpName;
bSrcPackages = ibec_IIF(:tmpName is NULL, FALSE, TRUE);

bUseCommentOn = bTypeOfAllowed;
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40131848
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
свой ты сам можешь подрихтовать
Подожду обновления )
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEBlock: ошибки, вопросы, предложения - сюда
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (10): Анонимы (7), Bing Bot, Yandex Bot, Google Bot 8 мин.
x
x
Закрыть


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