SOMA DE DADOS NO DELPHI - UM NOVO DADO COM O JÁ EXISTENTE NO BD
Olá, estou desenvolvendo um software para controle de estoque no delphi 10.4.4, nesse controle estou na parte de entrada no estoque de produtos químicos, consigo cadastrar um novo pedido e da baixa nesse pedido aberto quando ele chega (ai vai para pedidos finalizados), mas na hora de somar a quantidade de produto quimico que chegou com a quantidade que já está em estoque não tá dando. Ex: Temos vários produtos no estoque, cadastro um pedido de 1000Kg de CLORO (a quantidade em estoque é 0kg), essa quantidade chega, dou baixa no pedido, mas não tá dando de somar a quantidade que chega com a que já tá no estoque.
Consigo pesquisar o pedido aberto e o produto pedido, mas na soma diz que o valor não é válido. Estou usando MySql
With dm.SQL_EstoqueSede do
Begin
//realiza a pesquisa do produto no estoque
Active;
Close;
Sql.Clear;
Sql.Add (''''''''Select * from tb_estoque_sede'''''''');
sql.Add(''''''''where produto_estoque = :produto''''''''); //pesquisa o produto
parambyname (''''''''produto'''''''').Value := ComboEdit1.Text; (edit onde informo o produto que chegou);
OPEN;
//Edit1 tá conectado com a linha quantidade da tabela de estoque
//quando realiza a pesquisa edit recebe automaticamente o quantitativo do produto pesquisado
//variaveis do tipo inteiro
quant := StrToInt (edit1.text); //edit1 recebe o valor que já tá no estoque
quantidade := StrToInt (editquantidade.text); //editquantidade recebe o valor que chegou
quantidade2 := quant + quantidade;
edit1.text := IntToStr (quantidade2);
Edit;
post;
End;
o código executa mas quando vai salvar o produto que chega, salva o pedido, mas não soma o quantitativo.
Consigo pesquisar o pedido aberto e o produto pedido, mas na soma diz que o valor não é válido. Estou usando MySql
With dm.SQL_EstoqueSede do
Begin
//realiza a pesquisa do produto no estoque
Active;
Close;
Sql.Clear;
Sql.Add (''''''''Select * from tb_estoque_sede'''''''');
sql.Add(''''''''where produto_estoque = :produto''''''''); //pesquisa o produto
parambyname (''''''''produto'''''''').Value := ComboEdit1.Text; (edit onde informo o produto que chegou);
OPEN;
//Edit1 tá conectado com a linha quantidade da tabela de estoque
//quando realiza a pesquisa edit recebe automaticamente o quantitativo do produto pesquisado
//variaveis do tipo inteiro
quant := StrToInt (edit1.text); //edit1 recebe o valor que já tá no estoque
quantidade := StrToInt (editquantidade.text); //editquantidade recebe o valor que chegou
quantidade2 := quant + quantidade;
edit1.text := IntToStr (quantidade2);
Edit;
post;
End;
o código executa mas quando vai salvar o produto que chega, salva o pedido, mas não soma o quantitativo.
Aleksandro Soares
Curtidas 0
Respostas
Natanael Ferreira
03/01/2023
Verificando seu código, creio que faltou a linha em que você seta o campo quantidade que será gravado o novo valor (entre as linhas do Edit e Post).
Exemplo:
Exemplo:
.... // o restante do seu código acima Edit; FieldyByName('quantidade ').value := quantidade2; // inseri essa linha, adapte ao nome do seu campo post;
GOSTEI 0
Arthur Heinrich
03/01/2023
Você não pode se esquecer de que você não é o único usuário operando o sistema.
Imagine que seu estoque possui 100 unidades do produto e dois usuários estão tentando comprar 80 unidades.
Se ambas as requisições chegam simultaneamente, ambos identificarão 100 unidades no estoque, validarão a venda e, como resultado, você terá vendido 160 unidades e o estoque será atualizado com um saldo de 20 unidades.
Nunca podemos confiar em valores lidos e exibidos na tela, pois entre a exibição e o uso da informação, os dados podem ser alterados por outros usuários.
Se quiser manipular dados como estoque ou saldo de conta corrente, por exemplo, sempre atualize o dado no banco.
Por exemplo, para retirar 80 unidades do produto 1, você pode fazer algo como:
Então, você verifica se uma linha foi atualizada ou não. Se foi atualizada, o saldo já está corrigido e garante que outros usuários não utilizarão o produto retirado do estoque. Caso não seja atualizada nenhuma linha, é sinal de que o produto não existe, ou não possui a quantidade necessária em estoque.
Imagine que seu estoque possui 100 unidades do produto e dois usuários estão tentando comprar 80 unidades.
Se ambas as requisições chegam simultaneamente, ambos identificarão 100 unidades no estoque, validarão a venda e, como resultado, você terá vendido 160 unidades e o estoque será atualizado com um saldo de 20 unidades.
Nunca podemos confiar em valores lidos e exibidos na tela, pois entre a exibição e o uso da informação, os dados podem ser alterados por outros usuários.
Se quiser manipular dados como estoque ou saldo de conta corrente, por exemplo, sempre atualize o dado no banco.
Por exemplo, para retirar 80 unidades do produto 1, você pode fazer algo como:
update estoque set saldo = saldo - 80 where id_produto = 1 and saldo >= 80
Então, você verifica se uma linha foi atualizada ou não. Se foi atualizada, o saldo já está corrigido e garante que outros usuários não utilizarão o produto retirado do estoque. Caso não seja atualizada nenhuma linha, é sinal de que o produto não existe, ou não possui a quantidade necessária em estoque.
GOSTEI 0