powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEBlock: ошибки, вопросы, предложения - сюда
25 сообщений из 71, страница 1 из 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
25 сообщений из 71, страница 1 из 3
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEBlock: ошибки, вопросы, предложения - сюда
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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