Конференция "Базы" » Работа функцией UDF при вставки записи в Таблицу [D7, FB1.5]
 
  • ganda (04.06.09 14:57) [0]
    есть некая функция назовём её FUN1 и есть поле F1.
    F1-  символьное поле размер 10 символов.
    скрипт создания FUN1

    DECLARE EXTERNAL FUNCTION FUN2
       CSTRING(255)
    RETURNS CSTRING(255)
    ENTRY_POINT 'CodeText' MODULE_NAME 'GNUDF';

    теперь сам текст вставки записи
    insert into table (F1) values (Fun1(:F1));
    при выполнение выдаёт ошибку:
    Arithmetic overflow or division by zero has occurred.
    arithmetic exception, numeric overflow, or string truncation.
  • PEAKTOP © (04.06.09 15:33) [1]
    1) База данных с каким набором символовов создана ?

    http://firebirdsql.su/doku.php?id=create_database

    2) Домен таблицы table.F1 с каким CHARACTER SET создан ?
    http://firebirdsql.su/doku.php?id=create_domain

    3) А подключение с каким LC_CTYPE идет ?

    DECLARE EXTERNAL FUNCTION FUN2
      CSTRING(255) CHARACTER SET WIN1251
    RETURNS CSTRING(255)
    ENTRY_POINT 'CodeText' MODULE_NAME 'GNUDF';



    4) И последнее, самой гнустное. Если UDF скомпилена в Delphi2009, то функция ожидает юникодную строку, а Firebird отдает ей Ansi.
    Или наоборот.
  • ganda (04.06.09 15:41) [2]
    База имеет набор символов NONE и поле тоже имеет Character set None (1, 2)

    UDF  скомпилена  на D7 (4)

    и 3 вариант не прокатывает. А если его сунуть в тригер прокатить или нет?!
  • PEAKTOP © (04.06.09 16:50) [3]
    Попробуй

    DECLARE EXTERNAL FUNCTION FUN2
     CSTRING(255) CHARACTER SET NONE
    RETURNS CSTRING(255)
    ENTRY_POINT 'CodeText' MODULE_NAME 'GNUDF';

    >>А если его сунуть в тригер прокатить или нет?!
    А че сам не попробовал ? :)
  • Сергей М. © (04.06.09 21:59) [4]
    Тут еще и мемликами пахнет ..

    FREE_IT осознанно опущен ?
 
Конференция "Базы" » Работа функцией UDF при вставки записи в Таблицу [D7, FB1.5]
Есть новые Нет новых   [134474   +34][b:0][p:0.001]