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
  #21  
Antiguo 14-01-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
mmm, entiendo, aunque sería muy agradable tener esa caracteristica, tampoco es algo crucial, pues con un sencillo join se podria hacer lo mismo y en un caso muy complejo, pues con una consulta anidada que haga llamado a un "Stored Procedure" o una UDF si es que es necesaria (Según sea el caso).

En cuanto a lo del tipo de campo a partir de uno de una tabla y el link que te pasé, ¿Si era a lo que te referias?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 14-01-2009 a las 20:32:44.
Responder Con Cita
  #22  
Antiguo 14-01-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Con Firebird

Cita:
Empezado por ASAPLTDA Ver Mensaje
En la base de datos
Código SQL [-]Declare function get_nombre cliente (in nocliente %clientes.nocliente, out( nombre_cliente %clientes.nombrecliente) as begin select nombrecliente from clientes into :nombrecliente); end


en delphi por Ejemplo
select nopedido,codigocliente,get_nombre_cliente(codigocliente), from pedidos_header

Permite desplegar el nombre del cliente facilmente
Código SQL [-]
create procedure get_nombre_cliente (nocliente dominio_cliente)
returns (nombrecliente dominio_nombre_cliente)
as
begin
  select nombrecliente
  from clientes
  into :nombrecliente;
  suspend;
end

en delphi

Código Delphi [-]
select nopedido,codigocliente,get_nombre_cliente(codigocliente), from pedidos_header
Responder Con Cita
  #23  
Antiguo 14-01-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Lo que sucede Kipow es que en Firebird no puedes tratar un procedimiento almacenado como si fuera una función... que es en "otras palabras" lo que dice ASAPLTDA, tu no puedes hacer:

Código SQL [-]
select nopedido,codigocliente,get_nombre_cliente(codigocliente), from pedidos_header

Pues tendrias que hacerlo asi, para lograr el "efecto":

Código SQL [-]
select nopedido,codigocliente, (select nombrecliente from get_nombre_cliente(codigocliente)) NOMBRE_CLIENTE, from 
pedidos_header

Por lo que para este sencillo caso, sería lo mismo o aún mejor hacer...

Código SQL [-]
select h.nopedido, h.codigocliente, c.nombrecliente NOMBRE_CLIENTE, 
from pedidos_header h, clientes c
where c.codigocliente=h.codigocliente
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 14-01-2009 a las 21:07:25.
Responder Con Cita
  #24  
Antiguo 14-01-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Perdon mi error jeje, no lo probe antes.
Responder Con Cita
  #25  
Antiguo 14-01-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Kipow Ver Mensaje
Perdon mi error jeje, no lo probe antes.
Cualquiera puede confundirse, pues el asunto es bastante parecido.
__________________
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
  #26  
Antiguo 23-01-2009
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Join de Tablas

Por favor disculpen la parrafos en mayuscula

Por lo que para este sencillo caso, sería lo mismo o aún mejor hacer...

Código SQL [-]
select h.nopedido, h.codigocliente, c.nombrecliente NOMBRE_CLIENTE, 
from pedidos_header h, clientes c
where c.codigocliente=h.codigocliente
[/quote]

Es cierto que el join de tablas es bueno, pero en algunos casos tienen un limite por ejemplo en la busqueda de valores dependientes de otras tablas o tablas con muchas relaciones externas por ejemplo un maestro de clientes facilmente podria tener 5 a 10 relaciones (Ojo Se que se puede crear con una vista y luego reutilizar la vista)
por Ejemplo asumamos que con el prefijo del telefono puedo encontrar el estado(State) del cliente
Código SQL [-]
CREATE TABLE CLIENTES
 CLIENTE CLIENTE ,
 PREFIJO_TELEFONO,
 CONTINENTE CONTINENTE
 PAIS PAIS
 CIUDAD CIUDAD
CREATE TABLE PAISES
PAIS PAIS
PAIS_NOMBRE
Código SQL [-]
 CREATE TABLE CIUDADES
 CIUDAD CIUDAD
 CIUDAD_NOMBRE
CREATE TABLE EMPLEADOS
EMPLEADO EMPLEADO
PAIS PAIS
CIUDAD CIUDAD


SELECT CLIENTE, PAIS_NOMBRE, CIUDAD_NOMBRE FROM CLIENTES C
LEFT OUTER JOIN PAISES P ON C.PAIS= P.PAIS
LEFT OUTER JOIN CIUDAD X ON X.CIUDAD= C.CIUDAD

y asi podemos complicar un join bastante, pero si hacemos funciones que en el manual dice que son de resultado tabla(VARIAS CAMPOS) PODEMOS HACER LAGO PARECIDO A ESTO OJO SIN PROBAR HE LEIDO EL MANUAL SOLAMENTE
Código SQL [-]
CREATE FUNCTION UBIC GEOGRAFICA(P_PAIS, P_CIUDAD)
RETURNA TABLA
SELECT PAISNOMBRE FROM PAISES INTO O_PAIS_NOMBRE;
SELECT PAISNOMBRE FROM PAISES INTO O_CIUDAD_NOMBRE;
RETURN PAISNOMBRE, CIUDAD_NOMBRE

LA INTRUCCION ANTERIOR QUEDARIA COMO ESTO
Código SQL [-]
 SELECT CLIENTE, UBIC GEOGRAFICA(PAIS,CIUDAD) FROM CLIENTES C

usando la funcion para el maestro de empleados quedaria
Código SQL [-]
 SELECT EMPLEADO, UBIC GEOGRAFICA(PAIS,CIUDAD) FROM EMPLEADOS C
y aqui iniciamos a tener el un mayor poder y ademas reutilizando la mismas funcion, esto msi lo he probado en DB2 del sistema as400 y funciona

Si todo esto es correcto abre nuevas alternativas a la programacion via SQL, esto posiblmente lo tendra firebird en la version 3 pero falta al menos 1 año para poder usarlo

Última edición por ASAPLTDA fecha: 25-01-2009 a las 16:56:06.
Responder Con Cita
  #27  
Antiguo 23-01-2009
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
Cita:
Si todo esto es correcto abre nuevas alternativas a la programacion via SQL, esto posiblmente lo tendra firebird en la version 3 pero falta al menos 1 año para poder usarlo
ASAPLTDA Pues te comento que el manejo de funciones en Firebird no es nada nuevo, simplemente que el manejo de las mismas no es al que estamos acostumbrados en SQL Server, como nos mostró Jhonny en al caso de un procedimiento almacenado.
__________________
mas confundido que Garavito el día del Niño.
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
Copiar BD MySQL entre ordenadores Ezecool MySQL 8 23-01-2008 09:08:47
Interacción entre Pervasive y MySQL lucero_chivas C++ Builder 0 12-04-2007 20:38:29
Diferencia entre firebird y firebird pdb aledieb Firebird e Interbase 2 19-11-2006 13:10:17
Diferencias entre Interbase y FireBird erickperez6 Firebird e Interbase 2 22-05-2006 21:14:38
consultas SQL entre delphi y MySQL docarrillo SQL 1 03-07-2003 02:31:22


La franja horaria es GMT +2. Ahora son las 03:06:51.


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