Erro ao executar Stored Procedure no Lazarus [RESOLVIDO]

1. Erro ao executar Stored Procedure no Lazarus [RESOLVIDO]

Vanderlei Pedro Luz
vander_luz

(usa Outra)

Enviado em 31/08/2022 - 14:28h

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 o componente ZeosAcess 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!!


  


2. Re: Erro ao executar Stored Procedure no Lazarus [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 31/08/2022 - 23:16h


Aparentemente o erro ocorre pq vc está chamando a sp numa query sql
SELECT * FROM ATUALIZA_CADASTRO(?)
Como eu não programo mais no pascal não dá p ajudar muito . No caso de stored procedure vc vai chamar apenas o nome dela e a forma de passar parâmetros depende da implementação adotada(orientação o objetos, procedural etc)


3. Re: Erro ao executar Stored Procedure no Lazarus [RESOLVIDO]

Vanderlei Pedro Luz
vander_luz

(usa Outra)

Enviado em 01/09/2022 - 08:24h


leandropscardua escreveu:


Aparentemente o erro ocorre pq vc está chamando a sp numa query sql
SELECT * FROM ATUALIZA_CADASTRO(?)
Como eu não programo mais no pascal não dá p ajudar muito . No caso de stored procedure vc vai chamar apenas o nome dela e a forma de passar parâmetros depende da implementação adotada(orientação o objetos, procedural etc)


Bom dia, a chamada da sp se da conforme abaixo, não utilizo uma Query

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
if Button = nbPost then
begin
SpAtualiza.ParamByName('codigo').AsInteger := StrToInt(DBEdit1.Text);
SpAtualiza.ExecProc;
end;
end;


4. Re: Erro ao executar Stored Procedure no Lazarus [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 01/09/2022 - 09:54h


vander_luz escreveu:


leandropscardua escreveu:


Aparentemente o erro ocorre pq vc está chamando a sp numa query sql
SELECT * FROM ATUALIZA_CADASTRO(?)
Como eu não programo mais no pascal não dá p ajudar muito . No caso de stored procedure vc vai chamar apenas o nome dela e a forma de passar parâmetros depende da implementação adotada(orientação o objetos, procedural etc)


Bom dia, a chamada da sp se da conforme abaixo, não utilizo uma Query

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
if Button = nbPost then
begin
SpAtualiza.ParamByName('codigo').AsInteger := StrToInt(DBEdit1.Text);
SpAtualiza.ExecProc;
end;
end;

Verdade. Parece correto. Eu olhei novamente o código da sp e parece que tem um comando suspend que não deveria estar ali. Ele é usado para iterar resultados em query select. Aqui tem algumas infos:
http://www.destructor.de/firebird/storedproc.htm


5. Re: Erro ao executar Stored Procedure no Lazarus [RESOLVIDO]

Vanderlei Pedro Luz
vander_luz

(usa Outra)

Enviado em 01/09/2022 - 20:16h


leandropscardua escreveu:


vander_luz escreveu:


leandropscardua escreveu:


Aparentemente o erro ocorre pq vc está chamando a sp numa query sql
SELECT * FROM ATUALIZA_CADASTRO(?)
Como eu não programo mais no pascal não dá p ajudar muito . No caso de stored procedure vc vai chamar apenas o nome dela e a forma de passar parâmetros depende da implementação adotada(orientação o objetos, procedural etc)


Bom dia, a chamada da sp se da conforme abaixo, não utilizo uma Query

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
if Button = nbPost then
begin
SpAtualiza.ParamByName('codigo').AsInteger := StrToInt(DBEdit1.Text);
SpAtualiza.ExecProc;
end;
end;

Verdade. Parece correto. Eu olhei novamente o código da sp e parece que tem um comando suspend que não deveria estar ali. Ele é usado para iterar resultados em query select. Aqui tem algumas infos:
http://www.destructor.de/firebird/storedproc.htm


Boa noite Leandro

Na mosca!!! retirei o comando suspend da SP e funcionou perfeitamente.

Muito obrigado pela ajuda!!!
Problema resolvido,

Obrigado!!!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts