![Photo](http://delphiaccess.com/foros/uploads/profile/photo-12204.png?_r=0)
UDF para FIREBIRD en WINDOWS
#1
Posted 30 July 2010 - 06:45 PM
Esta vez recurro a ustedes ya que no he encontrado la solucion, lo extraño del caso es que esto ya lo habia realizado en proyectos ANTERIORES y con Bases de DATOS en Linux, de hecho en LINUX no existe el PROBLEMA, unicamente en WINDOWS.. debe ser algo que me falla en la declaracion de las FUNCIONES..
Bueno..
Necesito CREAR una UDF en FIREBIRD corriendo en WINDOWS.
Actualmente me marca el ERROR al INSTALAR una FUNCION
Invalid token.
invalid request BLR at offset 59.
function XSUMA1 is not defined.
module name or entrypoint could not be found.
Lo extraño del CASO es que la UDF la he probado haciendo su referencia y con un programa que estoy testeando pero no he encontrado el problema.. (ANEXO programa)..
Agradecere le puedan echar un OJO a ver que esta SUCEDIENDO..
He agregado funciones de FB_UTILS.dll , por ejemplo el ABS... lo declaro y si FUNCIONA..
la DLL la copia al directorio de ...firebird\udf
SALUDOS
#2
Posted 30 July 2010 - 07:03 PM
Salud OS
Attached Files
#3
Posted 30 July 2010 - 07:07 PM
un
SELECT xsuma(100,50) from rdb$database;
ahi es donde me da el ERROR mencionado..
Invalid token.
invalid request BLR at offset 59.
function xsuma1 is not defined.
module name or entrypoint could not be found.
El programita de ARRIBA lo hice para checar si realmente estaba bien la DLL, que al parecer si esta bien.. pero en
FIREBIRD no funciona por alguna razon que me tiene vuelto LOCO... en linux no tengo ninguna BRONCA solo en WINDOWS con la DLL.. y la verdad no se que sea..
#4
Posted 30 July 2010 - 07:08 PM
![:embarrassed:](http://delphiaccess.com/foros/public/style_emoticons/default/embarrassed.gif)
Con razón se me hizo raro jajajajaja
Salud OS
#5
Posted 30 July 2010 - 08:25 PM
ejemplo
DECLARE external FUNCTION XSUMA cstring(255) RETURNS cstring(255) free_it entry_point 'Xsuma' module_name 'TuDll';
#6
Posted 30 July 2010 - 09:11 PM
He generado en mi IBExpert lo siguiente
DECLARE EXTERNAL FUNCTION F_XSUMA1 INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'xsuma1' MODULE_NAME 'myudfs'
Ejecuto la sentencia
SELECT xsuma1(10,5) FROM rdb$database
Y me muestra el siguiente error
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
XSUMA1.
Salud OS
#7
Posted 30 July 2010 - 09:12 PM
DECLATE EXTERNAL FUNCTION XSUMA1 INTEGER,INTEGER RETURNS INTEGER ENTRY_POINT 'xsuma1' module_name 'myudfs';
DE HECHO en el ADJUNTO viene una muestra de la LIBRERIA y de un TESTEADOR de la DLL..
pero DECLARADA en FIREBIRD simplemente no FUNCIONA..
#8
Posted 30 July 2010 - 09:19 PM
DECLARE EXTERNAL FUNCTION "xsuma1" INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'xsuma1' MODULE_NAME 'myudfs'
Attached Files
#9
Posted 30 July 2010 - 09:23 PM
DECLARE EXTERNAL FUNCTION abs DOUBLE PRECISION RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_abs' MODULE_NAME 'ib_udf';
y la EJECUTO
SELECT abs(1000) FROM rdb$database
.......... CON ELLA SI FUNCIONA...
ENTONCES debo SUPONER que algo en la DLL no le permite reconocer el NOMBRE de las funciones contenidas.
#10
Posted 30 July 2010 - 09:30 PM
Attached Files
#11
Posted 30 July 2010 - 09:31 PM
![:)](http://delphiaccess.com/foros/public/style_emoticons/default/27.gif)
Salud OS
#12
Posted 30 July 2010 - 09:34 PM
Salud OS
Attached Files
#13
Posted 30 July 2010 - 09:34 PM
![:cheesy:](http://delphiaccess.com/foros/public/style_emoticons/default/cheesy.gif)
#14
Posted 30 July 2010 - 09:43 PM
Attached Files
#15
Posted 30 July 2010 - 09:45 PM
![:(](http://delphiaccess.com/foros/public/style_emoticons/default/10.gif)
#16
Posted 30 July 2010 - 10:05 PM
creo que es mas FACIL que alguien nos pasa una mini DLL que si FUCIONE en FIREBIRD P/WINDOWS..
Yo creo que eso es lo mejor
![:(](http://delphiaccess.com/foros/public/style_emoticons/default/10.gif)
Salud OS
#17
Posted 31 July 2010 - 02:33 PM
library myudfs; uses Unitudf in '..\unitudf.pas'; Function F_XSUMA1(nV1,nV2:Integer):Integer; export; begin F_XSuma1 := nV1 + nV2; end; exports F_XSUMA1; begin end.
#18
Posted 31 July 2010 - 02:37 PM
library myudfs; uses Unitudf in 'unitudf.pas'; exports F_XSUMA1, F_XSUMA2, F_XSUMA3, F_PORCENTAJE name 'PORCENTAJE', F_MASPORCENTAJE name 'MASPORCENTAJE', F_MENOSPORCENTAJE name 'MENOSPORCENTAJE', F_SINPORCENTAJE name 'SINPORCENTAJE', ATRAZO name 'ATRAZO', PENALIZACION name 'PENALIZACION', INTERES name 'INTERES', INTERES_A name 'INTERES_A', INTERES_M name 'INTERES_M'; begin end.
#19
Posted 31 July 2010 - 04:36 PM
Entonces DEBE o NO debe de IR... la clausula NAME...
Lo checo y te aviso...
GRACIAS.. CHAVOS...