Ir al contenido


Foto

UDF para FIREBIRD en WINDOWS


  • Por favor identifícate para responder
18 respuestas en este tema

#1 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 06:45

SALUDOS.. a Todos..

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








  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 07:03

Hola amigo, pues a mi si me funciona, te adjunto la imagen de lo que hizo.

Salud OS

Archivos adjuntos


  • 0

#3 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 07:07

El problema no esta ahi...  esta cuando la DECLARO en FIREBIRD he intento EJECUTARLA con
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..


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 07:08

Ahhh  :embarrassed:

Con razón se me hizo raro jajajajaja

Salud OS
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 julio 2010 - 08:25

Corriste el scrpit declarando la UDF?

ejemplo



sql
  1. DECLARE external FUNCTION XSUMA
  2. cstring(255)
  3. RETURNS cstring(255) free_it
  4. entry_point 'Xsuma' module_name 'TuDll';


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:11

Hola

He generado en mi IBExpert lo siguiente



sql
  1. DECLARE EXTERNAL FUNCTION F_XSUMA1
  2.     INTEGER,
  3.     INTEGER
  4. RETURNS INTEGER BY VALUE
  5. ENTRY_POINT 'xsuma1' MODULE_NAME 'myudfs'



Ejecuto la sentencia



sql
  1. 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
  • 0

#7 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:12

Si SI LO CORRI



sql
  1. DECLATE EXTERNAL FUNCTION XSUMA1
  2.     INTEGER,INTEGER
  3.     RETURNS INTEGER
  4.     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..



  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:19

Asi lo hago pero no funciona tampoco.



sql
  1. DECLARE EXTERNAL FUNCTION "xsuma1"
  2.     INTEGER,
  3.     INTEGER
  4. RETURNS INTEGER BY VALUE
  5. ENTRY_POINT 'xsuma1' MODULE_NAME 'myudfs'

Archivos adjuntos


  • 0

#9 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:23

LO EXTRAÑO y QUE DESCARTA que SEA MI FIREBIRD es que si declaro una funcion de la libreria ib_UDF.dll



sql
  1. DECLARE EXTERNAL FUNCTION abs
  2. DOUBLE PRECISION
  3. RETURNS DOUBLE PRECISION BY VALUE
  4. ENTRY_POINT 'IB_UDF_abs' MODULE_NAME 'ib_udf';



y la EJECUTO



sql
  1. 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.


  • 0

#10 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:30

LO MISMO me INDICA a MI..

Archivos adjuntos


  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:31

Eso mismo pienso, la dll tiene algo que no le gusta a Frebird :)

Salud OS

  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:34

Tengo otra UDF que si me pide parámetro, es raro

Salud OS

Archivos adjuntos


  • 0

#13 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:34

SI Alguien tiene una mini UDF hecha en DELPHI y funcionando en FIREBIRD en WINDOWS que pueda sacarnos de la DUDA, ya que existencialmente la DLL funciona..  :cheesy:  JEJEJE me la bañe con eso de existencial.




  • 0

#14 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:43

DE HECHO AMI SI ME PIDE E INDICA PARAMETROS...

Archivos adjuntos


  • 0

#15 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 30 julio 2010 - 09:45

creo que es mas FACIL que alguien nos pasa una mini DLL que si FUCIONE en FIREBIRD P/WINDOWS..  :(
  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

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
  • 0

#17 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 31 julio 2010 - 02:33

A ver, el problema esta en la declaracion de la DLL, aparentemente Firebird tiene problemas con la clausula NAME, lo hice asi y funciono:



delphi
  1. library myudfs;
  2.  
  3. uses
  4.   Unitudf in '..\unitudf.pas';
  5.  
  6. Function F_XSUMA1(nV1,nV2:Integer):Integer; export;
  7. begin
  8.   F_XSuma1 := nV1 + nV2;
  9. end;
  10.  
  11.  
  12. exports F_XSUMA1;
  13.  
  14. begin
  15.  
  16. end.


  • 0

#18 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 31 julio 2010 - 02:37

Lo acabo de confirmar, el problema esta en la clausula NAME, así también funciona



delphi
  1. library myudfs;
  2.  
  3. uses
  4.   Unitudf in 'unitudf.pas';
  5.  
  6. exports
  7.  
  8.       F_XSUMA1,
  9.       F_XSUMA2,
  10.       F_XSUMA3,
  11.       F_PORCENTAJE name 'PORCENTAJE',
  12.       F_MASPORCENTAJE name 'MASPORCENTAJE',
  13.       F_MENOSPORCENTAJE name 'MENOSPORCENTAJE',
  14.       F_SINPORCENTAJE  name 'SINPORCENTAJE',
  15.       ATRAZO  name 'ATRAZO',
  16.       PENALIZACION name 'PENALIZACION',
  17.       INTERES name 'INTERES',
  18.       INTERES_A name 'INTERES_A',
  19.       INTERES_M name 'INTERES_M';
  20.  
  21. begin
  22.  
  23. end.


  • 0

#19 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 31 julio 2010 - 04:36

Gracias EDUARCOL..

Entonces DEBE o NO debe de IR... la clausula NAME...

Lo checo y te aviso...

GRACIAS..  CHAVOS...
  • 0




IP.Board spam blocked by CleanTalk.