Erro ao executar Stored Procedure no Lazarus
Há algum tempo atras criei uma pequena aplicação para controle de locação de imoveis, que na ocasião funcionava bem. Porém a mesma focou abandonada por um tempo e agora estou retomando. Sou novato em programação, e não estou conseguindo resolver um erro que está ocorrendo agora ao tentar executar uma stored procedure.
Estou usando o Firebird 2.5 com Lazarus 2.2 e quando clico no botao atualizar do meu form recebo a mensagem abaixo:
SQL Error: Dynamic SQL ErrorSQL error code = -84procedure ATUALIZA_CADASTRO does not return any valuesAt line 1, column 15.
Error Code: -84. non-SQL security class defined The SQL: SELECT * FROM ATUALIZA_CADASTRO(?);
A procedure criado no firebird é essa:
SET TERM ^ ;
CREATE PROCEDURE ATUALIZA_CADASTRO (
CODIGO integer )
AS
begin
update CADASTRO
set CADASTRO.ATIVO = ''''S''''
where CADASTRO.CODIGO = :codigo;
suspend;
end
^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE ATUALIZA_CADASTRO TO SYSDBA WITH GRANT OPTION;
Alguem poderia me ajudar?
Obrigado!!
Estou usando o Firebird 2.5 com Lazarus 2.2 e quando clico no botao atualizar do meu form recebo a mensagem abaixo:
SQL Error: Dynamic SQL ErrorSQL error code = -84procedure ATUALIZA_CADASTRO does not return any valuesAt line 1, column 15.
Error Code: -84. non-SQL security class defined The SQL: SELECT * FROM ATUALIZA_CADASTRO(?);
A procedure criado no firebird é essa:
SET TERM ^ ;
CREATE PROCEDURE ATUALIZA_CADASTRO (
CODIGO integer )
AS
begin
update CADASTRO
set CADASTRO.ATIVO = ''''S''''
where CADASTRO.CODIGO = :codigo;
suspend;
end
^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE ATUALIZA_CADASTRO TO SYSDBA WITH GRANT OPTION;
Alguem poderia me ajudar?
Obrigado!!
Vanderlei Luz
Curtidas 0
Respostas
Arthur Heinrich
29/08/2022
Você está obtendo um erro de compilação?
Pergunto isso porque a linha "where CADASTRO.CODIGO = :codigo;" parece indicar uma variável, da mesma forma que especificamos via client, para trabalhar com prepare.
Dentro da stored procedure acho que não se utiliza os dois pontos na frente da variável. Para não confundir o parâmetro com a coluna, você pode utilizar um prefixo na variável.
Pergunto isso porque a linha "where CADASTRO.CODIGO = :codigo;" parece indicar uma variável, da mesma forma que especificamos via client, para trabalhar com prepare.
Dentro da stored procedure acho que não se utiliza os dois pontos na frente da variável. Para não confundir o parâmetro com a coluna, você pode utilizar um prefixo na variável.
SET TERM ^ ; CREATE PROCEDURE ATUALIZA_CADASTRO (P_CODIGO integer ) AS begin update CADASTRO set CADASTRO.ATIVO = 'S' where CODIGO = P_CODIGO; suspend; end ^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE ATUALIZA_CADASTRO TO SYSDBA WITH GRANT OPTION;
GOSTEI 0