Ir para conteúdo
Fórum Script Brasil
  • 0

Registro duplicado


seveN

Pergunta

Tenho o código abaixo para evitar que o login do usuário seja cadastrado com o mesmo nome duas vezes, quando incluo um novo login funciona perfeitamente, mas quando vou alterar qualquer usuário retorna que 'login já cadastrado'.

Alguém tem alguma idéia de como contornar isso?

Begin

QRLogin.Close;

QRLogin.Sql.clear;

QRLogin.Sql.add('select * from tab_usuarios where login =:login');

QRLogin.ParamByName('login').asstring:= DBEdit2.text;

QRLogin.Open;

If QRLogin.recordcount > 0 then

Begin

ShowMessage('login já cadastrado');

DBEdit2.SetFocus;

Exit;

End;

Grato.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Este código não evita nada... serve, sim, para pesquisar um usuário...

Qual é realmente o código que cadastra o usuário (o que tem o comando Insert)? (pois o problema está nele e não no código que você colocou na mensagem)...

* Se você definir que o campo "login" seja um campo chave, e único, mesmo que não queira controlar a inclusão, o próprio banco de dados impedirá que um mesmo nome seja cadastrado novamente... se sua tabela está no MySQL, poderia fazer isso:

ALTER TABLE `acmd`.`usuarios` add unique index login(`login`);

Ok?

Link para o comentário
Compartilhar em outros sites

  • 0

Tinha pensado em alterar o campo no banco para não permitir registro duplicados.

O código completo é esse.

Begin

QRLogin.Close;

QRLogin.Sql.clear;

QRLogin.Sql.add('select * from tab_usuarios where login =:login');

QRLogin.ParamByName('login').asstring:= DBEdit2.text;

QRLogin.Open;

If QRLogin.recordcount > 1 then

Begin

//Salvar

DBCadastros.Enabled:= False;

DBGeracao.Enabled:= False;

DBConsultas.Enabled:= False;

DBBackup.Enabled:= False;

DBRelatorios.Enabled:= False;

DBEdit1.Enabled:= False;

DBEdit2.Enabled:= False;

DBEdit3.Enabled:= False;

DBComboBox2.Enabled:= False;

DBComboBox1.Enabled:= False;

DBGridUsers.Enabled:= True;

BtAlterar.Enabled:= True;

BtNovo.Enabled:= True;

BtSalvar.Enabled:= False;

BtExcluir.Enabled:= True;

BtCancelar.Enabled:= False;

BtFechar.Enabled:= True;

Tab_Usuarios.Post;

Tab_Usuarios.Refresh;

End

Else

If QRLogin.recordcount > 0 then

ShowMessage('login já cadastrado');

DBEdit2.SetFocus;

End;

grato.

Link para o comentário
Compartilhar em outros sites

  • 0
Tinha pensado em alterar o campo no banco para não permitir registro duplicados.

O código completo é esse.

Begin

QRLogin.Close;

QRLogin.Sql.clear;

QRLogin.Sql.add('select * from tab_usuarios where login =:login');

QRLogin.ParamByName('login').asstring:= DBEdit2.text;

QRLogin.Open;

If QRLogin.recordcount > 1 then

Begin

//Salvar

DBCadastros.Enabled:= False;

DBGeracao.Enabled:= False;

DBConsultas.Enabled:= False;

DBBackup.Enabled:= False;

DBRelatorios.Enabled:= False;

DBEdit1.Enabled:= False;

DBEdit2.Enabled:= False;

DBEdit3.Enabled:= False;

DBComboBox2.Enabled:= False;

DBComboBox1.Enabled:= False;

DBGridUsers.Enabled:= True;

BtAlterar.Enabled:= True;

BtNovo.Enabled:= True;

BtSalvar.Enabled:= False;

BtExcluir.Enabled:= True;

BtCancelar.Enabled:= False;

BtFechar.Enabled:= True;

Tab_Usuarios.Post;

Tab_Usuarios.Refresh;

End

Else

If QRLogin.recordcount > 0 then

ShowMessage('login já cadastrado');

DBEdit2.SetFocus;

End;

grato.

O problema está porque na edição você não especifica o código.

Faça algo mais ou menos assim:

QRLogin.Sql.clear;
QRLogin.Sql.add('SELECT * FROM TAB_USUARIOS'); 
QRLogin.Sql.add('WHERE LOGIN = :LOGIN');
QRLogin.Sql.add('AND CODUSUARIO <> :CODUSUARIO');
QRLogin.ParamByName('LOGIN').AsInteger    := Login.Text; // Deve ser informado a partir do Edit na tela de alteração
QRLogin.ParamByName('CODUSUARIO').AsInteger := CodUsuario; // Deve ser recuperado da tabela que mostra os registros
QRLogin.Open;

Assim, tu impede que a busca, na alteração, faça referência ao registro que está sendo editado.

[]'s

Editado por Rodrigo Flores
Link para o comentário
Compartilhar em outros sites

  • 0

Olá seveN,

vi que ve tem um btn para cada códgio, Novo, Alterar, etc.

você pode fazer o seguinte tambem. Crie um variavel do tipo booelana

var
  Form1: TForm1;
  novo : boolean;

implementation

{$R *.dfm}
no evento onClick do BtNovo você adiciona: novo : True; nos demais: BtAlterar, BtSalvar, BtExcluir, BtCancelar, e no OnShow do Form: novo := False; e por fim:
begin
  if novo then begin
     QRLogin.Close;
     QRLogin.Sql.clear;
     QRLogin.Sql.add('select * from tab_usuarios where login =:login');
     QRLogin.ParamByName('login').asstring:= DBEdit2.text;
     QRLogin.Open;

     if not QRLogin.IsEmpty then begin
        ShowMessage('login já cadastrado');
        DBEdit2.SetFocus;
        Exit;
     end;
  end;

  //Salvar
  DBCadastros.Enabled:= False;
  DBGeracao.Enabled:= False;
  DBConsultas.Enabled:= False;
  DBBackup.Enabled:= False;
  DBRelatorios.Enabled:= False;
  DBEdit1.Enabled:= False;
  DBEdit2.Enabled:= False;
  DBEdit3.Enabled:= False;
  DBComboBox2.Enabled:= False;
  DBComboBox1.Enabled:= False;
  DBGridUsers.Enabled:= True;
  BtAlterar.Enabled:= True;
  BtNovo.Enabled:= True;
  BtSalvar.Enabled:= False;
  BtExcluir.Enabled:= True;
  BtCancelar.Enabled:= False;
  BtFechar.Enabled:= True;

  Tab_Usuarios.Post;
  Tab_Usuarios.Refresh;
  novo := False;
end;

Abs. Progr'amador.

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...