Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-24889
Hooch
2002-12-23 12:22
2003.01.09
Word 2000 + Delphi


3-24786
ramil
2002-12-14 16:24
2003.01.09
Multiple records found but only one expected...


8-24978
Comwad
2002-09-20 13:16
2003.01.09
Почему Beep(1000,1000) из WinProcs не работает под WIN 95/98


14-25061
roach
2002-12-18 22:40
2003.01.09
Задачка на Turbo Pascal


6-25000
Сувлехим
2002-11-10 19:42
2003.01.09
Как преобразовать время из Timer а из миллисекунд в нормальное





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский