Array
(
)

Como evitar duplicidade de registros?

Connection
   - 05 nov 2009

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!!!

Pjrm1470
   - 05 nov 2009

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.

0
|
0

Jorge Abreu
   - 06 nov 2009

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:   #Código     TForm1 = class(TForm)     ....     ...     private         { Private declarations }         Box: String;         function CheckRecord: Boolean;         ,,,,     public         { Public declarations }         ....     end;   #Código   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;   No botão de inclusão voce pode colocar esse código:   #Código   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;   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 

0
|
0