Страница 1 из 1
Регистрация UDF. Работа с Ini
Добавлено: 22 авг 2005, 16:00
Vental
Добрый день.
Подскажите пожалуйста, как в IBExpert зарегистрировать функция SubStr (IB75)
Делаю:
Имя - MySubStr
Имя библиотеки - id_udf.dll
Точка входа - SUBSTR(fn_SUBSTR и пр., перепробовал кучу вариантов)
Входные аргументы - CSTRING(80), SMALLINT, SMALLINT
Возвращает - CSTRING(80)
Механизм возвращения - By Reference
Стоит галка на FreeIt
А при Select выдаёт ошибку
"
Invalid token.
invalid request BLR at offset 74.
function MYSUBSTR is not defined.
module name or entrypoint could not be found.
"
ib_udf.dll пробовал копировать в самые разные места - не помогает
Эксперементировал с точкой входа - результат тот же
2. Если база лежит на сервере(отключено запись/чтение), и там же лежат Ini-файлы, как организовать чтение/запись Ini-файлов для пользователей. Или просто взять их и выложить в папку открытую для чтения/записи
Заранее спасибо
Добавлено: 22 авг 2005, 16:32
kdv
ууу... а написать declare external function нельзя?
module name or entrypoint could not be found.
www.ibase.ru/ibfaq.htm#udf читал? особенно про free_it?
Если база лежит на сервере(отключено запись/чтение)
если база лежит на сервере, то ее вообще кроме сервера видеть никому не надо. То есть, каталог, где она лежит, шарить нельзя.
Ini-файлов для пользователей
??? каких ini-файлов? а настройки юзеров в blob разве нельзя хранить?
Добавлено: 24 авг 2005, 22:28
Vental
За идею с Ini - Blob большое спасибо
Когда в IBExpert объявляешь функция, скрипт "Declare..." создаётся автоматически, и у меня он нормально компилируется. А уже в Select выскакивает вышеназванная ошибка. А так не только с SubStr, но и с функцией, например, MOD.
А ссылки, и не только эти, я полночи читал, прежде чем обратиться в форум ... не помогло
Добавлено: 24 авг 2005, 23:07
kdv
в упомянутом документе вот это читал?
"базовая библиотека (или другие) ib_udf.dll зависит от библиотеки ib_util.dll. Соответственно, зависимую библиотеку загружает не сервер, а именно оригинальная dll. Поэтому правила загрузки подчиняются правилам, действующим например для Windows для функции Win32 - LoadLibrary. А это значит что ib_udf.dll должна находиться в системном пути или в общем пути переменной PATH (для embedded допускается в текущем каталоге)."
и еще есть такая штука, как filemon (sysinternals.com). пускаешь его, потом пробуешь обратиться к udf. и filemon тебе показывает, какие файлы грузит сервер, и чего он не может загрузить.
Добавлено: 25 авг 2005, 01:51
Vental
Куда я только ib_udf.dll не копировал. Вплоть до System32. Не помогает. Но что можно понять из Filemon, я, честно говоря, не понял
7 0:21:16 IBExpert.exe:3904 READ C:\Program Files\Borland\InterBase\interbase.msg SUCCESS Offset: 134168 Length: 1024
Добавлено: 25 авг 2005, 09:48
kdv
ты ibexpert от сервера отличаешь? Нахрена тебе лог обращений к файлам ibexpert-а? Ребят, забодало уже лет как 5 объяснять что с базами работает сервер, а не клиент.
и потом, ЧИТАЙ ВНИМАТЕЛЬНЕЕ. ТАМ НАПИСАНО ПРО IB_UTIL, а не про IB_UDF. Более невнимательного читателя еще не встречал.
базовая библиотека (или другие) ib_udf.dll зависит от библиотеки ib_util.dll.
Добавлено: 25 авг 2005, 15:14
Vental
Спасибо за внимание. Разобрался кое-как. Дело в том, что я использовал описание этой функции из Dev.Guide, лежащего на Вашем сайте. А он у Вас устаревший, про что там и было написано.
Ещё тогда если можно вопросик. Допустим, я пишу запрос
Select
CardName,
SubStr(CardName,1,10)
from Cards
Можно ли отсортировать выборку по "SubStr(CardName,1,10)". Я понимаю, что это то же самое, что и сортировка по CardName, но у меня задача стоит вообще-то чуть-чуть по другому и поэтому вопрос я упростил
Добавлено: 25 авг 2005, 15:51
Karp
Vental писал(а):Можно ли отсортировать выборку по "SubStr(CardName,1,10)".
а попробовать?
моно
Добавлено: 25 авг 2005, 16:56
Ivan_Pisarevsky
Код: Выделить всё
Select
CardName,
SubStr(CardName,1,10)
from Cards
order by 2