Algoritmo, Delphi, Automação Comercial | Gravação Simultânea Firedac - Fórum DevMedia
Gravação Simultânea Firedac
Algoritmo Delphi Automação Comercial Banco de Dados Modelagem
Acho que o assunto deve ter sido bastante discutido no fórum, mas não encontrei :(
Seguinte, tenho 2 computadores que fazem lançamentos de viagens, simultâneos, como faço para controlar?
Na tela lançamentos dos 2 computadores tenho uma DBGRID com as viagens programadas.
linha-Hora-Destino
01-09:00-norte
02-09:10-sul
02-09:14-norte
03-09:14-Centro
1) Quando chegar um veiculo, o usuário 01 selecionará a viagem 01-09:00-norte.
O dbgrid do usuário 02 deverá ser atualizado para não aceitar a mesma viagem.
2) Chegou dois veículos chegarem simultaneamente, um para o usuário 01 e outro para o usuário 02, consequentemente os dois irão selecionar a mesma viagem 01-09:00-norte. Porém preciso que uma viagem seja para a linha 01-09:00-norte e a outra viagem para linha 02-09:10-Sul.
Como faria para bloquear o lançamento de um dos usuários para que a mesma viagem não seja escolhida por ambos?
Basta antes de realizar qualquer gravação você :
1. Atualiza os dados da tabela
2. Realiza um if no dm.tabela.Locate('TAB_COD;TAB_KEY' , VarArrayOf([valor1,valor2]),[]) then
Valeu, mas acho que não é tão simples assim.
Primeiro, porque os dois usuários e vão "gravar ao mesmo tempo" a mesma viagem, porque um não sabe da viagem do outro.
Segundo, que tem o lance de atualizar a GRID com as viagens quando um fizer uma viagem.
Ninguém trabalha assim?
Reconciliação de Erros e Eventos;
Ambos tem artigos aqui na Devmedia que explicam como fazer:
1º - Eventos: o firebird pode disparar eventos pelo banco. Você precisa nas tabelas criar uma trigger e configurá-las para disparar eventos. O fireDac tem componente para interceptar esses eventos. Assim toda a vez que o FireDac interceptar esses eventos é só atualizar os datasets que os grids de todos os computadores serão atualizados....
2º - Reconciliação de Erros: Banco nenhum grava dois registros ao mesmo tempo, isso é mito, o registro que tiver sido salvo um milésimo de segundo na frente grava primeiro e o segundo sobrescreve...
Reconciliação de erros é um processo que permite o Delphi detectar que um registro acabou de ser alterado e pede ao segundo usuário (que alterou depois) que tome uma providência.
Sugiro que leia os artigos da Devmedia sobre reconciliação e erros e events com firedac (IBX também tem um componente de interceptar eventos)
https://www.devmedia.com.br/view/viewaula.php?idcomp=32064 (video do curso de firedac)
https://www.devmedia.com.br/artigo-clube-delphi-edicao-31-metodos-de-validacao/14603 (final do artigo)