Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 11-04-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 22
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
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 16:58:31.


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