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
  #1  
Antiguo 02-02-2008
Avatar de Milperrimo
Milperrimo Milperrimo is offline
Miembro
 
Registrado: sep 2007
Ubicación: Guadalajara
Posts: 57
Poder: 17
Milperrimo Va por buen camino
crear Stored Procedure desde delphi

Saludos, tengo un gran problemon, ojala alguien me pueda ayudar, en la base de datos de una empresa tengo que correr un sp, el problema es que no me dejan instalar un programa administrador de base de datos como el iboconsole o el firebird maestro. entonces lo que siempre hemos hecho es crear aplicaciones en delphi que me corran todos los querys como los de crear tablas y alterarlas y eso. Pero se me presenta el problema con un sp, corriendolo desde un administrador d base de datos jala perfectamente pero a la hora de correrlo desde delphi me genera errores por la sintaxis del sql para firebird, entonces que es lo que le tengo que corregir o como arreglar el sp para que corra desde delphi.

Código SQL [-]
SET TERM ^ ;

RECREATE PROCEDURE SP_REP_ANUAL4 (
 FECHAFIN DATE)
RETURNS (
 MN       INTEGER,
 MUH      INTEGER,
 MUO      INTEGER,
 REC      INTEGER,
 ACU      INTEGER,
 MAHN     INTEGER,
 MAHU     INTEGER,
 OAHN     INTEGER,
 AMOPH    FLOAT,
 AMOPO    FLOAT,
 AMOGH    FLOAT,
 AMOGO    FLOAT,
 AMOIH    FLOAT,
 AMOIO    FLOAT,
 ARPH     FLOAT,
 ARPO     FLOAT,
 AOH      FLOAT,
 AOO      FLOAT,
 RORPU    FLOAT,
 AORPU    FLOAT,
 RORPI    FLOAT,
 AORPI    FLOAT,
 RORG     FLOAT,
 AORG     FLOAT,
 RORI     FLOAT,
 AORI     FLOAT,
 RMEN     FLOAT,
 AMEN     FLOAT,
 RMAY     FLOAT,
 AMAY     FLOAT,
 ROT      FLOAT,
 AOT      FLOAT,
 CMOP     FLOAT,
 CMOI     FLOAT,
 CMOG     FLOAT,
 GF       FLOAT,
 GS       FLOAT,
 MPH      INTEGER,
 SPH      INTEGER,
 RGH      INTEGER,
 IPEH     INTEGER,
 IAH      INTEGER,
 OT1H     INTEGER,
 RGAH     INTEGER,
 TPH      INTEGER,
 OT2H     INTEGER,
 MPO      INTEGER,
 SPO      INTEGER,
 RGO      INTEGER,
 SIO      INTEGER,
 TPO      INTEGER,
 OT3O     INTEGER,
 MEC      INTEGER,
 SER      INTEGER,
 TC       INTEGER)
AS 
BEGIN
FOR
SELECT
(SELECT COUNT(IDVTAS) FROM HONDATA WHERE IDVTAS = 1 AND EXTRACT(YEAR FROM(FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))) AS MN,
(SELECT COUNT(IDVTAS) FROM HONDATA WHERE IDVTAS = 2 AND EXTRACT(YEAR FROM(FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))) AS MUH,
(SELECT COUNT(IDVTAS) FROM HONDATA WHERE IDVTAS = 3 AND EXTRACT(YEAR FROM(FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))) AS MUO,
COUNT(H.RECOR) AS REC,
COUNT(H.ACUDIO) AS ACU,
(SELECT COUNT(IDVISITA) FROM HONDATA WHERE IDVISITA = 1 AND EXTRACT(YEAR FROM(FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))) AS MAHN,
(SELECT COUNT(IDVISITA) FROM HONDATA WHERE IDVISITA = 2 AND EXTRACT(YEAR FROM(FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))) AS MAHU,
(SELECT COUNT(IDVISITA) FROM HONDATA WHERE IDVISITA = 3 AND EXTRACT(YEAR FROM(FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))) AS OAHN,
SUM(H.AMOPH) AS AMOPH,
SUM(H.AMOPO) AS AMOPO,
SUM(H.AMOGH) AS AMOGH,
SUM(H.AMOGO) AS AMOGO,
SUM(H.AMOIH) AS AMOIH,
SUM(H.AMOIO) AS AMOIO,
SUM(H.ARPH) AS ARPH,
SUM(H.ARPO) AS ARPO,
SUM(H.AOH) AS AOH,
SUM(H.AOO) AS AOO,
SUM(H.RORPU) AS RORPU,
SUM(H.AORPU) AS AORPU,
SUM(H.RORPI) AS RORPI,
SUM(H.AORPI) AS AORPI,
SUM(H.RORG) AS RORG,
SUM(H.AORG) AS AORG,
SUM(H.RORI) AS RORI,
SUM(H.AORI) AS AORI,
SUM(H.RMEN) AS RMEN,
SUM(H.AMEN) AS AMEN,
SUM(H.RMAY) AS RMAY,
SUM(H.AMAY) AS AMAY,
SUM(H.ROT) AS ROT,
SUM(H.AOT) AS AOT,
SUM(H.CMOP) AS CMOP,
SUM(H.CMOI) AS CMOI,
SUM(H.CMOG) AS CMOG,
SUM(H.GF) AS GF,
SUM(H.GS) AS GS,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =1) AS MPh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =2) AS SPh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =3) AS RGh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =4) AS IPEh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =5) AS IAh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =6) AS OT1h,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =7) AS RGAh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =8) AS TPh,
(SELECT COUNT(S.IDSERVH) FROM SERVMH S WHERE S.IDSERVH =9) AS OT2h,
(SELECT COUNT(S.IDSERVO) FROM SERVMO S WHERE S.IDSERVO = 1) AS MPo,
(SELECT COUNT(S.IDSERVO) FROM SERVMO S WHERE S.IDSERVO = 2) AS SPo,
(SELECT COUNT(S.IDSERVO) FROM SERVMO S WHERE S.IDSERVO = 3) AS RGo,
(SELECT COUNT(S.IDSERVO) FROM SERVMO S WHERE S.IDSERVO = 4) AS SIo,
(SELECT COUNT(S.IDSERVO) FROM SERVMO S WHERE S.IDSERVO = 5) AS TPo,
(SELECT COUNT(S.IDSERVO) FROM SERVMO S WHERE S.IDSERVO = 6) AS OT3o,
(SELECT COUNT(R.IDRETSER) FROM RETMR R WHERE R.IDRETSER = 1) AS MEC,
(SELECT COUNT(R.IDRETSER) FROM RETMR R WHERE R.IDRETSER = 2) AS SER,
(SELECT COUNT(R.IDRETSER) FROM RETMR R WHERE R.IDRETSER = 3) AS TC
FROM ENCAOR E, HONDATA H
WHERE E.TIPO <> 'C' AND E.ORDE = H.ORDE AND EXTRACT(YEAR FROM (H.FECHORDE)) = EXTRACT(YEAR FROM(:FECHAFIN))
INTO :MN, :MUH, :MUO, :REC, :ACU, :MAHN, :MAHU, :OAHN,
:AMOPH, :AMOPO, :AMOGH, :AMOGO, :AMOIH, :AMOIO, :ARPH,
:ARPO, :AOH, :AOO, :RORPU, :AORPU, :RORPI, :AORPI, :RORG,
:AORG, :RORI, :AORI, :RMEN, :AMEN, :RMAY, :AMAY, :ROT,
:AOT, :CMOP, :CMOI, :CMOG, :GF, :GS, :MPh, :SPh, :RGh,
:IPEh, :IAh, :OT1h, :RGAh, :TPh, :OT2h, :MPo, :SPo,
:RGo, :SIo, :TPo, :OT3o, :MEC, :SER, :TC
DO SUSPEND;
END^

SET TERM ; ^

por ejemplo me da error con lo del set term, me dice ke no existe. Ojala alguien me pueda ayudar, no se si explique bien lo que me pasa, hagan preguntas para esclarecer algo que no me halla explicado bien.
Responder Con Cita
  #2  
Antiguo 02-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Set term no es un comando SQL válido.

Cuando usas isql, este interpreta el comando para saber donde termina la instrucción SQL. En el caso de los triggers o stored procedures, esto es necesario, pues de otra manera el interprete detectaría que la instrucción termina en el primer punto y coma y enviaría solamente ese trozo al servidor, que tiene capacidad únicamente para procesar comandos uno a uno.

En otras palabras, un servidor Firebird no ejecutará un script. Es el interprete (isql, por ejemplo) el encargado de ir sacando las instrucciones y enviarlas una a una al servidor.

La gran mayoría de las herramientas para ib/fb que han surgido posteriormente (IBConsole, IBExpert, IBManager, etc), han tomado este comportamiento como "estándar" y lo han implementado.

Después de toda esta explicación, comprenderás que si estas enviando la instrucción con un TQUery, lo único que falta es que quites las dos sentencias set term del mismo, y todo funcionará a la perfección.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 02-02-2008
Avatar de Milperrimo
Milperrimo Milperrimo is offline
Miembro
 
Registrado: sep 2007
Ubicación: Guadalajara
Posts: 57
Poder: 17
Milperrimo Va por buen camino
Saludos, gracias por la explicacion, ya me kedo un poco mas claro eso, pero sigo teniendo el problema, quite los dos set term como dijiste, y no funciono, le quito el ^ al end ultimo y no funciona, me marca error en la linea 120, es decir donde esta el into, solo dice error on line 120 no dice de ke tipo, sabes que mas le puedo hacer???
Responder Con Cita
  #4  
Antiguo 02-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Has intentado ejecutar la sentencia desde isql?

Supongo que ese si te dejan instalarlo, ¿no?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 03-02-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Hola.

te falta el ; al final del INTO.

Saludos.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
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
stored procedure con mysql y delphi 7 didier Internet 2 13-10-2006 03:36:38
Llamar Un Stored Procedure Desde Un Trigger ibuser Firebird e Interbase 3 26-08-2004 09:51:48
crear cursor en stored procedure al estilo de sqlserver Nose Firebird e Interbase 4 10-05-2004 18:07:32
Vaciar tablas desde Stored Procedure Triton Firebird e Interbase 3 25-03-2004 20:48:48
Ver resultado de un Stored Procedure desde Delphi ElCherchu Conexión con bases de datos 6 10-06-2003 09:51:55


La franja horaria es GMT +2. Ahora son las 01:36:24.


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