Como evitar duplicidade de registros?
05/11/2009
0
Quais comandos necessarios para por em um cadastro de clientes, na hora de inserir os dados não cadastrar dois nomes iguais?
utilizo o simple dataset do dbexpress.
Grato!!!
Connection
Curtir tópico
+ 0
Responder
Posts
05/11/2009
Pjrm1470
Use uma query para buscar o nome que será inserido antes de dar o insert.
| SELECT NOME
| FROM SUATABLE
| WHERE NOME = :NOME
Passe o nome para o parametro. Abra a query e verifique se há o nome. se houver, não grava, se houver grava. (depende da sua logica)
| QueryVerifica.Close;
| QueryVerifica.Parameters[0].Value := Nome;
| QueryVerifica.Open;
| if (QueryVerifica.RecordCount > 0) then //se for maior que zero o nome existe
| ...//então grava
| else //caso contrario num grava
Existe outras maneiras de se verificar, tem gente que verifica se o Field é nulo (particulamente não gosto, pois não se sabe se tem mais de um registro se num vir nulo).
Qualquer coisa, tamo ae.
Att,
Plínio.
| SELECT NOME
| FROM SUATABLE
| WHERE NOME = :NOME
Passe o nome para o parametro. Abra a query e verifique se há o nome. se houver, não grava, se houver grava. (depende da sua logica)
| QueryVerifica.Close;
| QueryVerifica.Parameters[0].Value := Nome;
| QueryVerifica.Open;
| if (QueryVerifica.RecordCount > 0) then //se for maior que zero o nome existe
| ...//então grava
| else //caso contrario num grava
Existe outras maneiras de se verificar, tem gente que verifica se o Field é nulo (particulamente não gosto, pois não se sabe se tem mais de um registro se num vir nulo).
Qualquer coisa, tamo ae.
Att,
Plínio.
Responder
06/11/2009
Jorge Abreu
Particularmente eu prefiro criar um função booleana que verifique se o registro existe na tabela, muito antes de colocar a tabela em modo de inserção, se o registro for encontrado, eu coloco o registro todo nas caixas de textos e em modo de edição, se não for encontrado, ai sim eu coloco a tabela em modo de inserção, aproveitando o valor que foi digitado, é mais prático para o usuário, pois assim voce não precisa acionar novamente o botão de inclusão em caso de não encontrar o registro e saberá se o registro existir no momento em que ele for mostrado todo na tela, permitindo assim uma checagem maior do registro, eis o código:
Declare a função ou no bloco private ou no public da classe e vamos criar uma variável Box do tipo String também em private ou public, assim:
No botão de inclusão voce pode colocar esse código:
Voce deve estar me perguntando o porque usei a função InputBox dentro da função Boolean CheckRecord, o InputBox é um função que coloca uma caixa de texto com um componente TEdit para voce digitar um valor, isto pois se voce estiver utilizando DBEdit que são ligado a dados, é recomendável que não se faça qualquer digitação de pesquisa neles, pois voce corre o risco de gravar dados indesejados na tabela, faça num TEdit a parte, como fiz com o InputBox,
Um abraço
TForm1 = class(TForm) .... ... private { Private declarations } Box: String; function CheckRecord: Boolean; ,,,, public { Public declarations } .... end;
function TForm1.CheckRecord: Boolean; begin Box := InputBox('Digite o nome do Cliente','Checando o registro',''); if (Box = ' ') or (Box = '') then begin ShowMessage('Campo em branco ou operação cancelada'); Result := False; end else with IBDatasetCliente do begin Close; SelectSQL.Clear; SelectSQL.Add('Select * from Cliente Where nomecliente like :nome'); ParamByName('nome').Value := '%' + Box + '%'; Open; if Eof then Result := False else Result := True; end; end;
procedure TForm1.btnIncluirClick(Sender: TObject); begin if CheckRecord then IBDataSetCliente.Edit else if (Box <>'') or (Box <>' ') then begin IBDataSetCliente.Append; IBDataSetCliente.FieldByName('NomeCliente').Value := Box; end; end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)