Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 20
xander Va por buen camino
En el IBExpert te pones sobre el arbolito en le nodo de "Procedures" ahi das boton derecho y "New Procedure" y te crea el esqueleto para hacer un procedimiento nuevo...

Revisa los capitulos de SQL e Interbase de la cara oculta de marteens, ahi te explica con muy buenos ejemplos como usar Procedimientos almacenados y Triggers... definitivamente es el mejor libro que puedes leer al respecto.
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #2  
Antiguo 06-06-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 20
xander Va por buen camino
En general un Procedimiento almacenado se ve, como algo como esto:

Código SQL [-]
CREATE PROCEDURE CERTIFICADODEUNIDAD (
    UNIDAD INTEGER,
    MES INTEGER,
    ANHO INTEGER)
RETURNS (
    INDRAIZ INTEGER,
    INDICADOR VARCHAR(200),
    RESULTADO VARCHAR(1000),
    LEYENDA VARCHAR(200),
    META VARCHAR(100),
    DIMENSION VARCHAR(200))
AS
DECLARE VARIABLE INDID INTEGER;
DECLARE VARIABLE VMES VARCHAR(15);
DECLARE VARIABLE VMUESTRA INTEGER;
DECLARE VARIABLE VTIPO INTEGER;
DECLARE VARIABLE VFILTRO VARCHAR(200);
DECLARE VARIABLE VLEYENDA VARCHAR(200);
BEGIN
   FOR SELECT IND_ID, IND_NOMBRE, DIM_NOMBRE, IND_TEXTOTITULO
    FROM EST_INIDICADOR
    LEFT JOIN EST_DIMENSION ON (IND_DIMENSION = DIM_ID)
    LEFT JOIN EST_SECUENCIA ON (SEC_INDICADOR = IND_ID)
    WHERE SEC_ANTECESOR = 0
    ORDER BY DIM_NOMBRE, SEC_ORDEN ASC
    INTO :INDRAIZ, :INDICADOR, IMENSION, :LEYENDA DO
    BEGIN
      /*CALCULAMOS PARA EL INDICADOR RAIZ */
      SELECT FIRST 1 MET_VALOR FROM EST_METAS
      WHERE MET_INDICADOR = :INDRAIZ
      ORDER BY MET_FECHAALTA DESC
      INTO :META;
      VFILTRO = 'AND (ENC_UNIDADMEDICA = ' || CAST( UNIDAD AS VARCHAR (10)) ||')';
      EXECUTE PROCEDURE GRAFICA(:INDICADOR, :MES, :ANHO, VFILTRO ,0, 0)
      RETURNING_VALUES :VMES, :RESULTADO, :VMUESTRA, :VTIPO;
      SUSPEND;

      FOR SELECT IND_ID, IND_NOMBRE
       FROM EST_INIDICADOR
       LEFT JOIN EST_SECUENCIA ON (SEC_INDICADOR = IND_ID)
       WHERE SEC_ANTECESOR = :INDRAIZ
       ORDER BY SEC_ORDEN ASC
       INTO :INDID, :INDICADOR DO
       BEGIN
         /*Y CALCULAMOS PARA LOS SUB-INDICADORES */
         SELECT FIRST 1 MET_VALOR FROM EST_METAS
         WHERE MET_INDICADOR = :INDID
         ORDER BY MET_FECHAALTA DESC
         INTO :META;
         VFILTRO ='AND (ENC_UNIDADMEDICA = ' || CAST( UNIDAD AS VARCHAR (10)) ||')';
         EXECUTE PROCEDURE GRAFICA(:INDICADOR, :MES, :ANHO, VFILTRO ,0, 0)
         RETURNING_VALUES :VMES, :RESULTADO, :VMUESTRA, :VTIPO;
         INDICADOR =  '             '|| :INDICADOR;
         SUSPEND;
       END
    END
END^

Es como un pequeño programa que ejecuta sentencias SQL... la ventaja es que se ejecuta dentro de la base de datos así que los datos no viajan del servidor al cliente para efectuarles el tratamiento... sino que se tratan en el servidor y se envía solo los resultados (en el caso que se tengan que devolver resultados).
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #3  
Antiguo 06-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Gracias Xander, lo voy a revisar.
Saludos
Responder Con Cita
  #4  
Antiguo 07-06-2007
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
El enlace a 'La Cara Oculta de Delphi' no funciona porque parece que a Ian se le ha caducado el dominio y no se ha dado cuenta. Como es un libro gratuito no creo que ponga ningún impedimento si lo ponemos para descargar en clubdelphi.
Si algún moderador da permiso, lo podemos poner.
Responder Con Cita
  #5  
Antiguo 07-06-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 26
vtdeleon Va por buen camino
Para curarnos en salud, le he enviado un correo a Ian sobre su dominio.

Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #6  
Antiguo 07-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Empiezo con el programa, y muchos problemas de sql.
Para empezar, estoy conectado con los componentes ADO por odbc.
Consulta 1:
Código SQL [-]
 QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar = True';
Graficar es un campo boolean, por eso esta el true, la base de datos firebird lo cambia por un campo varchar y lo cambia a T.
Pregunta:
Como hago esta sentencia en delphi con ese tipo de campo (varchar).

Consulta 2:
Código SQL [-]
SELECT OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion, OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
FROM (Clientes RIGHT JOIN OrdenProd ON Clientes.CodCliente = OrdenProd.CodCliente) LEFT JOIN (OrdenProdItem LEFT JOIN Estaciones ON OrdenProdItem.Estacion = Estaciones.EstacionID) ON OrdenProd.CodOrden = OrdenProdItem.CodOrden
GROUP BY OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
 IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]), OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
ORDER BY OrdenProd.CodOrden DESC;
Bueno aqui se complica mas la cosa.
1-Firebird no hacepta ( [] corchetes )., se cambian a no se necesitan?
2-Firebird no acepta ( IIF Is Null ), Con que se cambian ?

Consulta 3:
Código Delphi [-]
AQItems.SQL.Text:=
       'SELECT OrdenProdItem.CodOrdenItem AS Línea, OrdenProdItem.CodParte AS Código, '+
       'Articulos.Descripcion AS Descripción, Articulos.Categoria AS Categoría, Articulos.SubCategoria AS [Sub Categoría], OrdenProdItem.NumSerie AS [# Pieza],
      IIf([EnProceso],"SI","NO") AS [En Proceso?] '+
       'FROM OrdenProdItem, Articulos, Estaciones '+
       'WHERE (((OrdenProdItem.CodOrden)=[COD]) AND ((OrdenProdItem.CodParte)=[Articulos].[CodParte]) AND ((Estaciones.Descripcion)=[EST]) AND ((OrdenProdItem.Estacion)=[Estaciones].[EstacionID])) '+
       'ORDER BY OrdenProdItem.CodOrdenItem; ';
Aqui el problema es casi el mismo:
1- Firebird no acepta ( IIF Is Null ).
2- Tanto COD como EST, son parametros que estan incluidos en parameters del query, firebird no los reconoce.
Bueno tengo mas, pero con esto ya me medio guio y tengo para un rato.
Nota: en ibexpert he hecho ya las consultas, pero o no me salen los datos del todo o me da muchos errores.
Me ayudais por favor.
Saludos
Responder Con Cita
  #7  
Antiguo 07-06-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Bueno, no soy un experto en Firebird pero a ver si puedo dar respuesta a tus peguntas. Seguro que algún maestro como los llamas tú me corrige, pero me arriesgo.
Cita:
Empezado por Caral
Consulta 1:
Código SQL [-]
 QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar = True';
Graficar es un campo boolean, por eso esta el true, la base de datos firebird lo cambia por un campo varchar y lo cambia a T.
Pregunta:
Como hago esta sentencia en delphi con ese tipo de campo (varchar).
Al ser varchar, se trata igual que un campo caracter, es decir
Código SQL [-]
 QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar =' + QuotedStr('T');
Lo unico es que por lo que conozco, para un campo de un solo caracter no es lo más aconsejable el tipo varchar, ya que varchar optimiza el tamaño que ocupa ese campo en disco. En este caso, poco va a optimizar.
Cita:
Empezado por Caral
Consulta 2:
Código SQL [-]
SELECT OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion, OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
FROM (Clientes RIGHT JOIN OrdenProd ON Clientes.CodCliente = OrdenProd.CodCliente) LEFT JOIN (OrdenProdItem LEFT JOIN Estaciones ON OrdenProdItem.Estacion = Estaciones.EstacionID) ON OrdenProd.CodOrden = OrdenProdItem.CodOrden
GROUP BY OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
 IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]), OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
ORDER BY OrdenProd.CodOrden DESC;
Bueno aqui se complica mas la cosa.
1-Firebird no hacepta ( [] corchetes )., se cambian a no se necesitan?
2-Firebird no acepta ( IIF Is Null ), Con que se cambian ?
Creo que efectivamente no acepta corchetes. Creo aunque no estoy seguro que puede ser el caracter " ó ' cuando hay campos con espacios en el nombre. Si no hay espacios, simplemente se quitan.
Firebir acepta iif como atajo para la estructura ( sacado del manual )
Código SQL [-]
CASE
   WHEN condicion THEN valorverdadero ELSE valor falso
END
En tu caso te quedaría 
iif(Descripcion=NULL,'Creación de Orden',Descripcion)
Cita:
Empezado por Caral
Consulta 3:
Código Delphi [-]
AQItems.SQL.Text:=
       'SELECT OrdenProdItem.CodOrdenItem AS Línea, OrdenProdItem.CodParte AS Código, '+
       'Articulos.Descripcion AS Descripción, Articulos.Categoria AS Categoría, Articulos.SubCategoria AS [Sub Categoría], OrdenProdItem.NumSerie AS [# Pieza],
      IIf([EnProceso],"SI","NO") AS [En Proceso?] '+
       'FROM OrdenProdItem, Articulos, Estaciones '+
       'WHERE (((OrdenProdItem.CodOrden)=[COD]) AND ((OrdenProdItem.CodParte)=[Articulos].[CodParte]) AND ((Estaciones.Descripcion)=[EST]) AND ((OrdenProdItem.Estacion)=[Estaciones].[EstacionID])) '+
       'ORDER BY OrdenProdItem.CodOrdenItem; ';
Aqui el problema es casi el mismo:
1- Firebird no acepta ( IIF Is Null ).
2- Tanto COD como EST, son parametros que estan incluidos en parameters del query, firebird no los reconoce.
Bueno tengo mas, pero con esto ya me medio guio y tengo para un rato.
Nota: en ibexpert he hecho ya las consultas, pero o no me salen los datos del todo o me da muchos errores.
Me ayudais por favor.
Saludos
En esta tercera, la primera está contestada anteriormente, y la segunda, imagino que tendrás que cambiar la consulta para poner parámetros, que por lo que te he leido, hasta contestas como un maestro al respecto

Espero que te sirva de ayuda el rollo patatero que te he metido.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 08-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
La primera ya la solucione:
Código Delphi [-]
QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar = ''T''';
Me costo pero lo hice, despues de mil intentos.
A la segunda no le llego, lo estoy intentando directamente desde IBExpert, y no lo consigo, esta parte es la que importa:
Código SQL [-]
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion
Lo he intentado asi:
Código SQL [-]
 if (Estaciones.descripcion = ' ') then 'Creación de Orden'
Y asi:
Código SQL [-]
Case when Estaciones.descripcion = ' ' then 'Creación de Orden'
No me caminan, con esto ' ' , estoy pensando en un valor nulo, no se si me equivoco.
Saludos
Responder Con Cita
Respuesta


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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
que hago mal? jvalles Gráficos 2 19-07-2005 14:45:06
Como las hago? jam888 Firebird e Interbase 7 06-05-2005 22:45:41
Como lo hago? danytorres SQL 4 08-06-2004 14:27:42
¿como lo hago? loenx Conexión con bases de datos 6 01-11-2003 15:26:34
Como lo hago¿ MANUEL OVAL SQL 6 31-10-2003 14:43:39


La franja horaria es GMT +2. Ahora son las 21:50:30.


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