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


Xadriano

Xadriano

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...
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;
espero te-lo ajudado :wink:


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

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

Aceitar