Ver Mensaje Individual
  #8  
Antiguo 11-04-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Reputación: 20
fly Va por buen camino
Un gallifante para Delfino eso nos pasa por no leer... muy bien maestro...

Aunque ya no viene al caso te cuento lo de las UDF.

Es algo parecido a lo que dice Crandel pero más cómodo para ser usado en todas las aplicaciones:

1º.- Creas una libreria en delphi (en este caso intbase_star.dll)

Código:
library intbase_star;
 
{Esta libreria ha sido pensada para el trabajo con Interbase
para cubrir las carencias de funciones no implementadas directamente
en el motor de base de datos Interbase de Borland
 
las funciones deben crearse con paso de parametros cdecl
los parametros word o integer deben pasarse por referencia y los devuelve por valor
los parametros de tipo string dben pasarse por valor y se devuelven por valor
En interbase el tipo string debe ser pasado a Pchar con Cstring y en
las funciones de la DLL deben ser tratados como Pchar
}
 
uses
SysUtils,
Classes;
var buffer:  Pchar;
 
 
function redondeo(var dato:double;var digitos:integer):double; cdecl;
var dato_tratado:double;
	aux,contador:integer;
Begin
aux:=1;
for contador:=1 to digitos do aux:=aux*10;
dato_tratado:=dato;
dato_tratado:=dato_tratado*aux;
dato_tratado:=round(dato_tratado);
dato_tratado:=dato_tratado/aux;
redondeo:=dato_tratado
end;
 
 
function codext(txt: string; var dato: integer; var year:integer;var longdato:integer):Pchar;cdecl;
var cadena_S:string;
	contador:integer;
	Cadena_P:pchar;
	periodo : string;
	letra : char;
Begin
periodo:=IntToStr(year);
delete(periodo,1,2);
letra:=txt[1];
Cadena_P:=buffer;
Cadena_S:=inttostr(dato);
for contador:=length(Cadena_S) to longdato-1 do Cadena_S:='0'+Cadena_S;
Cadena_S:=UPPERCASE(letra)+'/'+periodo+Cadena_S;
strpcopy(Cadena_P,Cadena_S);
result:=cadena_P;
end;
 
exports
redondeo;
exports
codext;
begin
buffer:=stralloc(50);
end.
2º.- Pones la DLL creada en la carpera UDF del firebird/Interbase

3.- En el SQL de creación de la DB añades al principio:
Código:
DECLARE EXTERNAL FUNCTION codext
CSTRING(1),INTEGER, INTEGER,INTEGER
RETURNS CSTRING(10) 
ENTRY_POINT "codext"
MODULE_NAME "INTBASE_star.DLL";
4.- Y ya está listo, puedes usar la función desde los triggers o desde delphi sin problemas.

Espero que este ejemplo te sirva para entenderlo, a mi me lo pasaron tal cual e hice las modificaciones necesarias para mi prog. (Fon gracias por el codigo)
Responder Con Cita