UDF para FIREBIRD en WINDOWS
#1
Escrito 30 julio 2010 - 06:45
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
Escrito 30 julio 2010 - 07:03
Salud OS
Archivos adjuntos
#3
Escrito 30 julio 2010 - 07:07
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
Escrito 30 julio 2010 - 07:08
Con razón se me hizo raro jajajajaja
Salud OS
#5
Escrito 30 julio 2010 - 08:25
ejemplo
DECLARE external FUNCTION XSUMA cstring(255) RETURNS cstring(255) free_it entry_point 'Xsuma' module_name 'TuDll';
#6
Escrito 30 julio 2010 - 09:11
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
Escrito 30 julio 2010 - 09:12
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
Escrito 30 julio 2010 - 09:19
DECLARE EXTERNAL FUNCTION "xsuma1" INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'xsuma1' MODULE_NAME 'myudfs'
Archivos adjuntos
#9
Escrito 30 julio 2010 - 09:23
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
Escrito 30 julio 2010 - 09:30
Archivos adjuntos
#11
Escrito 30 julio 2010 - 09:31
Salud OS
#12
Escrito 30 julio 2010 - 09:34
Salud OS
Archivos adjuntos
#13
Escrito 30 julio 2010 - 09:34
#14
Escrito 30 julio 2010 - 09:43
Archivos adjuntos
#15
Escrito 30 julio 2010 - 09:45
#16
Escrito 30 julio 2010 - 10:05
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
Salud OS
#17
Escrito 31 julio 2010 - 02:33
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
Escrito 31 julio 2010 - 02:37
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
Escrito 31 julio 2010 - 04:36
Entonces DEBE o NO debe de IR... la clausula NAME...
Lo checo y te aviso...
GRACIAS.. CHAVOS...