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)
-   -   Error al ejecutar procedimiento almacendado con el componente TSQLStoredProc (https://www.clubdelphi.com/foros/showthread.php?t=84256)

novato_erick 26-09-2013 22:06:37

Error al ejecutar procedimiento almacendado con el componente TSQLStoredProc
 
Hola Chicos tengo esta duda:

Utilizo Firebird y tengo un procedimiento almacenado que me consulta el ultimo id insertado trayendome el datos del mismo:

Código SQL [-]
CREATE PROCEDURE LASTFAMILIAGREGADA
RETURNS(
  COD_FAMILIA VARCHAR(25) CHARACTER SET ASCII COLLATE ASCII,
  NOM_FAM VARCHAR(100) CHARACTER SET ASCII COLLATE ASCII,
  DESCRI VARCHAR(250) CHARACTER SET ASCII COLLATE ASCII)
AS
DECLARE VARIABLE ID_FAM INTEGER;
DECLARE VARIABLE MI_ID INTEGER;
BEGIN
  /* Procedure body */ 
 SELECT * from LASTFAMILIAGREGADA_ID into :ID_FAM;
 MI_ID = ID_FAM;
 select f.COD_FAMILIAS, f.NOMBRE, f.DESCRIPCION from FAMILIAS f where f.ID_FAMILIAS =  :MI_ID INTO :COD_FAMILIA, :NOM_FAM, :DESCRI;
SUSPEND;

END;

ahora en delphi utilizo el componente TSQLStoredPrc asignando sus respectivos valores en propiedades sin embargo al hacer esto:

Código Delphi [-]
with dmStoreProcedure.spUltimaFamiliaAgregada do
  begin
  ExecProc; //Aqui me manda el error LASTFAMILIAGREGADA": Actual number of parameters (1) exceeds the current number of stored procedure parameters (0). Either uncheck the ParamCheck component property or review the parameter list content.
  codF := Params.ParamByName('COD_FAMILIA').Value;
  NomF := Params.ParamByName('NOM_FAM').Value;
  DescF := Params.ParamByName('DESCRI').Value;
  end;

Alguna idea?

Saludos a Todos

novato_erick 26-09-2013 22:40:49

Hola

Respondiendo yo mismo a mi consulta y realizando prueba hice esto:

Código Delphi [-]
with dmStoreProcedure.spUltimaFamiliaAgregada do
  begin
  ExecProc;//Quité esta linea ahora para cada vez que quiero que me refresque el último registro 
  codF := Params.ParamByName('COD_FAMILIA').Value;
  NomF := Params.ParamByName('NOM_FAM').Value;
  DescF := Params.ParamByName('DESCRI').Value;
  Close;//Cierro el SP espero que esto sea correcto
  end;


Saludos

cloayza 26-09-2013 23:05:35

Prueba con esto...

Código Delphi [-]
    with dmStoreProcedure.spUltimaFamiliaAgregada do
    begin                                                            
           {Si tú procedimiento recibe algún  parametro...}
           ParamByName('PARAM1').AsInteger :=Param1;         
           {
           ExceQuery: Si estas retornando valores desde el Store Procedure. 
           ExecProc: Si estas no retornas valores;
           }
           ExecQuery;   
           codF  := FieldByName('COD_FAMILIA').Value;
           NomF := FieldByName('NOM_FAM').Value;
           DescF := FieldByName('DESCRI').Value;          
           Close;       
end;
No indicas que componentes estas usando para acceso a la base de datos, ExecQuery y ExecProc suponiendo que usas FIBPlus. No se si para IBX son las mismas sentencias...

Saludos cordiales

novato_erick 26-09-2013 23:13:10

En realidad realidad en el procedimiento en el mismo motor de base de datos Firebird 2.5 hago esto:

Código SQL [-]
CREATE PROCEDURE LASTFAMILIAGREGADA
RETURNS(
  COD_FAMILIA VARCHAR(25) CHARACTER SET ASCII COLLATE ASCII,
  NOM_FAM VARCHAR(100) CHARACTER SET ASCII COLLATE ASCII,
  DESCRI VARCHAR(250) CHARACTER SET ASCII COLLATE ASCII)
AS
DECLARE VARIABLE ID_FAM INTEGER;
DECLARE VARIABLE MI_ID INTEGER;
BEGIN
  /* Procedure body */ 
 SELECT * from LASTFAMILIAGREGADA_ID into :ID_FAM;
 MI_ID = ID_FAM; /*Mi parametro de entrada que obtengo del primer procedimiento almacenado */
 select f.COD_FAMILIAS, f.NOMBRE, f.DESCRIPCION from FAMILIAS f where f.ID_FAMILIAS =  :MI_ID INTO :COD_FAMILIA, :NOM_FAM, :DESCRI;
SUSPEND;

END

o sea en teoria el procedimiento spUltimaFamiliaAgregada debe de hacer la consulta y luego traer el dato pero el componente me manda el mismo dato que tengo en modo de diseño y no refresca si se hace una actualización

Saludos y gracias por responder cloayza

novato_erick 27-09-2013 00:33:30

resolví el problema

haciendo esto:

Código Delphi [-]
with dmStoreProcedure.spUltimaFamiliaAgregada do
  begin
  ExecProc;//Quité esta linea ahora para cada vez que quiero que me refresque el último registro 
  codF := ParamByName('COD_FAMILIA').Value; //quite la propiedad params y deje parambyname
  NomF := ParamByName('NOM_FAM').Value;
  DescF := ParamByName('DESCRI').Value;
  Close;//Cierro el SP espero que esto sea correcto
  end;

investigaré porque sucedía eso para dar una solución mas lógica...


Saludos

novato_erick


La franja horaria es GMT +2. Ahora son las 05:43:12.

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