Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Проблемма с созданием UDF.   Найти похожие ветки 

 
|Denis| ©   (2005-01-05 11:53) [0]

Здравствуйте. Пытаюсь создать пользовательскую функцию. Вот содержание dll:

library my_lib1;
uses
 SysUtils,
 Classes;
{$R *.res}

function my_procent(seloe: integer; chast: integer): real48;
cdecl;
begin
result := chast*100/seloe ; //к примеру 1*100/2=50
end;

exports
my_procent;

begin
end.


Вот так объявляю её:

declare external function my_procent
smallint, smallint
returns float
entry_point "my_procent"
module_name "my_lib1.dll";


Таким запросом вызываю:

select my_procent (field1, field2) from table1


В итоге, к примеру, при следующих значениях:
Field1     Field2
4            2
10           3

Выдается столбец:
My_procent
2,90103422213275E-38
2,90103422213275E-38

Возникает закономерный вопрос: что не так?


 
|Denis| ©   (2005-01-05 12:58) [1]

Как вариант, не могли бы вы педоставить какую-нить свою UDF? Чтобы я попробовал разобраться сам.


 
Digitman ©   (2005-01-05 13:10) [2]

library my_lib1;
uses
SysUtils,
Classes;
{$R *.res}

function my_procent(var seloe, chast: SmallInt): Double; cdecl;
begin
result := chast*100/seloe;
end;

exports
my_procent;

begin
end.

declare external function my_procent
smallint, smallint
returns double
entry_point "my_procent"
module_name "my_lib1.dll";

select my_procent (field1, field2) from table1


 
|Denis| ©   (2005-01-05 14:30) [3]

Теперь при тех же данных выдает другие значения:
1.97626258336499У-323
4.94065645841247У-323

... не совсем то, что нужно (тип Double Precision, ибо просто Double вроде как не существует для IB).

В качестве эксперимента, попробовал изменить dll-ку следующим образом:

function my_procent(var seloe, chast: SmallInt): SmallInt; cdecl;
begin
result := chast + seloe;
end;

И соответственно:

declare external function my_procent
smallint, smallint
returns  smallint
entry_point "my_procent"
module_name "my_lib1.dll";


Теперь, при попытке выполнить запрос, происходит "...connection lost to database".

Возможно ошибка в самом принципе создания dll? Я выбираю dll wizard, пишу обозначенный код, компилю - вылазит сообщение:
"cannot debug project unless a host application is defined. Use Run|Parametrs... dialog box". dll-ка создавалась и меня это устраивало ))
Возможно что-то нужно указать в Run|Parametrs? Что?


 
|Denis| ©   (2005-01-05 20:24) [4]

Ни ужели никто никогда не писал пользовательских функций? Или вопрос настолько глуп, что не стоит на него отвечать?


 
Desdechado ©   (2005-01-05 21:04) [5]

declare external function my_procent
smallint, smallint
returns double precision by value
entry_point "my_procent"
module_name "my_lib1.dll";


 
|Denis| ©   (2005-01-05 21:34) [6]


> Desdechado ©   (05.01.05 21:04) [5]

Огромное спасибо.


 
DSKalugin ©   (2005-01-06 11:39) [7]

есть большая разница передавать переменные в процедуру по значению или по ссылке (c VAR)

если по значению надо писать в обявлении by value


 
|Denis| ©   (2005-01-06 22:04) [8]


> DSKalugin ©   (06.01.05 11:39) [7]
> есть большая разница передавать переменные в процедуру по
> значению или по ссылке (c VAR)
>
> если по значению надо писать в обявлении by value

Немного не понимаю.
Возможно вы имеете ввиду - возвращать переменные? Потому что, согласно структуре sql, объявляющего процедуру, ко входным параметрам by value не применим.
И при чем тут наличие или отсутсвие Var?

ЗЫ: Буду признателен, если поясните свой пост.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.047 c
1-1106642719
Aleksandr.
2005-01-25 11:45
2005.02.06
Как создать две разные настройки Делфи?


14-1106090491
thaddy
2005-01-19 02:21
2005.02.06
stackobjects translation problem!


1-1106157437
Петя
2005-01-19 20:57
2005.02.06
Нужна помощь по Delphi!!!


8-1098686371
asds
2004-10-25 10:39
2005.02.06
Преобразование изображения


4-1102999051
Stepan
2004-12-14 07:37
2005.02.06
Как заставить одну из форм висеть поверх всех окон Windows ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский