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 al llamar un procedimiento... (https://www.clubdelphi.com/foros/showthread.php?t=9526)

ronimaxh 26-04-2004 14:44:29

ayuda al llamar un procedimiento...
 
Hola amigos, les quiero preguntar como llama el valor de un procedimiento desde delphi, explico, tengo una tabla con un generador y un tragger ahora bien, tengo un procedimiento que dice cual es el codigo del generador.

Uso ibexpert si lo ejecuto desde el ibexpert me da el codigoid bien,
ahora desde delphi, no se como hacer para que me devuelva el valor.

Nota: estoy aprendiendo a usar los precedimientos, es mi primer procedimiento, desde ya gracias.

celades 26-04-2004 16:35:44

Hola

supongamos tener el procedimiento

create procedure genera_codi_id
returns
( codigo_id integer)
as
begin
codigo_id=gen_id(generador,1);
suspend;
end

desde delphi con un componente ibquery u otro

ibquery.sql.text:=' select codigo_id from genera_codi_id'
ibquery.open;
variable_x:=ibquery.fieldbyname('codigo_id').asinteger;

o sea el procedimiento se puede consultar igual que una tabla cualquiera
pero debe tener returns y suspend

Hay mas formas de hacerlo con ibquery o IBStoredProc
ibquery.sql.text:='execute procedure genera_codi_id';
ibquery.execproc;
variable_x:=ibquery.parambyname('codigo_id').asinteger;

Lo he hecho sin probarlo pero espero no haber cometido errores de sintaxis

Saludos

jachguate 26-04-2004 17:58:16

hola celades. te recomiendo que aprendas a utilizar la etiqueta code (vinculo en mi firma) para que tus trozos de código se vean correctamente indentados.

Hasta luego.

;)

ronimaxh 26-04-2004 18:29:09

gracias, lo probare y luego les digo...

ronimaxh 26-04-2004 21:12:11

Aqui les digo que probe el procedimiento y todo salio bien, pero note algo, cada ves que ejecuto el procedimiento me incrementa el generador, sin hacer nungun tipo de transaccion; como se contrala eso....

Esto lo hago usando ibx y firebird 1.03.

guillotmarc 26-04-2004 21:19:05

Hola.

Los generadores funcionan independientemente de las transacciones, por lo que siempre te van a incrementar su valor, aunque hagas un Rollback de la transacción en las que se les llamó.

Saludos.

ronimaxh 26-04-2004 22:43:26

gracias guillotmarc por la atencion; pero habra una forma de consultarlo y que el store precedure no lo incremente.....

jachguate 26-04-2004 22:48:06

nunca lo he hecho, pero si dentro del sp llamas a gen_id con un incremento de 0, simplemente te devolverá el valor actual de la secuencia...

Hasta luego.
;)

sanxpue 27-04-2004 01:53:33

asi es como dice..
 
asi es como dice nuestro amigo jachguate, aunque nunca lo halla hecho si funciona, ami me funciona con un IBStoredProcedure

creamos el procedimiento

Código:

Create Procedure REG_IND
Return(IND Integer)
As
Begin
  IND = Gen_ID(Nombre_Generador,0);
End

pones un IBStoredProcedure, lo ligas al IBDataBase llamas el procedimiento

a la hora de ejecutarlo

Código:

IBStoredProcedure.Prepare
Try
  IBStoredProcedure.ExecProc;
  Variable := IBStoredProcedure.ParamByName('IND').AsInteger;
Finally
  IBStoredProcedure.UnPrepare;
End;



La franja horaria es GMT +2. Ahora son las 17:12:57.

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