Форум: "Базы";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
ВнизUDF Найти похожие ветки
← →
DmitryB (2002-12-17 08:51) [0]Понадобилась функция конвертации varchar в numeric.
Вот текст dll:
library my_util;
uses
SysUtils;
{$R *.res}
function StrToNum(var InStr:PChar):Currency;cdecl;export;
begin
Result:=StrToCurr(InStr);
end;
exports StrToNum;
begin
end.
Dll помещается в каталог ib\bin
Далее в IBExpert описываю функцию:
DECLARE EXTERNAL FUNCTION STRTONUM
CSTRING(80)
RETURNS NUMERIC(18,2) BY VALUE
ENTRY_POINT "StrToNum" MODULE_NAME "my_util.dll";
Функция успешно регистрируется, но когда к ней обращаешься из хран. процедуры или из запроса, выдается следующее:
Invalid token.
Invalid request BLR at offset 43.
functiom STRTONUM is not defined.
module name or entrypoint could not be found.
Делал возвращение результата также и по ссылке, менял ctring на varchar, делал все названия функции в одинаковом регистре - результат один, вышеприведенный.
(поставляемая с ib готовая udf работает - ок!)
Как бы все это привести к рабочему состоянию ?
← →
Alexandr (2002-12-17 08:55) [1]1) сервер перезапусти.
2) В IB6 функции должны быть в каталоге UDF по-моему...
3) а почему бы тебе готовую не взять?
← →
DmitryB (2002-12-17 09:07) [2]>а почему бы тебе готовую не взять?
А какая есть готовая функция ?
Если речь о готовой UDF, то ее исходник к сожалению на С++.
← →
DmitryB (2002-12-17 09:21) [3]>Если речь о готовой UDF, то ее исходник к сожалению на С++.
То есть не хотелось бы эксперементировать с С-ным кодом.
← →
Reindeer Moss Eater (2002-12-17 09:24) [4]Тебе же по русски сказано было о причине неудачи:
module name or entrypoint could not be found.
← →
DmitryB (2002-12-17 09:35) [5]>Reindeer Moss Eater
Читать умею, вот если подскажете дельное, - спасибо.
← →
Alexandr (2002-12-17 09:39) [6]где ж ты читать умеешь, если я тебе 3 пункта привел, а ты только http://www.ibase.ru/develop.htm
http://www.ibase.ru/d_udf.htm
← →
Digitman (2002-12-17 09:42) [7]Ты как UDF-декларацию выполняешь ? В виз. UDF-редакторе или "вручную" текст скрипта (того что ты привел) запускаешь ?
Если в виз.UDF-редакторе, то - да, есть там такая "плюха". Никак ее Хвастунов не хочет довести до ума)
При указании имени UDF-ф-ции (по которому ты будешь обращаться к ней из SP/триггеров) в виз.редакторе вот в таком вот виде StrToNum IBExpert сформирует вот такое предложение :
DECLARE EXTERNAL FUNCTION "StrToNum"
CSTRING(80)
RETURNS NUMERIC(18,2) BY VALUE
ENTRY_POINT "StrToNum" MODULE_NAME "my_util.dll";
Обрати внимание на кавычки - "StrToNum" !
В рез-те сервер запишет имя ф-ции в таблицу RDB$FUNCTIONS именно в таком виде, в каком ты ввел это имя (as is, т.е. с учетом оригинального регистра символов).
А искать ф-цию при последующем обращении к ней сервер будет в этой таблице
- по имени в верх.регистре (если обращаться к ф-ции StrToNum(..))
- либо по имени с оригинальными регистрами (если обращаться к ф-ции "StrToNum "(..))
В первом случае сервер не найдет ф-ции (ибо она регистрировалась в кавычках и хранится в ориг.регистре) и вернет ту самую ошибку, что ты и получаешь.
Во втором случае ошибки не будет (ибо поиск в таблице осущесчтвляется с учетом регистра, т.е. без предв.преобразования имени в UpperCase)
Вот такая вот байда))
← →
DmitryB (2002-12-17 10:06) [8]Всем большое спасибо за информацию. Действительно дело в кавычках. :-)
← →
Digitman (2002-12-17 10:18) [9]
> DmitryB
Еще один привет Хвастунову Саше))))))... Я уж как-то раз передавал ему на эту тему свое "фи" .. не отреагировал, к сожалению) ... а дело было еще во времена v2.5.0.1, кажись))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c