Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2010
subzero subzero is offline
No confirmado
 
Registrado: ene 2004
Ubicación: Móntería - Córdoba - Colombia
Posts: 289
Poder: 0
subzero Va por buen camino
Question UDF Firebird

Hola foreros.

Tras la necesidad de generar ciertos calculos dentro de una consulta y por la cantidad de datos para dicha operación, me he puesto a realizar una dll simple desde delphi 2005 la cual incluye unicamente la función que se debe ejecutar a la cual recibe los parametros por valor, pués bien hasta aqui todo bien, vinculo la dll y hago el llamamiento de la función desde firebird (ver 2.1) y en m equipo funciona perfecto!....

El problema radica cuando la instalo en otro equipo con winxp... instalo firebird 2.1 y en la carpeta de UDF agrego la dll que he creado que funciona en mi maquina, genero la consulta y me muestra el siguiente error:

Cita:
Invalid Token
Invalid request BLR at offset 707.
Function MI_FUNCION is not defined.
Module name or entrypoint could not be found.
Alguien puede ayudarme a solucionar este problema.
Responder Con Cita
  #2  
Antiguo 09-03-2010
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Aún no declaras la función en la base de datos
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 09-03-2010
subzero subzero is offline
No confirmado
 
Registrado: ene 2004
Ubicación: Móntería - Córdoba - Colombia
Posts: 289
Poder: 0
subzero Va por buen camino
Creo que si la tengo declara es más ejecuto el siguiente script

Código SQL [-]
DECLARE EXTERNAL FUNCTION ECUACION
  DECIMAL(18, 4),
  DECIMAL(18, 4),
  DECIMAL(18, 4),
  DECIMAL(18, 4),
  DECIMAL(18, 4),
  DECIMAL(18, 4),
  DECIMAL(18, 4)
RETURNS DECIMAL(18, 4) BY VALUE
ENTRY_POINT 'ecuacion' MODULE_NAME 'MIS_UDFS';

Para más info anexo el codigo de la dll hecha en delphi:

Código Delphi [-]
library MIS_UDFS;

uses
  SysUtils,
  Classes;

function ecuacion(var cant, bonif, costo, desc, desc2, desc3, present : real) : Real;stdcall;
var dt1, dt2, dt3, costo_dts : real;
begin
  dt1 := 0; dt2  := 0; dt3  := 0; costo_dts  := 0;
  dt1       := Costo * (desc/100);
  costo_dts := Costo - dt1;
  dt2       := costo_dts * (desc2/100);
  costo_dts := costo_dts - dt2;
  dt3       := costo_dts * (desc3/100);
  costo_dts := costo_dts - dt3;
  costo_dts := (costo_dts * cant)/(cant + bonif);
  result := costo_dts / Present;
end;

exports ecuacion;

begin
end.
Responder Con Cita
  #4  
Antiguo 09-03-2010
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
las udf deben declararse en cada maquina que las vaya a usar, no estoy seguro, pero creo que la udf va vinculada al motor y no a la base de datos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 09-03-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
El mensaje de error es, como dice Jhonny, de que no está declarada. Pero está claro que si ejecutas ese script entonces debería estarlo. Así que no se me ocurre donde está el error. Si en un Servidor Firebird te funciona, en otro también debería hacerlo.

Yo te sugiero de que no te compliques la vida con UDF's (que siempre es un problema a la hora de distribuir la aplicación) y que utilices un procedimiento almacenado.

donde ahora tienes algo como :

select idventa, ..., ecuacion(cantidad, bonif, costo, ...)
from XXX

ahora puedes hacer :

select idventa, ..., (select RESULTADO from ECUACION(cantidad, bonif, costo, ...))
from XXX

Ya solo tienes que programar el procedimiento almacenado ECUACION para que haga el mismo cálculo que tu Dll.

NOTA: no te olvides poner un SUSPEND; al final del procedimiento almacenado. Ya que el resultado tiene que devolverse como un Dataset para que sea leído en la subconsulta donde se va a utilizar.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 09-03-2010 a las 19:49:19.
Responder Con Cita
  #6  
Antiguo 09-03-2010
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por guillotmarc Ver Mensaje
El mensaje de error es, como dice Jhonny, de que no está declarada. Pero está claro que si ejecutas ese script entonces debería estarlo. Así que no se me ocurre donde está el error. Si en un Servidor Firebird te funciona, en otro también debería hacerlo.
En ese caso, a mi se me acurre que si dicho Script esta siendo ejecutado con IBExpert, FlameRobin o similares... quizá lo estas ejecutando pero se te haya olvidado hacer el commit... bueno, es lo que se me ocurre de momento :S.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Firebird 1.5.4 funciona en Win Vista pero Firebird 2.0.1 NO !!! Hagen Firebird e Interbase 5 19-05-2007 21:17:54
Firebird 1.5.3 Error:No puede ejecutarse Firebird Guardian xq ya hay una instancia Delphius Firebird e Interbase 5 26-01-2007 10:19:20
alguien ha utilizado Firebird DDX provider? (conectarse con db en firebird!) JuanErasmo .NET 1 04-11-2006 16:17:12
Firebird : Llamado para probadores de Firebird 2.0 JOSEPE Firebird e Interbase 0 12-03-2005 20:33:18
Problemas Firebird Super Server 1.5 con RFunc Firebird v 1.0 Prophoenix Firebird e Interbase 1 09-03-2004 11:40:48


La franja horaria es GMT +2. Ahora son las 05:23:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi