Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Proc. almacenado como contador (https://www.clubdelphi.com/foros/showthread.php?t=38447)

fedelphi 14-12-2006 22:20:43

Proc. almacenado como contador
 
Hola de nuevo, estoy trabajando con firebird y accedo mediante dbExpress en turbodelphi 2006, hice un procedimiento almacenado en el cual cuento la cantidad de registros de una tabla, y a este valor lo devuelvo en un parametro, en el modulo de datos utilizo un SQLStoredProc para utilizar el valor,
Código SQL [-]
SET TERM ^ ;
ALTER PROCEDURE PRUEBA (
    ENTRADA Integer )
RETURNS (
    SALIDA Integer )
AS
BEGIN
  SELECT COUNT(*) FROM TICKETS INTO :salida;
  SUSPEND;
END^
SET TERM ; ^
le asigne el procedimiento, le configure los parametros de entrada y salida pero cuando lo activo, propiedad active a true me da un error que dice:
SQLSPcontador:Cursor not returned from query. Pero si fijo en la propiedad params[n].value me devuelve la cantidad de registros. Alguien puede ayudarme con este problemita o problemon, no lo se en realidad.
Gracias
Fede

Guti13 15-12-2006 00:40:12

Cita:

Empezado por fedelphi
Hola de nuevo, estoy trabajando con firebird y accedo mediante dbExpress en turbodelphi 2006, hice un procedimiento almacenado en el cual cuento la cantidad de registros de una tabla, y a este valor lo devuelvo en un parametro, en el modulo de datos utilizo un SQLStoredProc para utilizar el valor,Código SQL [-]SET TERM ^ ;
ALTER PROCEDURE PRUEBA (
ENTRADA Integer )
RETURNS (
SALIDA Integer )
AS
BEGIN
SELECT COUNT(*) FROM TICKETS INTO :salida;
SUSPEND;
END^
SET TERM ; ^


le asigne el procedimiento, le configure los parametros de entrada y salida pero cuando lo activo, propiedad active a true me da un error que dice:
SQLSPcontador:Cursor not returned from query. Pero si fijo en la propiedad params[n].value me devuelve la cantidad de registros. Alguien puede ayudarme con este problemita o problemon, no lo se en realidad.
Gracias
Fede

Prueba a quitar la instrucción suspend;. Esta solo es necesaria para uso de procedimientos almacenados en sentencias Select.


Saludos

fedelphi 15-12-2006 13:11:21

Gracias Guti13, pero ya lo habia probado y nada. Lo que realice fue no activarlo, sino en runtime hacer SQLSPcontador.ExecProc, ya que este error se genera porque el Proc Almac no devuelve un set de registros, sino un valor en su parametro salida. Asi que está solucionado.
Fede

Lepe 15-12-2006 14:21:15

Teóricamente, deberías eliminar el Suspend del SP y después ejecutar (ExecProc) el mismo. Básicamente es lo dicho por Guti13

Hay 2 tipos de procedimientos almacenados:
- de selección
- de ejecución

La diferencia es conceptual:
- Cuando devuelves un set de registros (SP de selección), debes utilizar Suspend dentro del SP y además abrirlo con .Open en delphi, además puedes usar una simple consulta (TQuery) con la instrucción:
Código SQL [-]
select * from nombreSP

- Cuando solo asignas un parámetro de salida, (SP de ejecución) no tiene sentido usar Suspend y además se ejecutará con ExecProc. Deberás usar un IBStoreProcedure o similar.

Espero que haya aclarado algo.

Saludos

fedelphi 15-12-2006 19:45:10

Gracias Lepe, estuvo muy bien tu aclaración, recien estoy aprendiendo con firebird y dbExpress y me vino muy bien.
Fede


La franja horaria es GMT +2. Ahora son las 07:36:26.

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