Fórum Como chamar uma stored procedure #417473
25/05/2012
0
Criei uma Stored Procedure para totalizar os valores de um caixa que eu informar e me retornar os totais.
ex.:
vlrDin 0,00
vlrCar 0,00
vlrChq 0,00
Quando executo a Procedure direto dela mesma, é retornado o valor como eu quero, Mas quando utilizo o camonado:
CALL NOMEPROCEDURE(1) -- onde 1 é o numero do caixa, aparece o seguinte erro:
Incorrect number of arguments for PROCEDURE easypharma.sp_totalizadorcx01; expected 4, got 1
COMO EU FAÇO PARA EXECUTAR A PROCEDURE?
segue abaixo o inicio do código da Procedure:
CREATE DEFINER = root@localhost PROCEDURE `sp_totalizadorcx01`(
in nrocx integer,
out vlrdin decimal(9,2),
out vlrcar decimal(9,2),
out vlrchq decimal(9,2)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT
BEGIN
Vagner Almeida
Curtir tópico
+ 1Posts
25/05/2012
Joel Rodrigues
Gostei + 0
25/05/2012
Vagner Almeida
Gostei + 0
25/05/2012
Joel Rodrigues
CALL NOMEPROCEDURE(1, @val1, @val2, @val3) SELECT @val1, @val2, @val 3
Gostei + 0
25/05/2012
Vagner Almeida
Como eu faria isso no Delphi ????
SQL.Clear;
SQL.Add(CALL sp_totalizadorcx+sFilial+(:nrocx, @a, @b, @c));
ParamByName(nrocx).AsInteger := opCXcd;
Open;
?????
Gostei + 0
25/05/2012
Joel Rodrigues
Primeiramente, no Query Analyzer deu certo?
Que engine de conexão você está utilizando?
Gostei + 0
25/05/2012
Vagner Almeida
Primeiro eu executei o call, dai ele me retornou uma tabela sem campos.
CALL sp_totalizadorcx01(1, @ra, @rb, @rc)
Voltei e executei o select, dai me mostrou os resultados que eu queria ver. Obs: o nome das colunas foram os das variáveis ( @ra, @rb, @rc ).
select @ra, @rb, @rc
No delphi eu tentei fazer do mesmo jeito, executar um e depois o outro, mas logo no primeiro deu problema.
Estou usando o componente ZEUS, acesso direto.
var zqr: TZQuery;
begin
zqr := TZQuery.Create(nil);
zqr.Connection := dm.zDB;
try
with zqr do begin
SQL.Clear;
SQL.Add(CALL sp_totalizadorcx+sFilial+(:nrocx, @din, @car, @chq));
ParamByName(nrocx).AsInteger := opCXcd;
Open; //Deu um problema aqui.(menssagem: CAN NOT OPEN A RESULTSET)
SQL.Clear;
SQL.Add(select @din, @car, @chq);
Open;
ValorDin.Value := FieldByName(@din).AsFloat;
ValorCar.Value := FieldByName(@car).AsFloat;
ValorChe.Value := FieldByName(@chq).AsFloat;
end;
finally
zqr.Free;
end;
Gostei + 0
25/05/2012
Joel Rodrigues
Gostei + 0
25/05/2012
Vagner Almeida
Não é Open é ExecSQL.
assim funcionou.
SQL.Clear;
SQL.Add(CALL sp_totalizadorcx+sFilial+(:nrocx, @din, @car, @chq));
ParamByName(nrocx).AsInteger := opCXcd;
ExecSQL;
SQL.Clear;
SQL.Add(select @din, @car, @chq);
Open;
Muito obrigado...
Gostei + 0
25/05/2012
Joel Rodrigues
Boa sorte em seus projetos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)