Регистрация UDF. Работа с Ini

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Vental
Сообщения: 18
Зарегистрирован: 04 июл 2005, 22:41

Регистрация UDF. Работа с Ini

Сообщение Vental » 22 авг 2005, 16:00

Добрый день.

Подскажите пожалуйста, как в 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-файлов для пользователей. Или просто взять их и выложить в папку открытую для чтения/записи

Заранее спасибо

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 авг 2005, 16:32

ууу... а написать declare external function нельзя?
module name or entrypoint could not be found.
www.ibase.ru/ibfaq.htm#udf читал? особенно про free_it?
Если база лежит на сервере(отключено запись/чтение)
если база лежит на сервере, то ее вообще кроме сервера видеть никому не надо. То есть, каталог, где она лежит, шарить нельзя.
Ini-файлов для пользователей
??? каких ini-файлов? а настройки юзеров в blob разве нельзя хранить?

Vental
Сообщения: 18
Зарегистрирован: 04 июл 2005, 22:41

Сообщение Vental » 24 авг 2005, 22:28

За идею с Ini - Blob большое спасибо

Когда в IBExpert объявляешь функция, скрипт "Declare..." создаётся автоматически, и у меня он нормально компилируется. А уже в Select выскакивает вышеназванная ошибка. А так не только с SubStr, но и с функцией, например, MOD.

А ссылки, и не только эти, я полночи читал, прежде чем обратиться в форум ... не помогло

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 24 авг 2005, 23:07

в упомянутом документе вот это читал?
"базовая библиотека (или другие) ib_udf.dll зависит от библиотеки ib_util.dll. Соответственно, зависимую библиотеку загружает не сервер, а именно оригинальная dll. Поэтому правила загрузки подчиняются правилам, действующим например для Windows для функции Win32 - LoadLibrary. А это значит что ib_udf.dll должна находиться в системном пути или в общем пути переменной PATH (для embedded допускается в текущем каталоге)."

и еще есть такая штука, как filemon (sysinternals.com). пускаешь его, потом пробуешь обратиться к udf. и filemon тебе показывает, какие файлы грузит сервер, и чего он не может загрузить.

Vental
Сообщения: 18
Зарегистрирован: 04 июл 2005, 22:41

Сообщение Vental » 25 авг 2005, 01:51

Куда я только ib_udf.dll не копировал. Вплоть до System32. Не помогает. Но что можно понять из Filemon, я, честно говоря, не понял :shock:

7 0:21:16 IBExpert.exe:3904 READ C:\Program Files\Borland\InterBase\interbase.msg SUCCESS Offset: 134168 Length: 1024

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 авг 2005, 09:48

ты ibexpert от сервера отличаешь? Нахрена тебе лог обращений к файлам ibexpert-а? Ребят, забодало уже лет как 5 объяснять что с базами работает сервер, а не клиент.

и потом, ЧИТАЙ ВНИМАТЕЛЬНЕЕ. ТАМ НАПИСАНО ПРО IB_UTIL, а не про IB_UDF. Более невнимательного читателя еще не встречал.

базовая библиотека (или другие) ib_udf.dll зависит от библиотеки ib_util.dll.

Vental
Сообщения: 18
Зарегистрирован: 04 июл 2005, 22:41

Сообщение Vental » 25 авг 2005, 15:14

Спасибо за внимание. Разобрался кое-как. Дело в том, что я использовал описание этой функции из Dev.Guide, лежащего на Вашем сайте. А он у Вас устаревший, про что там и было написано.

Ещё тогда если можно вопросик. Допустим, я пишу запрос

Select
CardName,
SubStr(CardName,1,10)
from Cards

Можно ли отсортировать выборку по "SubStr(CardName,1,10)". Я понимаю, что это то же самое, что и сортировка по CardName, но у меня задача стоит вообще-то чуть-чуть по другому и поэтому вопрос я упростил

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 25 авг 2005, 15:51

Vental писал(а):Можно ли отсортировать выборку по "SubStr(CardName,1,10)".
а попробовать?

моно

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 25 авг 2005, 16:56

Код: Выделить всё

Select 
CardName, 
SubStr(CardName,1,10) 
from Cards 
order by 2

Ответить