powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / UDR на C
45 сообщений из 45, показаны все 2 страниц
UDR на C
    #35714279
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам я немного не "в теме", но вот заставили писать расширение для ИДС. Нашел "мануалы", если так можно назвать пол абзаца, Естественно столкнулся с проблемами. В частности, что за расширение *.so. Вопрос идиота - чем можно скомпилировать, чтобы его получить?
...
Рейтинг: 0 / 0
UDR на C
    #35714324
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если все таки удосужитесь назвать версию IDS (вы будете удивлены, но возможности очень сильно зависят от версии) то, возможно, сможем указать "мануалы" в которых значительно больше половины абзаца (кстати, а что это вы почитали ?)
И очень желательно вначале прочитать и придерживаться этого
...
Рейтинг: 0 / 0
UDR на C
    #35714363
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeСам я немного не "в теме", но вот заставили писать расширение для ИДС. Нашел "мануалы", если так можно назвать пол абзаца, Естественно столкнулся с проблемами. В частности, что за расширение *.so. Вопрос идиота - чем можно скомпилировать, чтобы его получить?а что будет делать расширение?

*.so это библиотека под nix типа dll в винде
...
Рейтинг: 0 / 0
UDR на C
    #35714575
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasilis И очень желательно вначале прочитать и придерживаться этого
Да, извиняюсь. IDS 10.0, стоит на winxp sp2. Это только для проверки.

vasilis а что это вы почитали ?
Например это и это

Журавлев Денис а что будет делать расширение?
Получает строку и флаг, на выходе строка, либо в верхнем регистре, либо в нижнем.

Журавлев Денис *.so это библиотека под nix типа dll в винде
Это я уже понял, теперь ищу способ как скомпилировать под ХР.
...
Рейтинг: 0 / 0
UDR на C
    #35714600
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoe
Получает строку и флаг, на выходе строка, либо в верхнем регистре, либо в нижнем.

Код: plaintext
1.
2.
3.
4.
5.
6.
create function mysplfunc(instr nvarchar, flag int) returning nvarchar
 If flag = 1  then 
       return upper(instr);
 else return lower(instr);
 End if;
end function;
...
Рейтинг: 0 / 0
UDR на C
    #35714614
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис,

Забыл добавить, что входящая строка может состоять из любых символов, в том числе русских. Будет ли сия функция их нормально воспринимать?
...
Рейтинг: 0 / 0
UDR на C
    #35714632
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeЖуравлев Денис,

Забыл добавить, что входящая строка может состоять из любых символов, в том числе русских. Будет ли сия функция их нормально воспринимать?если у человека создавшего базу хватило ума на DB_LOCALE=ru_ru..... то будет.
...
Рейтинг: 0 / 0
UDR на C
    #35714647
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим не хватило? (=
...
Рейтинг: 0 / 0
UDR на C
    #35714680
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeДопустим не хватило? (=а размер базы какой? Есть у меня ощущение что техподдержке это piece of cake.
...
Рейтинг: 0 / 0
UDR на C
    #35714718
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоит en_Us
База большая, менять не будут, поэтому и необходим экстеншн.
...
Рейтинг: 0 / 0
UDR на C
    #35714778
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create function mysplfunc(instr nvarchar, flag int) returning nvarchar
define outstr nvarchar;
SET COLLATION 'ru_ru.1251';  
If flag = 1  then 
         let outstr = upper(instr);
else let outstr = lower(instr);
End if;
SET NO COLLATION;
return outstr;
end function;
...
Рейтинг: 0 / 0
UDR на C
    #35714799
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм. Посмотрю, попробую.
...
Рейтинг: 0 / 0
UDR на C
    #35714908
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя все же лучше бы именно экстеншн, ибо задача была поставлена именно такая.
...
Рейтинг: 0 / 0
UDR на C
    #35714926
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeХотя все же лучше бы именно экстеншн, ибо задача была поставлена именно такая.ну так пишите, мы вам не мешаем. Продакшен у вас тоже под winxp?
...
Рейтинг: 0 / 0
UDR на C
    #35717599
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoevasilis И очень желательно вначале прочитать и придерживаться этого
Да, извиняюсь. IDS 10.0, стоит на winxp sp2. Это только для проверки.
vasilis а что это вы почитали ?
Например это и это

В первую очередь желательно сначала читать родную документацию.
По вашей версии здесь http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp
Выбираете в содержании "Developing" - "Developing Extensions to IDS" - "IBM Informix User-Defined Routines and Data Types Developer's Guide" - и т.д.
...
Рейтинг: 0 / 0
UDR на C
    #35719974
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasilis,
Читали-читали. Там все это есть, но многое не понятно.

Вот если кто поможет помогите понять как это сделать

ibmTo create a shared-object file on Windows

1. Load the abs.o object file into the abs.so DLL:, as the following example shows:

link /DLL /OUT:abs.dll /DEF:abs.def abs.obj
d:\informix\lib\SAPI.LIB

The preceding command uses the IBM Informix software installed on the d: drive in a directory named informix.
2. Put the DLL in a directory on which user informix has read permission and set the READONLY attribute with the attrib +r command:

attrib
В частности первый пункт.
...
Рейтинг: 0 / 0
UDR на C
    #35720436
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли написать обычную dll и использовать ее, если уж сервер на Windows 2003 стоит.
...
Рейтинг: 0 / 0
UDR на C
    #35721384
Sergey L.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexKoeВот если кто поможет помогите понять как это сделать
ibmTo create a shared-object file on Windows
1. Load the abs.o object file into the abs.so DLL:, as the following example shows:
link /DLL /OUT:abs.dll /DEF:abs.def abs.obj
d:\informix\lib\SAPI.LIB
The preceding command uses the IBM Informix software installed on the d: drive in a directory named informix.

В частности первый пункт.

Я так понимаю, что link - это с:\Program Files\Microsoft Visual Studio N\VC\bin\link.exe
А C/C++ компилятор - cl.exe оттуда-же.
...
Рейтинг: 0 / 0
UDR на C
    #35729486
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey L.,

Да нет же, я не об этом.

"Load the abs.o object file into the abs.so DLL"

Вот здесь у меня разрыв подсознания.
...
Рейтинг: 0 / 0
UDR на C
    #35729791
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeSergey L.,

Да нет же, я не об этом.

"Load the abs.o object file into the abs.so DLL"

Вот здесь у меня разрыв подсознания.

А в чём разрыв то?
Процесс создания UDR на С:
- компилируете(наверно CL) - получаете obj
- линкуете(наверно link) - получаете dll
- создаете CREATE FUNCTION aaaa()
...
EXTERNAL NAME 'место где лежит ваш dll'
LANGUAGE C;
...
Рейтинг: 0 / 0
UDR на C
    #35730918
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ikir
А в чём разрыв то?


into the abs .so DLL

Я, если что, не непроходимо тупой, а студент. Ну, вообще я кажется уже все сообразил. Единственное оставшийся открытым вопрос: код можно писать на подобии этого тупо в блокноте? Компилятор его проглотит? С dll не работал.
...
Рейтинг: 0 / 0
UDR на C
    #35731896
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoe

into the abs .so DLL

Я, если что, не непроходимо тупой, а студент. Ну, вообще я кажется уже все сообразил. Единственное оставшийся открытым вопрос: код можно писать на подобии этого тупо в блокноте? Компилятор его проглотит? С dll не работал.

"Ну мало ли в Бразилии Донов Педров", надо верить строке /OUT:abs.dll .
Писать можно хоть на коленке, но в виндах, раз установлен компилятор, наверно есть красивый IDE, который будет красиво подсказывать, выделять шаблоны и прочие навороты )))))
...
Рейтинг: 0 / 0
UDR на C
    #35735258
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем написал dll, даже кажется правильно. Объявил ее create function, вызываю - получаю ошибку 9793.

Find Error-9793 User-defined-routine module load failed.

The following error message appears in the log:

ERROR: Loading Module module_name

A bad external name, missing file, or wrong permissions might cause this error. Log message log_message_number contains the UNIX error number no encountered and the actual module name being used. For C language on UNIX, the following log message might appear:

Error_number: C Language Module module_name can't load error_string

In the error message, error_number is the current UNIX error number, module_name is the module name from the catalog, and error_string is the dlerror() explanation.

Есть подозрение, что не правильно указал где лежит длл.

путь: C:\Program Files\IBM\Informix\lib\testnum.dll

указал
EXTERNAL NAME '/Program Files/IBM/Informix/lib/testnum.dll'
...
Рейтинг: 0 / 0
UDR на C
    #35752538
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, что никто не может ничего сказать по этому поводу?
...
Рейтинг: 0 / 0
UDR на C
    #35752862
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за это время пробовали поменять EXTERNAL NAME на Виндовый вид?
...
Рейтинг: 0 / 0
UDR на C
    #35753102
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перепробовал что только можно. С уверенностью сказать не могу.
Если есть ваш вариант как стоит написать, то напишите.
...
Рейтинг: 0 / 0
UDR на C
    #35753220
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас проверил еще раз через dbaccess запустил Create Function. Похоже что создал и работает.
Запускаю
SELECT numbr FROM tabl WHERE exp(name)="Ivan"
(соответственно без функции работает)

Получаю
FindError -1213 A character to numeric conversion process failed.
A character value is being converted to numeric form for storage in a numeric column or variable. However, the character string cannot be interpreted as a number. It contains some characters other than white space, digits, a sign, a decimal, or the letter e; or the parts are in the wrong order, so the number cannot be deciphered.

If you are using NLS, the decimal character or thousands separator might be wrong for your locale.

Понять бы что эта ошибка значит.
...
Рейтинг: 0 / 0
UDR на C
    #35753262
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В логе INFORMIX есть запись что он загрузил библиотеку?
...
Рейтинг: 0 / 0
UDR на C
    #35753368
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeСейчас проверил еще раз через dbaccess запустил Create Function. Похоже что создал и работает.
Запускаю
SELECT numbr FROM tabl WHERE exp(name)="Ivan"
(соответственно без функции работает)

Получаю
FindError -1213 A character to numeric conversion process failed.
A character value is being converted to numeric form for storage in a numeric column or variable. However, the character string cannot be interpreted as a number. It contains some characters other than white space, digits, a sign, a decimal, or the letter e; or the parts are in the wrong order, so the number cannot be deciphered.

If you are using NLS, the decimal character or thousands separator might be wrong for your locale.

Понять бы что эта ошибка значит.

Это означает, что вы пытаетесь взять экспоненту от Ивана. Неудивительно, что информикс ругаецца.

Exp - зарезервированное слово.
...
Рейтинг: 0 / 0
UDR на C
    #35753444
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выбегалло,
Сглупил.

Вот что дает лог
Log20:12:00 Loading Module <c:\program>
20:12:00 (2): The C Language Module <c:\program> can't load
reason: Cannot access library file
20:12:00 (-1): ERROR: Loading Module <c:\program>
20:13:17 Fuzzy Checkpoint Completed: duration was 0 seconds, 5 buffers not flushed.
20:13:17 Checkpoint loguniq 7, logpos 0x8d3ec, timestamp: 0x16b4f

20:13:17 Maximum server connections 5
...
Рейтинг: 0 / 0
UDR на C
    #35753449
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эти сообщения появляются при вызове в запросе.
Когда создаю CreateFunc ни каких логов не пишется.
...
Рейтинг: 0 / 0
UDR на C
    #35753458
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все. Всем спасибо, разобрался - все работает. Путь надо было прописывать как C:\PROGRA~1\ и т.д.
Думаю тогда потом ход действий напишу, чтобы если у кого вопросы появится было бы что.
...
Рейтинг: 0 / 0
UDR на C
    #35761714
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с такой проблемой. Написаная УДР после пары удачных тестовых запусков в ServerStudio появляется сообщение Executing, все немного подвисает, и выскакивает окно ошибки Error (-9791): User Defined Routine (adll) execution failed.

Log15:30:48 Assert Failed: NT Exception!
15:30:48 See Also: C:\Informix\tmp\af.f557c4e
15:30:48 Assert Failed: Exception Caught. Type: MT_EX_OS, Context: mem
15:30:48 IBM Informix Dynamic Server Version 10.00.TC5
15:30:48 Who: Session(2693, informix@ras-app-2, 11096, 00000000)
Thread(2925, sqlexec, 0, 1)
File: mtex.c Line: 966
15:30:48 Action: Please notify IBM Informix Technical Support.
15:30:48 stack trace for pid 4884 written to C:\Informix\tmp\af.f557c4e
15:30:48 See Also: C:\Informix\tmp\af.f557c4e
15:30:53 Exception Caught. Type: MT_EX_OS, Context: mem
15:30:53 (-9791): ERROR: Routine execution trap -- procname=<adll> procid=874
reason: mem

mem - Это memory fault. Но вот хочется понять какого плана эти меморифолты.
Кстати старые версии, которые не выдавали ошибок, теперь так же стали ее выдавать.
...
Рейтинг: 0 / 0
UDR на C
    #35764245
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeКстати старые версии, которые не выдавали ошибок, теперь так же стали ее выдавать.
Из прилепленного топика "Как правильно задать вопрос на форуме Informix" (очень кратко):

6. Если "раньше работало, а теперь нет" - то постарайтесь вспомнить ВСЕ изменения в конфигурации за прошедшее время (не только в onconfig, но и в локальной сети, настройках клиента, сервера приложений, патчи, сервис паки, регламентные работы по БД и т.п.)
...
Рейтинг: 0 / 0
UDR на C
    #35825097
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернулся. =)

Новый вопрос: Новый УДР mi_integer itdate(mi_integer it, mi_date ddate)
Вызывается например EXECUTE FUNCTION itdate(4,'01/30/2009') получаю ошибку Error (-7420): Argument (itdate(): mi_value: arg 3) is invalid.
И собственно не могу понять в чем ошибка.
...
Рейтинг: 0 / 0
UDR на C
    #35825313
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы увидеть
- предложение CREATE FUNCTION ...
- начало функции на С
- установку переменных DBDATE, GL_DATE
...
Рейтинг: 0 / 0
UDR на C
    #35826222
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IkirХотелось бы увидеть
- предложение CREATE FUNCTION ...

Код: plaintext
1.
2.
3.
4.
DROP FUNCTION midt;
CREATE FUNCTION  midt(INTEGER,DATE) RETURNING INTEGER;
EXTERNAL NAME "C:\idata.dll(my_itdata)"
LANGUAGE C
END FUNCTION;

Ikir
- начало функции на С
Функция сейчас в принципе простоя

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
extern "C" IDATA_API mi_integer *my_itdata (mi_integer *it_num, mi_date *myddata)
{
	MI_CONNECTION *conn;
	mi_string *stmnt;

	conn = mi_open(NULL,NULL,NULL);

	if(conn==NULL)
	{
		mi_db_error_raise(conn, MI_EXCEPTION, "function: cannot establish connection", NULL);
	}


	stmnt="select * from tst_4_20090130";

	send_statement(conn, stmnt);

	mi_close(conn);

	return  0 ;
}

Ikir
- установку переменных DBDATE, GL_DATE
Не знаю, что это за переменные. Сегодня попробую найти. Но думаю вы укажите на мою ошибку?
...
Рейтинг: 0 / 0
UDR на C
    #35826300
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, разобрался в чем проблема.
Такой вопрос - может ли сработать такая вещь select * from idt(4,"01/30/2009") ?
idt будет формировать название таблицы.
...
Рейтинг: 0 / 0
UDR на C
    #35826319
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoeТак, разобрался в чем проблема.
Такой вопрос - может ли сработать такая вещь select * from idt(4,"01/30/2009") ?
idt будет формировать название таблицы.
http://www.sql.ru/faq/faq_topic.aspx?fid=535

Боже, таблицы на каждый день. Мама, роди меня обратно.
...
Рейтинг: 0 / 0
UDR на C
    #35827284
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И всётаки странный подход к использованию UDR на С
...
Рейтинг: 0 / 0
UDR на C
    #35827532
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис
http://www.sql.ru/faq/faq_topic.aspx?fid=535
Спасибо. И как же только это пропустил.

Журавлев Денис
Боже, таблицы на каждый день. Мама, роди меня обратно.
Ну, это как бы не ко мне.

Ikir
И всётаки странный подход к использованию UDR на С
И это снова не ко мне - дали задание: ~ попробуй сделать динамическую выборку через удр
...
Рейтинг: 0 / 0
UDR на C
    #35827645
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKoe
И это снова не ко мне - дали задание: ~ попробуй сделать динамическую выборку через удрНадо забить шуруп, сказали попробуй микроскопом.
...
Рейтинг: 0 / 0
UDR на C
    #35836438
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, а что подразумевается под формирование на клиентской стороне?
...
Рейтинг: 0 / 0
UDR на C
    #35836454
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. извините, не что вообще под этим понимается, а как собственно оно реализуется на клиенте?
...
Рейтинг: 0 / 0
UDR на C
    #35837122
AlexKoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так понимаю, что для v10 какого то нормального решения нету?
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Informix [игнор отключен] [закрыт для гостей] / UDR на C
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]