Fórum Código Duplicado - Key violation dbExpress e Firibird #326656

02/08/2006

0

Estou com problema, estou migrando para interbase um sistema que usava paradox, so que preciso corrigir um problema que enfrentava no sistema antigo com paradox. Quanto utilizava o sitema em rede, o usuário em um computador iniciava uma nova venda, o sistema possuia uma função que gerava o novo código do pedido, só que o outro usuário em outra máquina iniciava uma operação também ao mesmo tempo então gerava o mesmo código, o usuário que salvasse primeiro não tinha problemas, mas o outro usuário apresentava key violation ou então os produtos vendidos caiam no cadastro do outro cliente cadastro no outro computador sendo que os códigos dos pedidos coinscidiam. Espero que entendam o meu problema


Visualdesigner

Visualdesigner

Responder

Posts

02/08/2006

Marco Salles

Existem algumas soluçoes.. Voce disse estar usando o Firebird

uma das saidas consiste em criar um Gerador e um Trigger no Banco.. O IBexpert <Utilitário> muito usado daz isto facilmente para voce

Agora o exemplo , segue usando a tecnologia DbExpress .. Voce não disse qual o componente de acesso que voce pretente usar

Coloque um componente TSqQuery e faça as suas configuraçoes
<presumo que saiba isto>
Na Propriedade Sql Do COmponente coloque a instrução

select gen_id(Nome Do Seu Gerador, 1) as ValorChave from rdb$database;


Com eu disse , estou dando um exemplo com DbExpress , então voce deve ter Um SqlConection , SqlQuery , Um DataSetProvinder , Um DataSource , Um ClientDataSet devidamente configurados , alem do Outro SqlQuery que retornara o o Valor Da Chave....


procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet); 
begin 
SQLQuery1.Close; 
SQLQuery1.open; 
ClientDataSet1.FieldByName(´NumeroPedido´).AsInteger:=SQLQuery1.FieldByName(´ValorChave´).Asinteger; 
end;


[b:fe857d7ae1]Nesse caso , o codigo do pedido so é gerado No fim , mas nada impeça que voce gere no inicio , é so alterar o evento do ClintDataset[/b:fe857d7ae1]

Fazendo assim , voce não tera dois pedidos com mesno numero , pq quem cuida disso para voce é o Banco...

Boa sorte


Responder

Gostei + 0

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

Aceitar