Fórum firebird em rede evitar duplicacao de dados #342126
21/05/2007
0
olá galera
tenho um aplicativo delphi/firebird que coloquei o mesmo em rede, ai surgiu o seguinte problema:
nesta empresa 1 cliente as vezes tem mais de uma ficha contendo o seu cadastro:
o operador da maquina 1 pega uma ficha desse cliente, e o operador da maquina 2 pega outra ficha deste mesmo cliente, ambos o cadastram ao mesmo tempo, ai cliente ficar com o cadastro duplicado no sistema, ai nao fica legal.
eu uso código abaixo para evitar que o cpf do cliente seja digitado mais de uma vez:
[b:d3fa8c8f5b]BOK := inputquery(´Cadastrar Cliente´,´Entre com o CPF, ou * para nenhum:´,ST);
if BOK then begin
if st <>´*´ then begin
if dm.Clientes.Locate(´cpf´,ST,[]) then begin
ShowMessage (´Este cliente já está cadastrado !!!´);
abort;
end;
end;
end;
dm.clientes.Refresh;
dm.clientes.Insert;
if st <> ´*´ then
dm.clientes[´cpf´] := St;
st := ´´;
dbedit2.SetFocus;[/b:d3fa8c8f5b]
digitando em uma só maquina, nao dar problema nenhum, mas fiz um teste digitando esse cliente ao mesmo tempo em maquinas diferentes, ai o registro fica gravado duas vezes no mesmo mesmo banco, como eu faço para evitar essa duplicidade?.
desde ja agradeço,
Adriano
tenho um aplicativo delphi/firebird que coloquei o mesmo em rede, ai surgiu o seguinte problema:
nesta empresa 1 cliente as vezes tem mais de uma ficha contendo o seu cadastro:
o operador da maquina 1 pega uma ficha desse cliente, e o operador da maquina 2 pega outra ficha deste mesmo cliente, ambos o cadastram ao mesmo tempo, ai cliente ficar com o cadastro duplicado no sistema, ai nao fica legal.
eu uso código abaixo para evitar que o cpf do cliente seja digitado mais de uma vez:
[b:d3fa8c8f5b]BOK := inputquery(´Cadastrar Cliente´,´Entre com o CPF, ou * para nenhum:´,ST);
if BOK then begin
if st <>´*´ then begin
if dm.Clientes.Locate(´cpf´,ST,[]) then begin
ShowMessage (´Este cliente já está cadastrado !!!´);
abort;
end;
end;
end;
dm.clientes.Refresh;
dm.clientes.Insert;
if st <> ´*´ then
dm.clientes[´cpf´] := St;
st := ´´;
dbedit2.SetFocus;[/b:d3fa8c8f5b]
digitando em uma só maquina, nao dar problema nenhum, mas fiz um teste digitando esse cliente ao mesmo tempo em maquinas diferentes, ai o registro fica gravado duas vezes no mesmo mesmo banco, como eu faço para evitar essa duplicidade?.
desde ja agradeço,
Adriano
Xadriano
Curtir tópico
+ 0
Responder
Posts
21/05/2007
Paullsoftware
Se vc usa ClientDataSet a melhor solução para pesquisar no banco é usando comandos SQL fazendo o uso do LOCATE ele pesquisa os dados carregados na memória, por isso não vai encontrar o registro que já esta gravado no banco...
espero te-lo ajudado :wink:
BOK := inputquery(´Cadastrar Cliente´,´Entre com o CPF, ou * para nenhum:´,ST); with cdsClientes do begin close; commandtext := ´select * from clientes where cpf=:cpf´ params[0].value := BOK; open; if IsEmpty then begin //comandos usados no caso de não retornar nenhum registro end else begin ShowMessage (´Este cliente já está cadastrado !!!´); Exit; end;
Responder
Gostei + 0
22/05/2007
Nigro
Se o cadasstramento é feito por vários micros ao mesmo tempo, o esquema deve ser pauleira, então, ficar localizando vai dar broad cast na rede, e ficar tudo lento, o mais aconselhável é por exemplo, fazer a chave primária, sendo o CNPJ, então logo após digitar o CNPJ, você dá um post na tabela assim que a segunda pessoa digitar essa mesma ficha, você trata o erro e dá mensagem na tela.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)