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
Curtir tópico
+ 0
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
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....
[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
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
Clique aqui para fazer login e interagir na Comunidade :)