Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Модераторы, закрепите, пожалуйста, тему.
2 сен 20, 17:05    [22191018]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
В SQL Editor сохраняются дефолтные параметры блока.

Пример: блок
EXECUTE IBEBLOCK (
  prm variant = 'A'
)
AS
BEGIN
  ibec_ShowMessage(prm);
END 
Жмем F9. Появляется запрос ввода параметров. Для параметра prm установлено значение A.

Теперь меняем дефолтное значение
EXECUTE IBEBLOCK (
  prm variant = 'B'
)
AS
BEGIN
  ibec_ShowMessage(prm);
END 
Запускаем, а для параметра установлено значение A
2 сен 20, 17:23    [22191034]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
В SQL Editor сохраняются дефолтные параметры блока.


Не дефолтные, а последние использованные. Вот поэтому и.
2 сен 20, 17:49    [22191053]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
Не дефолтные, а последние использованные
А можно тогда их как-то сбросить к дефолтным? Сейчас, когда знаю об этой особенности, открываю новое окно SQL Editor

Сообщение было отредактировано: 2 сен 20, 18:56
2 сен 20, 18:58    [22191083]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
EXECUTE IBEBLOCK
AS
BEGIN
  SELECT 1 FROM rdb$database AS DATASET ds;
END 
Parsing error
2 сен 20, 19:52    [22191099]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
EXECUTE IBEBLOCK
AS
BEGIN
  SELECT 1 FROM rdb$database AS DATASET ds;
END 
Parsing error


Это не лечится. Вставляй что-нибудь перед AS DATASET (WHERE 1=1), иначе парсер считает это алиасом таблицы.
3 сен 20, 04:22    [22191262]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
А можно тогда их как-то сбросить к дефолтным? Сейчас, когда знаю об этой особенности, открываю новое окно SQL Editor


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

Кнопочку очередную лепить не буду.
3 сен 20, 04:24    [22191264]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
При сравнении BIGINT поля с NULL получается
Invalid variant operation

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
Для остальных типов, вроде, работает
3 сен 20, 11:22    [22191424]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
При сравнении BIGINT поля с NULL получается
Invalid variant operation



Исправил.
4 сен 20, 05:14    [22191864]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
ibec_ExtractMetadata умеет добавлять данные в существующий файл? Что-то в документации не нашел.

А если нет, то можно добавить такую возможность?
14 сен 20, 20:28    [22196911]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
  res = 'Res: ';
  val = 5.6;
  res .= val;
  ibec_ShowMessage(res);
Сейчас у меня выводится
Res: 5,6
Как бы вместо запятой поставить точку? var_Cast(5.6, __typeString) тоже возвращает строку с запятой. ibec_FormatFloat возвращает с точкой, но там нужно правильно указать число знаков после запятой.

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

Сообщение было отредактировано: 15 сен 20, 16:30
15 сен 20, 16:34    [22197591]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
ibec_ExtractMetadata умеет добавлять данные в существующий файл? Что-то в документации не нашел.


Нет, не умеет. И не будет уметь.
16 сен 20, 07:19    [22198036]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_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)
16 сен 20, 07:31    [22198041]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
Таблица
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    NAME       VARCHAR(32) NOT NULL
);

ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (ID);
Блок
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.


При таком блоке
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; 
на строке
IF (:var IS NOT NULL) THEN
ошибка
Access violation at address 004059D8 in module 'IBExpert.exe'. Read of address 00000060


И еще вопрос: можно как-то детализовать ошибку "Parsing error"? Не хватает номера строки возникновения и текста, вида "ожидалось А, а найдено Б". Если текст сложно, то хотя бы номер строки. Если у тебя и строк нет, то проблемный оператор. Очень тяжело искать на больших скриптах.
29 сен 20, 13:12    [22206386]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_

На UPDATE ошибка


WHERE CURRENT OF вряд ли будет реализовано в ibeblock.
30 сен 20, 05:40    [22206878]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_

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


Вот что я у себя вижу, например:
+
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


А у тебя что?
30 сен 20, 05:47    [22206879]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_

на строке
IF (:var IS NOT NULL) THEN
ошибка
Access violation at address 004059D8 in module 'IBExpert.exe'. Read of address 00000060



Исправил.
30 сен 20, 07:17    [22206883]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
А у тебя что?
Наверное отбой. В SQL Editor пишется просто Parsing Error. Но если кликнуть на ошибку, то на нужную строку (вернее на следующую за ней) все таки переходит.

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

К сообщению приложен файл. Размер - 12Kb
30 сен 20, 10:42    [22206933]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
[В SQL Editor пишется просто Parsing Error. Но если кликнуть на ошибку, то на нужную строку (вернее на следующую за ней) все таки переходит.

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


Не, правильное в SQL Editor :)
В строке 'var = NULL' синтаксических ошибок нет.
30 сен 20, 11:09    [22206941]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
Какая-то фигня происходит при создании курсора с TIMESTAMP полем.

Например, так
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.
если пробовать логировать
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, то все работает
7 окт 20, 17:44    [22210360]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
если пробовать логировать
EXECUTE PROCEDURE sp_d_log(cur.datetime);
то в лог попадает значение "1"


Можно просто в отладчике на закладку Last statement заглянуть - там все видно.
Разберемся...
7 окт 20, 18:58    [22210425]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Какая-то фигня происходит при создании курсора с TIMESTAMP полем.


Проверь в сегодняшней версии.
8 окт 20, 08:29    [22210573]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
Проверь в сегодняшней версии.
Все заработало. Только наткнулся на такую особенность
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"
А если такой код
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". Это вообще не критично, но смущают разные форматы

Сообщение было отредактировано: 8 окт 20, 14:02
8 окт 20, 14:05    [22210852]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
То в лог попадает "8-ОCT-2020 14:04:04.0000". Это вообще не критично, но смущают разные форматы


Очевидно, в первом случае значение в процедуру попадает уже в виде строки, а конвертация в строку выполнена на клиенте.
Во втором случае в процедуру приходит нормальный timestamp.
Если у t.datetime тип такой же, как у CURRENT_TIMESTAMP, то странно это.
8 окт 20, 15:41    [22210900]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
Если у t.datetime тип такой же, как у CURRENT_TIMESTAMP, то странно это.
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    DATETIME   TIMESTAMP
);
CURRENT_TIMESTAMP, по идее, тоже TIMESTAMP
9 окт 20, 11:01    [22211331]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
CURRENT_TIMESTAMP, по идее, тоже TIMESTAMP


Чего-то ты не договариваешь... Вот тестовый пример:
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;


В отладчике вижу, что все ОК: значения обеих переменных одинаково сформатированы и отображаются - как таймштамп, а не как строка.
9 окт 20, 17:57    [22211635]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
В отладчике вижу, что все ОК:
В отладчике да.

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

+ Подготовка
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 ; ^
+ Скрипт
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;
Результат
IDTIMESTAMPMESSAGE
15412.10.2020 12:57:19.20412-OCT-2020 12:57:19.0000
15512.10.2020 12:57:19.2042020-10-12 12:57:19.2040


К сообщению приложен файл. Размер - 7Kb
12 окт 20, 13:12    [22212659]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Dimbuch®
Member

Откуда: Москва
Сообщений: 141
В процедуре надо указать тип
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
12 окт 20, 14:09    [22212729]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_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) отправляется на сервер как есть, конвертация выполняется сервером.
12 окт 20, 17:02    [22212878]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
2. EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP) отправляется на сервер как есть, конвертация выполняется сервером.
Хорошо. А откуда тогда такое поведение?
_Vasilisk_
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    DATETIME   TIMESTAMP
);
_Vasilisk_
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. Завтра соберу полный пример

Сообщение было отредактировано: 12 окт 20, 21:16
12 окт 20, 21:19    [22212997]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Хорошо. А откуда тогда такое поведение?


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

В лог попадет клиентский вариант конвертации таймштампа в строку, а не серверный.

Сообщение было отредактировано: 13 окт 20, 04:16
13 окт 20, 04:15    [22213123]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
А нельзя ли сделать так, чтобы
ibec_Cast(TRUE, __typeString);
ibec_Cast(FALSE, __typeString);
возвращало TRUE и FALSE, а не -1 и 0?
28 окт 20, 10:29    [22221964]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
А нельзя ли сделать так, чтобы
ibec_Cast(TRUE, __typeString);
ibec_Cast(FALSE, __typeString);
возвращало TRUE и FALSE, а не -1 и 0?


А если у кого-то это уже используется в коде, то и фиг с ним, да?
29 окт 20, 08:29    [22222748]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
Для функции ibec_CreateConnection ConnectionType __ctMySQL поддерживается? Если да, то в каком формате нужно задавать параметры подключения?
29 окт 20, 14:14    [22222916]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Для функции ibec_CreateConnection ConnectionType __ctMySQL поддерживается?


Никогда не поддерживался. И в принципе MySQL давно не поддерживается.
29 окт 20, 14:31    [22222938]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
Почему для этого кода
EXECUTE IBEBLOCK
AS
BEGIN
  IF (
    FALSE AND
    ibec_MessageDlg('Test', __mtWarning, __mbOK) = __mrYes
  ) THEN
    ibec_ShowMessage('Nothing');
END; 
появляется сообщение Test? Или сокращенные булевские вычисления не реализованы?
3 ноя 20, 20:42    [22225983]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Или сокращенные булевские вычисления не реализованы?


Именно так. Оптимизированы только некоторые функции типа ibec_coalesce.
4 ноя 20, 04:51    [22226097]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Viktor_bs
Member

Откуда:
Сообщений: 176
IBExpert зависает SQL редакторе на конструкции:

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
15 янв 21, 20:37    [22264166]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Viktor_bs
IBExpert зависает SQL редакторе на конструкции:


Исправил.
16 янв 21, 14:43    [22264317]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Viktor_bs
Member

Откуда:
Сообщений: 176
IBExpert
Viktor_bs
IBExpert зависает SQL редакторе на конструкции:


Исправил.

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

К сообщению приложен файл. Размер - 32Kb


Сообщение было отредактировано: 17 янв 21, 00:15
17 янв 21, 00:17    [22264546]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Viktor_bs

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


Исправил.
19 янв 21, 09:46    [22265635]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Viktor_bs
Member

Откуда:
Сообщений: 176
IBExpert
Viktor_bs

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


Исправил.

Опять не до конца :)
Происходит выход из цикла при первой итерации без каких-либо ошибок...
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;
19 янв 21, 12:17    [22265751]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Viktor_bs

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


Я не буду сам придумывать MERGE, который должен работать.
19 янв 21, 12:42    [22265770]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Viktor_bs
Member

Откуда:
Сообщений: 176
IBExpert
Viktor_bs

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


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

И не нужно ничего придумывать. Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.
Даже ibec_MessageDlg не вызывается.
19 янв 21, 12:49    [22265775]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Viktor_bs
Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.


У меня твой MERGE по очевидным причинам не заработает. А если он не заработает, то возникнет эксепшен и на выход. Здесь все правильно.
А работающий MERGE мне придумывать лень, чтобы проверить.
19 янв 21, 16:36    [22265948]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Viktor_bs
Member

Откуда:
Сообщений: 176
IBExpert
Viktor_bs
Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.


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

А так?
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
19 янв 21, 17:09    [22265978]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Viktor_bs

А так?


Другое дело. Исправил.
20 янв 21, 03:26    [22266174]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Spz
Member

Откуда: Москва
Сообщений: 18
Добрый день!
У меня 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.

Заранее спасибо.

К сообщению приложен файл. Размер - 10Kb
31 авг 21, 11:19    [22365721]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Spz
Добрый день!
У меня 1 ошибка и 1 пожелание.


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

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

2. Разделить запросы пустой строкой и использовать Ctrl+Shift+F9.
31 авг 21, 12:09    [22365768]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Spz
Member

Откуда: Москва
Сообщений: 18
Прошу прощения, невнимательно прочитал название темы.
Мне пересоздать сообщение или можно перенести его в корень?
31 авг 21, 15:42    [22365877]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Spz

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


Если остались вопросы, создавай новую тему.
1 сен 21, 07:41    [22366082]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
Что-то напуталось в последних версиях с приоритетом операций
execute ibeblock
as
begin
  IF ('a' <> 'c' OR 'b' <> 'd') THEN
    ibec_ShowMessage('OK');
end
или
execute ibeblock
as
begin
  a = 'a';
  b = 'b';
  IF (a <> 'c' OR b <> 'd') THEN
    ibec_ShowMessage('OK');
end
получаю ошибку
Invalid variant type conversion

Если расставить скобки
execute ibeblock
as
begin
  IF (('a' <> 'c') OR ('b' <> 'd')) THEN
    ibec_ShowMessage('OK');
end
то все работает
27 окт 21, 15:07    [22388850]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Что-то напуталось в последних версиях с приоритетом операций


Похоже, что никогда и не работало...
28 окт 21, 07:53    [22389195]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
Похоже, что никогда и не работало...
Точно работало. У меня скрипт перестал работать только после обновления эксперта
28 окт 21, 19:49    [22389571]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Точно работало. У меня скрипт перестал работать только после обновления эксперта


Да, таки работало. Нашел уже, где собака порылась. Но ремонт займет какое-то время - там все непросто.
29 окт 21, 08:38    [22389723]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Что-то напуталось в последних версиях с приоритетом операций


Попробуй свежую версию. Грамматику парсера перелопатил основательно, так что возможны всякие сюрпризы.
1 ноя 21, 09:02    [22390857]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
Попробуй свежую версию
Исходная проблема исправлена. А дальше будем посмотреть
1 ноя 21, 12:09    [22390937]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
Исходная проблема исправлена


Это лишь следствие нарастающих проблем в парсере, который уже еле-еле справляется с усложнившейся грамматикой PSQL FB 3/4.
Ты бы потихоньку щупал xIBEScript. Там движок совсем другой, с нуля написанный.
1 ноя 21, 16:19    [22391070]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
IBExpert
Ты бы потихоньку щупал xIBEScript.
Во-первых у меня основная часть скриптов выполняется или через IBExpert, или только на моей машине, через IBEScript.exe. А там где нужна IBEScript.dll приложение 32-битное
1 ноя 21, 19:56    [22391170]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
или только на моей машине, через IBEScript.exe.


Там экзешник тоже есть.
2 ноя 21, 03:05    [22391226]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Шавлюк Евгений
Member

Откуда: Одесса
Сообщений: 610
Есть ли возможность через ibescript выполнить sweep?
Пока использую
ibec_Exec('gfix.exe -sw '....)
19 ноя 21, 14:43    [22397971]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Шавлюк Евгений,

Специальной функции для свипа нет.
22 ноя 21, 09:40    [22398896]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13360
А можно добавить функцию ibec_ChangeExt для смены расширения? А то сейчас приходится писать так
LobFile = ibec_preg_Replace('\.[sS][qQ][lL]$', '.lob', SqlFile);
IF (LobFile = SqlFile) THEN
  LobFile .= '.lob';
22 ноя 21, 12:21    [22399010]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
_Vasilisk_
А можно добавить функцию ibec_ChangeExt для смены расширения? А то сейчас приходится писать так
LobFile = ibec_preg_Replace('\.[sS][qQ][lL]$', '.lob', SqlFile);
IF (LobFile = SqlFile) THEN
  LobFile .= '.lob';


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


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


На всякую ерунду отдельных функций не напишешься.
25 ноя 21, 16:11    [22400789]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
Mik86
Member

Откуда:
Сообщений: 5
При компиляции процедуры ругается:
Function 'list'  is not window function, OVER  clause cannot be used.

Если проигнорировать ошибку и все равно с компилить то сам запрос в процедуре успешно выполняется.
25 ноя 21, 20:18    [22400924]     Ответить | Цитировать Сообщить модератору
 Re: IBEBlock: ошибки, вопросы, предложения - сюда  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3580
Mik86
При компиляции процедуры ругается:
Function 'list'  is not window function, OVER  clause cannot be used.

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


Это вообще не сюда. И воспроизводимый пример где?
26 ноя 21, 06:04    [22401040]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / IBExpert Ответить