Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-07-2007
raverri raverri is offline
Miembro
 
Registrado: abr 2007
Posts: 14
Poder: 0
raverri Va por buen camino
Funcion Delphi en SQL

Cordial saludo, Quisiera saber como utilizar una función personalizada hecha en Delphi dentro de una instrucción SQL de un componente TQuery.

Por ejemplo algo como:

"SELECT FuncionPropia(Campo) FROM..."


Donde FuncionPropia es una función construida en Delphi

function FuncionPropia(Texto:String) : String:
begin
...
end;


Muchas Gracias por la ayuda.
Responder Con Cita
  #2  
Antiguo 16-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Hasta donde tengo entendido, no creo que puedas utilizar una función de delphi dentro de una función de sql, ya que estas se ejecutan en lugares distintos, es decir, la función de delphi se ejecutará el la computadora donde se ejecute tu programa, y la instrucción SQL se ejecutará en el servidor.

Así que veo muy difícil que puedas combinar una cosa con la otra.

Tal vez sería mejor que nos explicaras un poquito que es lo que haces con la función en delphi para poderte ofrecer otras opciones.
__________________


Última edición por ContraVeneno fecha: 16-07-2007 a las 17:43:54.
Responder Con Cita
  #3  
Antiguo 16-07-2007
raverri raverri is offline
Miembro
 
Registrado: abr 2007
Posts: 14
Poder: 0
raverri Va por buen camino
Función Propia en SQL - Delphi

Gracias por responder.

Basicamente lo que necesito es que en un Tquery me devuelva un campo (campo origen) con una longitud total de 5 caracteres (rellenando con ceros a la derecha).

Por ejemplo:

Campo Origen Valor Requerido
1 10000
123 12300
1234 12340
12345 12345

En VBA Access puedo hacer una función propia en un módulo e invocarla en el SQL, pero no se como hacerlo dentro de una consulta SQL en Delphi.

Espero haberme hecho entender.


Muchas Gracias.
Responder Con Cita
  #4  
Antiguo 16-07-2007
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
De todas maneras, si estas usando FireBird o InterBase puedes crear una UDF o usar una existente (Todo depende de la función que necesites). En muchos casos las funciones que necesitamos ya vienen en las UDFs por defecto.
__________________
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
  #5  
Antiguo 16-07-2007
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 raverri
Gra
Basicamente lo que necesito es que en un Tquery me devuelva un campo (campo origen) con una longitud total de 5 caracteres (rellenando con ceros a la derecha).
Lo dicho, en el archivo ib_udf se describe una función llamada lpad y otra rpad que seguramente te servirán. Pero aun no nos dices ¿Que Motor usas?
__________________
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
  #6  
Antiguo 16-07-2007
raverri raverri is offline
Miembro
 
Registrado: abr 2007
Posts: 14
Poder: 0
raverri Va por buen camino
Funcion Propia en Access SQL Delphi

Cabe anotar que la base de datos que estoy utilizando es Microsoft Access 2000.

Dentro de las funciones de SQL para Access no hay una función rellenar, completar o algo parecido.

Se que es algo muy sencillo pero no se como hacerlo.


Gracias nuevamente.
Responder Con Cita
  #7  
Antiguo 16-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.288
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Algunos servidores de SQL tienen métodos para programar funciones externas (UDF's - User defined Function) normalmente a través de DLL's.
¿Qué Servidor del SQL estás utilizando?

EDITO: Veo que ya se me adelantaron...
Que yo sepa Access no posee esta característica.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 16-07-2007 a las 17:34:21.
Responder Con Cita
  #8  
Antiguo 16-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]
var CampoConCeros: string;
...
with TuQuery do begin
 If active then close;
 SQL.Clear;
 SQL.Add('Select Campo');
 SQL.Add('From Tabla');
 SQL.Add('Where campo = 1');
 Open;
 if Not IsEmpty then begin //sí se encontró el campo
  CampoConCeros := Trim(FieldByName('Campo').AsString);
  While Length(CampoConCeros) < 5 do begin
   CampoConCeros := CampoConCeros+'0';
  end; //while
 end; //if not isempty
end; //with
__________________

Responder Con Cita
  #9  
Antiguo 16-07-2007
raverri raverri is offline
Miembro
 
Registrado: abr 2007
Posts: 14
Poder: 0
raverri Va por buen camino
Funcion Propia Access SQL

Gracias "Contra Veneno". Pero necesito aplicar la función a todo el recordset (aprox. 180000 registros) para exportarlo como un archivo de Texto.

He contemplado hacerlo uno a uno pero antes quisiera averiguar si lo puedo hacer todo dentro de un TQuery (SQL) en un solo paso.


Gracias otra vez.
Responder Con Cita
  #10  
Antiguo 16-07-2007
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
Como no se de access, pues modificare un poquito la función de Contraveneno:
Código Delphi [-]
 
var
  CampoConCeros: string;
begin
  with TuQuery do
  begin
    If active then
      close;
    SQL.Clear;
    SQL.Add('Select Campo');
    SQL.Add('From Tabla');
    SQL.Add('Where campo = 1');
    Open;
    if Not IsEmpty then begin //sí se encontró el campo
      CampoConCeros := StringOfChar('0', 5 - Length(FieldByName('Campo').AsString))+FieldByName('Campo').AsString;
  end; //with
end;
__________________
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
  #11  
Antiguo 16-07-2007
raverri raverri is offline
Miembro
 
Registrado: abr 2007
Posts: 14
Poder: 0
raverri Va por buen camino
Ya lo he logrado.


Add('SELECT LEFT(campo + '00000',5)');


Le agrego 5 ceros al final del campo pero tomo solo los cinco primeros caracteres.

Muchas Gracias a todos por la ayuda.
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
Existe la funcion EVAL en Delphi darkone2k3 Varios 14 27-09-2013 21:38:19
función split en delphi sergionr Varios 9 04-04-2013 17:47:03
Traduccion de función VB a delphi !!! Jan_polero API de Windows 2 07-02-2005 12:32:54
Funcion Nz en delphi?? NuncaMas Varios 1 24-12-2003 14:51:31
funcion delphi Ramon Varios 1 13-05-2003 12:45:03


La franja horaria es GMT +2. Ahora son las 15:08:37.


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