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

Вниз

Караул! Помогите с UDF!   Найти похожие ветки 

 
Dimedrol   (2002-10-01 16:18) [0]

Коллеги, ну что-то никак не получается...
Вроде писал раньше, но исходники похерил ;-)
В общем пишу на Kylix и Линухе UDF for Firebird.
Хочу чтобы при СЕЛЕКТе передавать ей 2 поля, и признак пустого
(типа, в нем строчка "None") и если поле НЕ пустое - без признака,
то показывать его, нет - другое. В принципе - простота!
Вот :

library reklamaf1;
uses SysUtils;
const libcmodulename = "libc.so.6";
function malloc(Size: LongWord): Pointer; cdecl; external libcmodulename name "malloc";

function OneEmpty(Val1,Val2,EmptyFlag:PChar): PChar; //тут и CDECL пробовал - не помогает
var v1,v2,emp,sBuf:string;
begin
//default val
sBuf:="default";
v1:=Trim(string(Val1));
v2:=Trim(string(Val1));
emp:=Trim(string(EmptyFlag));

if v2=emp then sBuf:=v1;
if v1=emp then sBuf:=v2;

Result := malloc(length(sBuf));
StrCopy(Result, pchar(sBuf));
end;

exports OneEmpty;
begin
end.


Описываю -

DECLARE EXTERNAL FUNCTION ONEEMPTY
CSTRING (384), //Пробовал и 255 - не помогает !
CSTRING (384),
CSTRING (8)
RETURNS CSTRING (384) FREE_IT
ENTRY_POINT "OneEmpty" MODULE_NAME "libreklamaf1";


Вызываю :


select OneEmpty("None", "wwwwwwwwwwww", "None") from rdb$database;

Так он мне то только 1-е значение возвращал,
то ща вообще "default" вернул...

Что я не так делаю ?
Помогите! ГорЮ !


 
Desdechado   (2002-10-01 17:49) [1]

v2:=Trim(string( Val2));
emp:=Trim(string(EmptyFlag));

if v2=emp then sBuf:=v1;
if v1=emp then sBuf:=v2;

Result := malloc(length(sBuf) +1);
StrCopy(Result, pchar(sBuf));
result[ Length(sBuf) + 1 ] := 0;

а CDECL поставь все равно


 
Dimedrol   (2002-10-01 18:47) [2]

Теперь вот что -

function OneEmpty(Val1,Val2,EmptyFlag:PChar): PChar; cdecl;
var v1,v2,emp,sBuf:string;
begin
//default val
sBuf:="default";

v1:=Trim(string(Val1));
v2:=Trim(string(Val2));
emp:=Trim(string(EmptyFlag));

if v2=emp then sBuf:=v1;
if v1=emp then sBuf:=v2;

Result := malloc(length(sBuf)+1);
StrCopy(Result, pchar(sBuf));
result[ Length(sBuf) + 1 ] := #0;
end;


Вызываю -
select OneEmpty("aaaaa", "bbbbbbb", "None") from rdb$database;
Result = "default"
Все верно...

Вызываю -
select OneEmpty("aaaaa", "bbbbbbb", "None") from rdb$database;
Result = "default"
Все верно...

Вызываю -
select OneEmpty("None", "bbbbb", "None") from rdb$database;
Result = "default"
ПОЧЕМУ ?????


Вызываю -
select OneEmpty("aaaaa", "None", "None") from rdb$database;
Result = "default"
ПОЧЕМУ ?????!!!!!!!!!!!!!!!!!!

Вызываю -
select OneEmpty("None", "None", "None") from rdb$database;
Result = "None" !!!!!!!!!!!1
Ничего не понимаю !!!!

8888888-(




 
Desdechado   (2002-10-01 19:28) [3]

перестартани FB и подсунь ему новую .SO
а то работает, видимо, старая


 
Dimedrol   (2002-10-01 23:30) [4]

У меня - Classic Server. Он висит на "сервисе", то бишь нет
подключений - нет и процессов.
Постоянно в памяти он не сидит.

А на счет SO... Да я ее физически убиваю кадый раз
и переписыываю на ее место новую...


 
Dimedrol   (2002-10-02 09:21) [5]

Коллеги, у кого-нить вообще примеры создания подобных
УДФ есть ?
Да еще желательно под Линух...

Поделитесь плиз...


 
Desdechado   (2002-10-02 10:18) [6]

возьми FreeUDFLib - там и под win, и под linux есть
см. www.ibase.ru



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

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

Наверх




Память: 0.46 MB
Время: 0.007 c
8-78542
vic_774N
2002-06-25 11:33
2002.10.24
ключ к MMTools


3-78312
Explorer
2002-10-02 14:55
2002.10.24
Выгрузка данных MSSQL в файл *.txt


3-78248
Dorosh
2002-10-02 12:26
2002.10.24
Как добавить поле в таблицу?


3-78245
explorer
2002-10-02 12:24
2002.10.24
FastReport и Query


6-78552
star
2002-08-21 22:38
2002.10.24
Вызов IdPOP3 из потока





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