Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ayuda con procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=65929)

XBart 22-01-2010 15:14:14

Ayuda con procedimiento almacenado
 
Buenso dias, es un gusto volver a saludarlos despues de tanto tiempo, por cuestiones laborales me aparte del area de informatica y recien me devolvieron a ese departamento, aunque no necesariamente a programacion, pero en mis ratos libres estoy intentando retomar lo poco que sabia de delphi y firebird, asi que es probable que me vean mas seguido por estos rumbos....

ahora paso a mi pregunta, tengo un libro de delphi y vienen ejemplos, he leido en el foro y vienen ejemplos, talves mi pregunta parezca tonta, y es la siguente...

uso delhpi 6, ibx y firebird 1.5
tengo un procedimiento almacenado, el cual su funcion es dar de alta un nombre, es todo, el procedimiento almacenado primero checa si ese nombre ya existe, si no es asi lo de alta.

Ahora mi pregunta es enel libro dice que use un ibquey, pero si pongo los datos como en el ejemplo me da error, me gustaria me dieran un ejemplo como llar un sp que retorne un valor y como llar uno que regrese varios registros, a forma de consulta, espero aberme explicado bien, agradezco de antemano toda su ayuda....

XBart

jhonny 22-01-2010 15:28:39

¿Que error es el que te aparece?

XBart 22-01-2010 15:34:13

ibquery error 1004, es todo lo que me marca

jhonny 22-01-2010 15:40:52

Bueno, dentro de la sentencia SQL debería ir algo como:

Código SQL [-]
execute procedure nombre_del_procedimiento(parametro1, parametro2, parametro3...parametroN);

para luego ejecutarla, utilizando el metodo ExeCuteSQL, del IBQuery.

XBart 22-01-2010 15:57:29

esto lo pongo en el query

query.sql.add:=('execute procedure nombresp(parametros)');

y me maarca error, seria mucha molestia me pusieras un ejemplo de como lo usas tu, mi sp solo usa un parametro, el sp es el siguiente:

SET TERM ^ ;
CREATE PROCEDURE SP_AUTOR_ALTA (
PAUTOR VARCHAR(60))
RETURNS (
RESULTADO VARCHAR(50))
AS
DECLARE VARIABLE TAUTOR VARCHAR(60);
begin
/* Procedure Text */
select autor_nom
from cat_autor
where autor_nom = :pautor
into :tautor;
/* Verifica si el cliente existe */
if (:tautor is null) then
begin
insert into cat_autor(autor_nom)
values(:pautor);
RESULTADO = 'AUTOR GRABADO';
end
else
begin
resultado = 'ESE AUTOR YA EXISTE';
end
suspend;
end


gracias

jhonny 22-01-2010 16:05:00

Pues en tu caso,s ería asi:

Código Delphi [-]
query.Close;
query.SQL.clear;
query.SQL.add('execute procedure SP_AUTOR_ALTA(:PAUTOR)');
query.Close;
query.ParamByName('PAUTOR').AsString := //Aca la variable con el codigo del autor...
query.ExecSQL;

Y eso ejecutaría tu procedimiento almacenado.

XBart 22-01-2010 16:13:30

gracias, lo voy a probar ahorita y te escribo...

gracias

XBart 01-02-2010 23:31:04

gracias jhonny, funciono muy bien, ahora mi pregunta es como recupero el valor de la respuesta, si no es mucha molestia. gracias

guillotmarc 02-02-2010 11:05:50

Hola.

Lo tienes en un parámetro (de salida), así que lo puedes leer de forma parecida a como has dado valor a los parámetros (de entrada).

ShowMessage('Resultado: ' + query.ParamByName('RESULTADO').AsString);

Saludos


La franja horaria es GMT +2. Ahora son las 15:09:34.

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