delphi mysql controle de estoque
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
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
Curtidas 0
Respostas
Dorivan Sousa
23/05/2015
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;
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?
GOSTEI 0
Nei
23/05/2015
Bom dia dorivan, assim realmemte funcionou, vc sabe como chamar esse procedimento.no delphi?
GOSTEI 0
Dorivan Sousa
23/05/2015
voce ta usando que componente para acessar o banco de dados? Zeros, DBExpress, FireDac...
GOSTEI 0
Nei
23/05/2015
firedac
GOSTEI 0
Nei
23/05/2015
e ai dorivan vc pode me ajudar?
GOSTEI 0
Dorivan Sousa
23/05/2015
FDStoredProc
GOSTEI 0
Dorivan Sousa
23/05/2015
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;
GOSTEI 0
Nei
23/05/2015
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
GOSTEI 0
Dorivan Sousa
23/05/2015
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.
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.
GOSTEI 0
Dorivan Sousa
23/05/2015
pesquisando um pouco sobre como funciona o mysql, essa 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...
veja se a mensagem 'Nova quantidade, menor que o estoque !' não esteja retornando ai
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
GOSTEI 0