В каталоге interbase udf не найден файл caseudf dll
В практике программирования нередко встречаются ситуации, когда программисту недостаточно того набора функций, который предоставлен сервером InterBase . К счастью, InterBase дает возможность создавать и подключать к базе данных собственные функции, которые называются UDF ( User Defined Functions - Функции, определенные пользователем). Прелесть этого механизма в том, что такие функции можно написать на любом языке программирования, включая Delphi , который позволяет делать библиотеки DLL ( Dynamic Link Library - Динамически подключаемые библиотеки). Программист может реализовать в одном или нескольких DLL -файлах множество необходимых ему функций практически любой сложности, затем поместить этот файл (файлы) там, где установлен InterBase . Останется только подключить описанные функции к рабочей базе данных, после чего любую из этих функций можно использовать в запросах на любых клиентских ПК.
Для демонстрации этой возможности как нельзя лучше подойдет функция Upper_Rus , описанная В.В.Фароновым в книге " Программирование баз данных в Delphi7 . Учебный курс". Функция преобразует все символы строки в верхний регистр , но в отличие от стандартной Upper , она корректно сработает и с другими наборами символов и порядком сортировки.
Для начала нам нужно создать DLL - файл . Откройте Delphi . В нашем случае нам нужно будет создать отдельный DLL - файл , поэтому создавать его нужно как отдельный проект. Выберите команду меню < File -> Close All >, чтобы закрыть новое приложение , которое Delphi запускает автоматически. Затем выберем команду < File -> New -> Other >. Откроется окно, в котором на вкладке New нам нужно выбрать DLL Wizard:
При этом откроется окно модуля без всяких форм, которое содержит лишь следующий код (комментарии опущены):
Выберем команду < File -> Save All >, где нам предложат сохранить проект без всяких модулей. Создайте для проекта отдельную папку, а проект назовите Udf_Dll . Далее приводится весь код библиотеки Udf_Dll (без комментариев):
Поскольку это DLL -проект, который не может работать самостоятельно, выбирать команду Run не нужно. Вместо этого нажмите < Ctrl+F9 >, либо выберите команду < Project -> Compile Udf_Dll >. В результате в указанной вами папке появится файл Udf_Dll.dll .
В приведенном выше коде мы создали функцию Upper_Rus , которая имеет входной и выходной строковые параметры типа PChar ( строковый тип Windows ). Кроме того, для правильной работы с InterBase , эта экспортируемая функция задекларирована как cdecl (соглашение о передаче входных параметров). В теле функции входная строка преобразуется в верхний регистр функцией WinAPI ANSIUpperCase, благодаря чему ЛЮБОЙ набор символов (не обязательно русский) будет корректно преобразован в верхний регистр .
В конце мы указываем, что описанная функция Upper_Rus предназначена для экспорта.
Delphi можно закрыть. Полученный файл динамической библиотеки Udf_Dll.dll скопируйте в каталог UDF сервера InterBase (по умолчанию - C:\Program Files\Borland\ InterBase \ UDF ). Если скопировать файл в другой каталог, InterBase его не найдет.
Теперь эту функцию нужно зарегистрировать в базе данных First ( сервер InterBase должен быть запущен, утилита IBConsole открыта, база данных First выделена и запущена утилита Interactive SQL ). В окне запросов Interactive SQL укажите следующий запрос :
В Interactive SQL мы можем ввести запрос , показывающий разницу между стандартной функцией UPPER и нашей функцией UPPER _RUS (может потребоваться перезагрузка IBConsole , или хотя бы закрытие ( Disconnect ) и открытие ( Connect ) базы данных First ):
Как видно из рисунка, там, где стандартная функция UPPER не смогла преобразовать текст в верхний регистр , функция UPPER _RUS с этой задачей справилась. Далее эту функцию можно использовать в пределах базы данных First на любом пользовательском ПК, который подключен к InterBase .
← →Pul ( 2004-01-15 13:38 ) [0]
Подскажите пожалуйста, с какими настройками винды или с чем еще может быть связана следующая ошибка. Не найдена точка входа в UDF функцию. Причем на одном сервере работает без проблем, на другом не хочет. DLL-ка лежит в обоих случаях в одном и том же месте, декларация в базе есть, регистр в названиях одинаков. Ни с чем больше, кроме каких-то настроек винды или interbase сервера я связи не вижу. Используется Interbase Firebird.
← →Johnmen ( 2004-01-15 13:41 ) [1]
Для разных серверов разное расположение длл. Хотя здесь это, скорее всего, непричем.
А сервера разные ?
Pul ( 2004-01-15 13:47 ) [2]
>>Johnmen © (15.01.04 13:41) [1]
DLL-ка лежит в обоих случаях в одном и том же месте
Единственное различие, на одном Win2000SP3, на другом Win2000SP4
Может в этом связь?
Digitman ( 2004-01-15 13:48 ) [3]
комментарий из штатной док-ции к IB6
LANGUAGE REFERENCE 189
Beginning with InterBase 6, the rules for placing a library module have changed. It must meet one of the following criteria:
· It is located in ib_install_dir/UDF
· The complete pathname to the directory, including a drive letter in the case of a
Windows server, is listed in the InterBase configuration file.
Note that it is no longer sufficient to state a complete path name to the module in DECLARE
EXTERNAL FUNCTION. These changes have been implemented for security reasons.
Digitman ( 2004-01-15 13:51 ) [4]
> Pul
DDL-скрипт при генерации GDB-файла один и тот же во всех случаях используется ? тот что единожды был создан ? или иначе ?
IBExpert фигурировал при создании скрипта ?
← →Vlad ( 2004-01-15 13:52 ) [5]
> Pul (15.01.04 13:47) [2]
Если Windows2000 русский, то ни в коем случае не ставь 3-й сервиспак. Он причина многих бед.
У тебя вот это соблюдается ?
В Interbase 6 или Firebird библиотеки пользовательских функций (UDF) должны быть помещены в каталог UDF, или в каталог, определенный в файле конфигурации IBCONFIG (или isc_config на Unix) параметром EXTERNAL_FUNCTION_DIRECTORY. Это сделано по соображениям безопасности.
Pul ( 2004-01-15 13:57 ) [6]
>> Digitman © (15.01.04 13:51) [4]
Эту цитату я уже читал.
Я не использую скрипт для генерации GDB-файла, а просто делаю backup/restore одной и той же базы на обоих машинах.
При создании скрипта использовал
IBExpert или EMS QuickDesk, я уже не помню.
Pul ( 2004-01-15 14:01 ) [7]
>>Vlad © (15.01.04 13:52) [5]
Win2000 русский, но дело в том, что на 3-м сервиспаке работает, а на 4-м нет.
А EXTERNAL_FUNCTION_DIRECTORY установлен правильно.
Кстати, а резделителем между названием и значением параметра в IBCONFIG может быть как пробел, так и табуляция?
Digitman ( 2004-01-15 14:51 ) [8]
> Pul
ты все-таки разыщи ориг.скрипт и приведи сюда точный фрагмент декларации проблемной UDF.
← →Desdechado ( 2004-01-15 15:15 ) [9]
ошибку выдает при restore или уже при работе с БД (запросы)?
← →Pul ( 2004-01-15 15:34 ) [10]
>>Digitman © (15.01.04 14:51) [8]
декларация проблемной UDF
DECLARE EXTERNAL FUNCTION ANKLIKE
BLOB,
CSTRING (32000),
FLOAT
RETURNS INTEGER BY VALUE
ENTRY_POINT "ANKLIKE" MODULE_NAME "ankudf.dll";
>>Desdechado © (15.01.04 15:15) [9]
при работе с БД
Pul ( 2004-01-15 16:33 ) [11]
ЭЙ. ОТЗОВИТЕСЬ!
← →Desdechado ( 2004-01-15 17:12 ) [12]
а другие UDF из этой DLL работают?
← →kaif ( 2004-01-16 01:20 ) [13]
ENTRY_POINT "ANKLIKE"
Функция действительно в dll в верхнем регистре названа? Функции чувствительны к таким вещам.
А где она все же лежит? В \udf или в этой самой
EXTERNAL_FUNCTION_DIRECTORY ?
Попробуй объявить декларацию какой-нибудь стандартной функции из джентльменского набора в ib_udf.sql. Посмотри, ее тоже не удается вызвать?
Digitman ( 2004-01-16 09:23 ) [14]
если в UDF DLL соотв.ф-ция объявлена и экспортируется как
function ANKLIKE(Blob: PBlob; Str: PChar; var Dbl: Double): Integer; cdecl;
то при приведенном тобой ISQL-скрипте проблем с поиском ф-ции по эксп.имени быть не должно - и там и там имя ф-ции фигурирует в верхнем регистре
остается одно - сама DLL по какой-то причине не находится сервером
попробуй перенести на время DLL в ($WINDOWS)\System32
← →Pul ( 2004-01-16 16:11 ) [15]
>> Desdechado © (15.01.04 17:12) [12]
Она там всего одна
Pul ( 2004-01-16 16:17 ) [16]
>> kaif © (16.01.04 01:20) [13]
Функция действительно в dll в верхнем регистре названа!
Весь прикол в том, что на одном сервере работает без проблем, на другом не хочет. DLL лежит в \udf.
>> Digitman © (16.01.04 09:23) [14]
>> попробуй перенести на время DLL в ($WINDOWS)\System32
Уже пробовал, один и тот же результат.
Desdechado ( 2004-01-16 16:28 ) [17]
попробуй в декларации UDF сделать
MODULE_NAME "ankudf"
вместо
MODULE_NAME "ankudf.dll"
Pul ( 2004-01-16 16:42 ) [18]
>> Desdechado © (16.01.04 16:28) [17]
не помогает
Pul ( 2004-01-16 16:47 ) [19]
>> kaif © (16.01.04 01:20) [13]
стандартные функции из джентльменского набора работают
Pul ( 2004-01-16 18:12 ) [20]
ЭЭЭЭ----ЙЙЙЙ.
← →Digitman ( 2004-01-16 18:33 ) [21]
> Pul
хорошо.
сэмулируй ситуацию с загрузкой UDF в тестовом приложении :
hUDF := LoadLibrary("c:\Interbase\UDF\ankudf.dll
");
Win32Check(hUDF <> 0);
pFunc := GetProcAddress(hUDF, "ANKLIKE");
Win32Check(Assigned(pFunc));
о результатах извести
← →Pul ( 2004-01-19 12:54 ) [22]
>> Digitman © (16.01.04 18:33) [21]
Данный тестовый пример работает
Digitman ( 2004-01-19 13:07 ) [23]
1. закомментируй на время все ссылки на эту UDF в SP и триггерах, перекомпилируй эти SP/триггеры
2. удали из БД декларацию этой UDF, декларируй ее заново
3. раскомментируй ссылки на UDF в SP и триггерах, , перекомпилируй эти SP/триггеры,
попробуй что получилось
← →Vlad ( 2004-01-19 13:09 ) [24]
Между 2 и 3 неплохо бы еще сервер перезапустить
← →Pul ( 2004-01-19 13:45 ) [25]
>> Digitman © (19.01.04 13:07) [23]
Тот же результат.
Digitman ( 2004-01-19 14:08 ) [26]
> Pul
после первого же отказавшего обращения IB-сервера к UDF DLL любой утилитой просмотри список модулей процесса IB-сервера
если среди них не присутствует модуль твоей UDF DLL, то проблема - в поиске самой DLL IB-сервером, в противном случае - проблема в ненахождении сервером в ней эксп.ид-ра ANKLIKE
← →Pul ( 2004-01-19 15:10 ) [27]
>> Digitman © (19.01.04 14:08) [26]
А чем объяснить тот факт, что стандартные функции нормально работают, а эта - нет, причем лежат эти DLL-ки в одной папке
kaif ( 2004-01-19 15:20 ) [28]
Проверь, нет ли путаницы русские/английски символы в имени dll. Например, буква "a" может быть русской (чья-то дурацкая шутка). Переименуй вообще эту dll к черту в MMM.DLL и продекларируй такую функцию. Для упрощения экспериментов создай отдельную маленькую базу данных. Без всяких триггеров и процедур.
В любом случае здесь какое-то недоразумение.
Digitman ( 2004-01-19 15:28 ) [29]
> Pul (19.01.04 15:10) [27]
> А чем объяснить тот факт
есть еще одно страшное подозрение : твоя библ-ка находится сервером, но при попытке ее загрузки происходит отказ из-за отсутствия на машине неких библиотек, от которых зависит работа твоей библ-ки .. проверяй и разрешай все необходимые зависимости . возможно твоя библ-ка требует наличия bpl-модулей, которых попросту и в помине нет на проблемной машине
← →Digitman ( 2004-01-19 15:33 ) [30]
к сож., ИБ-сервер (и его клоны) никак не извещают клиента об истинных причинах отказа при попытке задействовать внешнюю ф-цию во внеш.модуле . "не найдено", мол, и все тут . проверка зависимостей и путей поиска/загрузки требуемых модулей (пути поиска по умолчанию и пр.) - первое что надо было сделать в этой ситуации .
← →Digitman ( 2004-01-19 15:36 ) [31]
что стоит в USES твоей библ-ки ? перечисли..
еще лучше, если полный текст проекта библ-ки небольшой, привести его сюда
← →kaif ( 2004-01-19 16:42 ) [32]
2 Digitman © (19.01.04 15:28) [29]
Но тестовое приложение с динамической загрузкой библиотеки, которое ты предложил, работает, как пишет автор вопроса. Если бы использовались какие-то dll, которых нет, то, ИМХО, тест бы не работал. А автор пишет, что тест работает. Конечно, стоит в любом случае с помощью tdump посмотреть все dll, которые использует эта dll. У меня был случай, когда по этой причине возникала подобная ошибка.
Digitman ( 2004-01-19 16:51 ) [33]
> kaif © (19.01.04 16:42) [32]
не знаю. автор молчит . темный лес пока .. с зависимостями
← →Pul ( 2004-01-21 14:12 ) [34]
Извините за дурацкий вопрос, напомните пож. параметры командной строки для tdump
← →Vlad ( 2004-01-21 14:14 ) [35]
tdump /?
← →Pul ( 2004-01-21 14:22 ) [36]
>> Vlad © (21.01.04 14:14) [35]
Я имел в виду параметры для просмотра библиотек, подключенных к приложению
(просто у меня необходимость подобной отладки возникала редко и я раньше пользовался другой прогой, дистрибутив которой я никак не могу найти)
Vlad ( 2004-01-21 14:38 ) [37]
> Pul (21.01.04 14:22) [36]
> Я имел в виду параметры для просмотра библиотек, подключенных
> к приложению
Не поверишь, я имел ввиду тоже самое :-)
Читаем:
Syntax: TDUMP [options] [InputFile] [ListFile] [options]
Библиотеки, требуемые приложением увидишь в разделе Import
← →Pul ( 2004-01-21 15:15 ) [38]
>> Vlad © (21.01.04 14:38) [37]
спасибо, уже нашел.
Только я в указанном разделе не увидел библиотек с подключаемыми функциями, хотя стандартная фукнция ABS из ib_udf в запросах используется и нормально работает.
Это просто список импортируемых из DLL функций, а уж никак не список подключенных в данный момент.
Pul ( 2004-01-21 15:19 ) [39]
Vlad © (21.01.04 14:38) [37]
Вот почему я не люблю утилиты с командной строкой
Digitman ( 2004-01-21 16:02 ) [40]
> Это просто список импортируемых из DLL функций, а уж никак
> не список подключенных в данный момент.
для получения инф-ции о процессах, использующих в дан.момент те или иные модули, можно воспользоваться иными существующими утилитами (просто поищи в сети)
> Вот почему я не люблю утилиты с командной строкой
возьми из состава MS VisualStudio GUI-утилиту depends.exe - она работает и без ком.строки, т.к. подобно моему примеру (см.ссылку) встраивается в shell
← →Pul ( 2004-01-22 12:57 ) [41]
>>Digitman © (21.01.04 16:02) [40]
Утилиту нашел, и выяснилось, что в списке используемых модулей моей DLL-ки нет, а стандартная ib_udf.dll - есть.
Фантастика, значит это сервер не может найти файл, но он же лежит в той же папке, что и ib_udf.dll.
А как проверить зависимость моей dll-ки от других?
kaif ( 2004-01-22 14:02 ) [42]
2 Pul (22.01.04 12:57) [41]
А как проверить зависимость моей dll-ки от других?
Ну так tdump для этого и предлагалось использовать. С помощью tdump (или аналогичных утилит) можно увидеть, какие dll импортируются твоей dll и требуются при ее запуске. Правда, так не увидишь динамически подгружаемые dll, но этого может и не понадобится. С очень большой вероятностью твоя dll что-то использует, чего на компе просто нет.
Ты тест-то попробовал написать и запустить (загрузка dll и вызов функции из нее)?
Digitman © (16.01.04 18:33) [21]
Тест многое покажет.
Есть вопрос: после переноса на другой комп (или переустановки оси) базы "теряются" UDFшки. В смысле при обращении к процедурам где применяются эти UDF возникает ошибка, мол нет DLL или EntryPoint не найден хотя все на месте :((
Сервак IB 5.6, udf библиотека - стандартная - ib_udf, версии одинаковые. В чем проблема.
← →Zacho ( 2003-10-08 00:29 ) [1]
> В чем проблема.
В пути к dll ? В имени модуля или функции ?
x_ANDREW_x ( 2003-10-08 00:34 ) [2]
>>В пути к dll ? В имени модуля или функции ?
Проблема в том, что сервак не видит(?) скорее не хочет видеть DLL или проблема в том о чем как раз и хочу узнать! И спрашиваю в чем проблема совершенно идентичные установки и настройки всего винды IBServera моей проги и пр. Пути переменные окружения и пр. тоже идентичны, а UDF не выполняется.
Zacho ( 2003-10-08 00:36 ) [3]
Напиши подробнее. Телепаты - редкость.
← →x_ANDREW_x ( 2003-10-08 00:44 ) [4]
Хорошо. :))
Работал я под XP. Писал прогу на D7 и IB 5.6. В базе использовал UDF от InterBase: ABS, FLOOR, BIN_XOR. Все работало прекрасно.
Потом переустановил XP+SP1 и установил заново все D7, IB и пр.
Запускаю свою прогу (да даже обычный ISQL) и делаю хотябы так:
Select * from ACCOUNTS, где в ACCOUNTS в тригерах использую ABS и FLOOR. А сервак и говорит: "Function ABS is not defined" (дальше на русском напишу) ". модуль или точка входа не найдены".
Внимание вопрос: отчего такое происходить. Почему в "почти" идентичных системах проблема.
Zacho ( 2003-10-08 00:48 ) [5]
Потому что dll лежит в другом каталоге :) Или вообще нет такой dll
← →x_ANDREW_x ( 2003-10-08 00:52 ) [6]
А. Понятно! :))) Ты вообще с IB работал. Ты знаешь что ib_udf всегда лежит в папке "Interbase Server\LIB" и кладу ДЛЛ туда не я а программа "SETUP.EXE", написанная создателями IBServer.
(!) плз. можно ответы по делу, а не типа "может комп выключить-включить"
или урлу форума поумнее
Zacho ( 2003-10-08 00:55 ) [7]
>
> x_ANDREW_x (08.10.03 00:52) [6]
> А. Понятно! :))) Ты вообще с IB работал.
Я работаю с IB с 1997 года. И что ??
kaif ( 2003-10-08 00:55 ) [8]
у меня были подобные проблемы с IB6. Во-первых важно, чтобы udf лажала именно в каталоге \udf. В IB5.* не было такого требования. Во-вторых мне кажется, что в каких-то версиях IB6.0 было ошибка такого рода. А может быть я тогда не знал еще, что udf в этом каталоге обязана, лежать не помню. Если ошибка сервера поставь Firebird или Yaffil. IB6.0 в любом случае сносить придется он глючный.
← →Zacho ( 2003-10-08 00:58 ) [9]
>
> kaif © (08.10.03 00:55) [8]
> у меня были подобные проблемы с IB6. Во-первых важно, чтобы
> udf лажала
Без обид, но эта фпаза мне понравилась :)))
x_ANDREW_x ( 2003-10-08 00:59 ) [10]
>> kaif
Спасаешь форум. слегка.
1) Версия IB - 5.6, а не 6.
2) Устанавливал прогу с базой много раз, но такое встретил в первый раз
3) проблема-то решаема. снос серваков, замену видовсов на линуксы, замену проца, материнки и видюхи не предлагать.
x_ANDREW_x ( 2003-10-08 01:01 ) [11]
Zacho © (08.10.03 00:58)
>>фпаза мне понравилась :)))
во. от
Zacho ( 2003-10-08 01:02 ) [12]
> x_ANDREW_x (08.10.03 00:59) [10]
> >> kaif
> 3) проблема-то решаема.
Всяко решаема. И без сноса серваков.
Johnmen ( 2003-10-08 01:03 ) [13]
А после переустановки IB той же версии ?
>Ты знаешь что ib_udf всегда лежит в папке "Interbase Server\LIB"
Разве что для версий младше 6.0
← →x_ANDREW_x ( 2003-10-08 01:07 ) [14]
>>Johnmen © (08.10.03 01:03)
Если смотреть на САБЖ то можно увидеть что используется версия IB (я разве еще не указывал :) ) № 5.6 и утверждение ib_udf всегда лежит в папке "Interbase Server\LIB" верно.
>> Zacho © (08.10.03 01:02)
Скажи если знаешь и спаси. И тогда паду на колени прощения просить.
kaif ( 2003-10-08 01:08 ) [15]
Вспомнил.
Кажись путь к Interbase старых версий должен быть без пробелов!
Всякие c:\Program Files\ и т.д. не катят. Может в этом дело? Помнится у некоторых чуваков из-за этого пробела русские чарсеты доже не работали. В общем было такая фишка, если ставишь IB5.6. Попробуй в c:\Intebase\ поставить.
kaif ( 2003-10-08 01:10 ) [16]
2 Zacho :)))
У меня свет выключен в комнате. Клавиатуру почти не видно.
Zacho ( 2003-10-08 01:12 ) [17]
> x_ANDREW_x (08.10.03 01:07) [14]
Да сказал уже. Ошибка или в имени модуля или в имени функции (они регистрозависимые) Проверь.
Zacho ( 2003-10-08 01:15 ) [18]
Я пощел за пивом :) Вернусь, посмотрю, чем дело закончилось :)
← →kaif ( 2003-10-08 01:19 ) [19]
2 Zacho © (08.10.03 01:12) [17]
Зря ты так. Был у меня аналогичный случай. И dll правильная и имена те, что надо. Но не видит udf нифига и все тут. Помню, мучился очень долго. Но что было - убей не вспомню. Там же еще были всякие разные структуры файлов. Хотя это только с IB6.0 стало проявляться.
Я думаю все же дело в каталогах и путях с пробелами. Нужно эту dll напихать везде где можно (в lib, bin, system32, udf). Если не поможет, переименовать Program Files :))))) Или переставить в c:\InterBase\
x_ANDREW_x ( 2003-10-08 01:25 ) [20]
>>kaif
Спасибо за все. Переустанавить влом. поступил так:
скопировал содержимое папки C:\Progra~1\Interbase Corp\. \LIB в папку C:\LIB и добавил в переменные окружения виндовса PATH = C:\LIB.
Да простит модератор, видать не тематическая беседа.
>>Zacho © (08.10.03 01:12) [17]
>>Да сказал уже. Ошибка или в имени модуля или в имени функции
>>(они регистрозависимые) Проверь.
Проблема в имени пива. оно желудкозависимое! Проверь!
>> ALL. ВСЕМ ПОКА!
>>kaif
Еще раз спасибо.
Zacho ( 2003-10-08 01:38 ) [21]
>
> x_ANDREW_x (08.10.03 01:25) [20]
> Проблема в имени пива. оно желудкозависимое! Проверь!
Проверил.. Перешел на слабоалкогольные коктейли :) Спасибо ! :-)))
Vlad ( 2003-10-16 13:03 ) [0]
Господа, выручайте. Первый раз столкнулся с UDF, до этого никогда не использовал, и вот уже час бьюсь над проблемой. Короче говоря поставил Yaffil Classic Server. В папке UDF лежат файлы ib_udf.dll и скрипт ib_udf.sql. В IBExpert запускаю этот скрипт, он создает мне функции, вроде нормально. Но сами функции не работают, т.е. при попытке использовать их в sql предложениях возникает ошибка: "Invalid data type, length or value. Function SubStr could not be matched". Такая же ошибка, если файл ib_util.dll убрать с диска совсем. Такое впечатление, что Yaffil не находит эту dll.
Подозреваю, что проблема пустяковая, но как ее бороть - не пойму. Подскажите, плз.
Заранее спасибо.
Danilka ( 2003-10-16 13:08 ) [1]
Vlad © (16.10.03 13:03)
перезапусти сервер
Vlad ( 2003-10-16 13:25 ) [2]
>Danilka © (16.10.03 13:08) [1]
Перезапустил, не помогло :(
Johnmen ( 2003-10-16 13:44 ) [3]
1. UDF - в нужную папку
2. Имена ф-ий в декларации регистрозависимы.
Vlad ( 2003-10-16 13:49 ) [4]
>Johnmen © (16.10.03 13:44) [3]
UDF - лежит в папке с:\Program Files\Yaffil\UDF\, т.е. там, куда его инсталлятор положил. Я собственно ничего не менял. Имена функций были прописаны в скрипте, к-рый прилагался к этой библиотеке (ib_util.sql), думаю, что в нужном регистре. Я просто запустил этот скрипт.
Но не работает :(
Val ( 2003-10-16 13:49 ) [5]
>Danilka © (16.10.03 13:08) [1]
firebird у меня без перезапуска нормально их увидел.
Danilka ( 2003-10-16 13:52 ) [6]
[5] Val © (16.10.03 13:49)
угу, у меня тоже. :))
зачем я только раньше его перезапускал, балбес. :))
Val ( 2003-10-16 13:53 ) [7]
>Vlad © (16.10.03 13:49) [4]
Имена функций были прописаны в скрипте, к-рый прилагался к этой библиотеке (ib_util.sql), думаю, что в нужном регистре. Я просто запустил этот скрипт.
думаю, что Johnmen © (16.10.03 13:44) [3]
имел ввиду, что в своем тексте sql вы должны писать их в таком же регистре, как они объявлены.
mOOx_ ( 2003-10-16 13:55 ) [8]
Где-то читал, что длл с УДФ должны лежать в папке
C:\Program Files\Firebird\UDF
Эту папку можно как-то переопределить, но помоему, проще все кинуть туда. Попробуй.
Val ( 2003-10-16 13:59 ) [9]
>mOOx_ © (16.10.03 13:55) [8]
у него Yaffil
Vlad ( 2003-10-16 14:00 ) [10]
Val © (16.10.03 13:53) [7]
думаю, что Johnmen © (16.10.03 13:44) [3]
имел ввиду, что в своем тексте sql вы должны писать их в таком же регистре, как они объявлены.
Все равно не помогает
>mOOx_ © (16.10.03 13:55) [8]
Ну так у меня таже папка, которую ты назвал, только вместо FireBird - Yaffil, что по-моему справедливо :)
Может нужны какие-то доп. настройки, напр. в переменной PATH или еще что-нибудь ?
← →Val ( 2003-10-16 14:02 ) [11]
>Vlad © (16.10.03 14:00) [10]
проверил, такая ошибка возникает при неверном использовании параметров функции.
ваш запрос, пожалуйста.
Johnmen ( 2003-10-16 14:04 ) [12]
М.б. скрипт неверен ?
Д.б. так
DECLARE EXTERNAL FUNCTION substr
CSTRING(80), SMALLINT, SMALLINT
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT "IB_UDF_substr" MODULE_NAME "ib_udf";
Vlad ( 2003-10-16 14:06 ) [13]
Val © (16.10.03 14:02) [11]
Да все что угодно, напр:
select SUBSTR("abcdefg",1,1) from RDB$Database
Johnmen © (16.10.03 14:04) [12]
Скрипт один-в-один сходится.
mOOx_ ( 2003-10-16 14:07 ) [14]
Сори :). Забыл что Yaffil тоже из того же семейства :). Кстати, да. Запросик бы глянуть.
← →Val ( 2003-10-16 14:10 ) [15]
м.б. стоит зарегистрировать dll с помощью regsvr32?
← →Vlad ( 2003-10-16 14:12 ) [16]
>Val © (16.10.03 14:10) [15]
Это ж не COM-объект, зачем его регистрить ?
Danilka ( 2003-10-16 14:13 ) [17]
[13] Vlad © (16.10.03 14:06)
интересно, а почему она ругается "SubStr", а не "SUBSTR", как в запросе и не "substr" как в скрипте?
может в яффи есть такая встроенная функция?
у меня, кстати, запрос прокатил без проблем.
← →Val ( 2003-10-16 14:14 ) [18]
>Vlad © (16.10.03 14:12) [16]
мда.а перенос в системные каталоги пробовали?
Vlad ( 2003-10-16 14:17 ) [19]
Может кто нибудь посмотреть, у кого установлен IB/FB/YA, описание переменной PATH, там должно быть что-нибудь по этому поводу ?
Danilka © (16.10.03 14:13) [17]
Это я неверно написал. В тексте ошибки была в верхнем регистре.
С другими ф-циями тоже самое
Val © (16.10.03 14:14) [18]
Пробовал. Не помогает
Danilka ( 2003-10-16 14:20 ) [20]
[19] Vlad © (16.10.03 14:17)
у меня в path только путь к каталогу bin.
но у меня фиребирд 1.5
и все работает, что скрип для substr-а, что запрос
Val ( 2003-10-16 14:23 ) [21]
у меня тоже к bin, но я сам его добавлял когда-то, это точно.
← →Vlad ( 2003-10-16 14:24 ) [22]
Добавил путь к BIN - не помогло.
← →Val ( 2003-10-16 14:28 ) [23]
а что возвращает запрос по SUBSTR:
SELECT a.RDB$FUNCTION_NAME, b.RDB$ARGUMENT_POSITION,
b.RDB$MECHANISM, b.RDB$FIELD_TYPE,
b.RDB$FIELD_SCALE , b.RDB$FIELD_LENGTH, b.RDB$FIELD_SUB_TYPE
FROM RDB$FUNCTIONS a, RDB$FUNCTION_ARGUMENTS b
WHERE (a.RDB$FUNCTION_NAME = b.RDB$FUNCTION_NAME) and
((a.RDB$SYSTEM_FLAG = 0) OR (a.RDB$SYSTEM_FLAG IS NULL))
and (b.RDB$ARGUMENT_POSITION <> a.RDB$RETURN_ARGUMENT)
and a.RDB$FUNCTION_NAME = "SUBSTR"
Vlad ( 2003-10-16 14:32 ) [24]
>Val © (16.10.03 14:28) [23]
Запрос вернул три строчки с именем функции SUBSTR, ну и еще параметры (пока не разобрался, что означают)
Val ( 2003-10-16 14:35 ) [25]
>Vlad © (16.10.03 14:32) [24]
этот запрос определяет входные параметры данной функции, а вот на результаты интересно бы посмотреть, для сравнения.
Vlad ( 2003-10-16 14:38 ) [26]
Поля в том порядке, к-ром ты перечислил.
Если картинка не съедет, то вот так:
SUBSTR 1 1 40 0 80 null
SUBSTR 2 1 7 0 2 null
SUBSTR 3 1 7 0 2 null
Val ( 2003-10-16 14:41 ) [27]
Все совпадает, нормально функция в базу занеслась. Вариантов, честно говоря, нет :(
← →Vlad ( 2003-10-16 14:44 ) [28]
При стандартной установке gds32.dll в каком каталоге должна находится, в BIN или в SYSTEM(32) ?
У меня почему-то в обеих местах присутствует.
Danilka ( 2003-10-16 14:46 ) [29]
[28] Vlad © (16.10.03 14:44)
Вообще-то эту библиотеку юзает клиент.
Можешь положить ее в папку с клиентом.
Val ( 2003-10-16 14:48 ) [30]
у меня нет ее в бине.
← →Vlad ( 2003-10-16 14:54 ) [31]
Мужики, во дела !
Из Дельфей попробовал - работает!
Из IBExpert никак!
Что за фигня .
Val ( 2003-10-16 14:57 ) [32]
>Vlad © (16.10.03 14:54) [31]
ну знаете ли :) надо было вообще-то из консоли пробовать :(
Vlad ( 2003-10-16 15:07 ) [33]
А че с Expert"ом делать то ? Выкинуть чтоли ? :)))
Ладно, мужики, всем спасибо. Это я балбес. Надо было раньше догадаться из Дельфей попробовать.
Danilka ( 2003-10-16 15:09 ) [34]
[31] Vlad © (16.10.03 14:54)
странно, конечно, а у тебя в каталоге с экспертом есть эта самая gds32.dll?
может там у тебя библиотека от IB или FB а не от дятла?
в любом случае, попробуй в каталог с экспертом записать эту библиотеку из каталога Yaffi\bin
Vlad ( 2003-10-16 15:14 ) [35]
>Danilka © (16.10.03 15:09) [34]
Нет, FB и IB я никогда не ставил.
А gds32.dll лежит в bin и system32. Вот только какой из них он использует не знаю.
Кстати, поместил в папку с самим Expert"ом - не помогло.
mOOx_ ( 2003-10-16 15:59 ) [36]
Vlad, может хватит пехать гдс везде, куда можно. Положи его только в директорию Выней (или в систем32) и дело с концами. Кому понадобиться, найдут (я имею ввиде приложения). Я так понимаю, что раз из делфей все работает, то обсуждение закрыто :)
← →Vlad ( 2003-10-16 16:14 ) [37]
>mOOx_ © (16.10.03 15:59) [36]
Закрыто, закрыто. П ехать действительно, хватит :)))
mOOx_ ( 2003-10-16 18:19 ) [38]
А использует он, кстати, то, что рядом с ехе :) 100%
В базе содержится один файл с именем caseudf.dll. Этот файл - динамически подключаемая библиотека. Такая библиотека может загружаться и выполняться любым работающим процессом.
Продукт: (Пустое значение) Компания: (Пустое значение) Описание: (Пустое значение) Версия: 1.0.0.1 MD5: 247b0bba6375d7ddc513925c6c2d18ec SHA1: 3a39d2fd854b3fd3077869e05b7531cc06c5e8dd SHA256: e6b38fbf59cb047debb62d52af780490ea1d81751a3020aca70b9ad13dfc2c7e Размер: 41984 Папка: %PROGRAMFILES%\Borland\InterBase\UDF ОС: Windows XP Частота: Низкая
System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем.
Добавить комментарий для "caseudf.dll" с определёнными выше параметрами
(*) Пожалуйста, пишите комментарии на РУССКОМ языке. Если вы хотите использовать иной язык, перейдите на страницы с этим языком. Отправляя сведения, вы обязуетесь не публиковать материалы, защищённые авторскими правами, содержащие секретные данные или как-то иначе нарушающие права сторонних владельцев, если только вы не владелец таких прав или не имеете разрешение от соответствующих владельцев на публикацию.
Комментарии пользователей для "caseudf.dll"
Этот файл не имеет подтверждённых комментариев. Если вы знаете этот файл, то можете добавить свой комментарий .
Библиотека "caseudf.dll" безопасная или опасная?
Нет комментариев для "caseudf.dll" с определёнными атрибутами. Если вы хотите проверить сумму MD5 файла через базу VirusTotal, нажмите .
Наша окончательная оценка этого файла: Неизвестно. Окончательная оценка основана на комментариях, дате обнаружения, частоте инцидентов и результатах антивирусных проверок.
Вызывает ли Библиотека у вас подозрения? Ваш компьютер стал работать медленнее? Замечаете ли вы какое-либо подозрительное поведение ПК? Рекомендуем вам проверить компьютер с помощью нашей бесплатной утилиты .
Проверьте свой ПК с помощью нашей бесплатной программы
System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем. Программа действительно бесплатная, без рекламы и дополнительных включений, она доступна в виде установщика и как переносное приложение. Её рекомендуют много пользователей.
Читайте также: