GARANTIR DESCONTO

Fórum delphi mysql controle de estoque #520729

23/05/2015

0

boa noite, criei uma procedure no mysql para dar baixa no estoque e conferir se existe estoque para dar baixa queria saber como invoco isso no delphi, se alguem puder me ajudar
segue o codigo:
CREATE DEFINER = 'root'@'localhost'
PROCEDURE estoque.procedure_estoque(in prod int, qtd int, idprod int )
BEGIN
IF EXISTS (select * from prod where prod.estoque < qtd and prod.prodid = idprod ) THEN
update prod set prod.estoque = prod.estoque - qtd
where prod.prodid = idprod;
else
select 'Nova quantidade, menor que o estoque !' as Mensagem;
end if;
END

quando chamo no delphi ele baixa o estoque, porem quando a quantidade é maior ele lança o item mais nao baixa nada no estoque
Nei

Nei

Responder

Posts

25/05/2015

Dorivan Sousa

F EXISTS (select * from prod where prod.estoque < qtd and prod.prodid = idprod ) THEN


voce ta verificando se existe o produto e se o estoque é maior que a quantidade que voce ta vendendo...

else
select 'Nova quantidade, menor que o estoque !' as Mensagem;
end if;

aqui voce retorna uma mensagem quando o estoque é menor, voce ta tratando essa mensgem no programa, depois de executar a procedure voce ta lendo o retorno dela para avisar o usuario que o item tem o estoque inusificente?
Responder

Gostei + 0

25/05/2015

Nei

Bom dia dorivan, assim realmemte funcionou, vc sabe como chamar esse procedimento.no delphi?
Responder

Gostei + 0

25/05/2015

Dorivan Sousa

voce ta usando que componente para acessar o banco de dados? Zeros, DBExpress, FireDac...
Responder

Gostei + 0

25/05/2015

Nei

firedac
Responder

Gostei + 0

25/05/2015

Nei

e ai dorivan vc pode me ajudar?
Responder

Gostei + 0

25/05/2015

Dorivan Sousa

FDStoredProc
Responder

Gostei + 0

25/05/2015

Dorivan Sousa

http://docwiki.embarcadero.com/RADStudio/XE6/en/Executing_Stored_Procedures_(FireDAC)

DStoredProc1.StoredProcName := 'MY_PROC';
FDStoredProc1.Prepare;
FDStoredProc1.Params[0].Value := 100;
FDStoredProc1.Params[1].Value := 'audi';
FDStoredProc1.ExecProc;
Responder

Gostei + 0

25/05/2015

Nei

boa noite dorivan, assim realmente chama a procedure e funciona perfeitamente, mais como fazer um tratamento de exceção no fdsstoredproc1. porque ele executa se tiver valido e se nao estiver ele nao mostra nada
Responder

Gostei + 0

27/05/2015

Dorivan Sousa

entao no firebird que uso com mais frequencia eu faço a procedure é executavel onde apenas executa comandos e so retorna se deu certo ou a procedure é selecionavel onde funciona como se fosse uma tabela, retornando dados.

essa sua procedure tem as duas funcoes, eu nao sei bem como funciona isso no mysql, a sua procedure nao retorna uma excecao ela retorna um campo chamado mensagem com o valor 'Nova quantidade, menor que o estoque !'... eu tentaria executar a procedure e ver os fields do fdstoredproc se o valor do campo mensagem for igual Nova quantidade, menor que o estoque !' avisaria ao usuario.
Responder

Gostei + 0

27/05/2015

Dorivan Sousa

pesquisando um pouco sobre como funciona o mysql, essa mensagem
select 'Nova quantidade, menor que o estoque !' as Mensagem;

ao que me parece retorna como uma mensagem de sistema, voce pode testar isso no console do mysql com o comando CALL e voce passa os parametros de um item com a quantidade insuficiente que voce vai ver o retorno da mensagem... se for realmente isso acho que pelos fields do fdstoredproc não vai ver essa mensagem ja que nao tem o parametro de retorno... nesse link [url]http://docwiki.embarcadero.com/RADStudio/XE5/en/Executing_Commands_(FireDAC)#Getting_DBMS_Feedback[/url] mostra como ver o feedback do DB...
var
  i: Integer;
begin
  FDConnection1.ResourceOptions.ServerOutput := True;
  FDQuery1.FetchOptions.AutoClose := False;
  FDQuery1.Open('select * from Region; print ''Hello''');
  FDMemTable1.Data := FDQuery1.Data;
  Memo1.Lines.Add(Format('%d rows processed', [FDMemTable1.RecordCount]));
  FDQuery1.NextRecordSet;
  if FDConnection1.Messages <> nil then
    for i := 0 to FDConnection1.Messages.ErrorCount - 1 do
      Memo1.Lines.Add(FDConnection1.Messages[i].Message);
end;

veja se a mensagem 'Nova quantidade, menor que o estoque !' não esteja retornando ai
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar