Jump to content
lealdl

registro duplicado em delphi

Recommended Posts

lealdl

Pessoal, como faço pra não inserir um registro duplicado em um cadastro?

Fiz assim, mas continua sempre inserindo outro registro, por mais que eu digite o mesmo nome. Será que alguém me ajuda a apontar o erro?

--- C O D I G O ---

procedure Tfcadastro.BitBtn7Click(Sender: TObject);
begin
  dm1.tbaluno.Refresh;
  dm1.tbaluno.first;
  if DBEdit2.Text = dm1.tbalunoAluno.value then
     begin
        showmessage('Registro já Incluído');
        exit;
        dm1.tbaluno.Close;
     end
  else begin
          showmessage('Registro Incluído com Sucesso!');
          dm1.tbaluno.Edit;
          Dbedit3.Text:=DateToStr(Date());
          dm1.tbaluno.post;
       end;
end;

---F I M ---

Se os amigos puderem me ajudar, agradeço. Sei que a dúvida é básica, mas não estou conseguindo sair disso. Obrigado!

Edited by nunopicado
GeShi, Indentação

Share this post


Link to post
Share on other sites
nunopicado

Como estás a fazer, apenas estás a testar com o primeiro registo, e não com o total da tabela.

Por outro lado, estás sempre a editar o mesmo, e não a inserir registos novos.

Quanto à tua dúvida, de três uma:

- Ou bloqueias a base de dados, e metes o campo como Unique - a própria base de dados não irá deixar que hajam duplicados

- Ou filtras o dataset para o nome, e só inseres novo se o RecordCount não devolver resultados filtrados (o que significa que não há nenhum com registo onde o filtro seja validado)

- Usas uma query adicional para pesquisar o nome inserido antes de fazer o Insert.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
lealdl

Obrigado, amigo! irei rever as linhas do código e pensarei na maneira mais prática. Abraços, qualquer coisa irei chamá-los novamente.

Share this post


Link to post
Share on other sites
nunopicado

Obrigado, amigo! irei rever as linhas do código e pensarei na maneira mais prática. Abraços, qualquer coisa irei chamá-los novamente.

Fica à vontade...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
lealdl

Acho que o jeito mais rápido é bloquear no BD. Mas como faço isso no database desktop e tabela Paradox?

Grato!

Share this post


Link to post
Share on other sites
nunopicado

Acho que o jeito mais rápido é bloquear no BD. Mas como faço isso no database desktop e tabela Paradox?

Grato!

Nunca usei Paradox, mas procura como criar um índice (tal como crias o índice primário).

Ao criar, deve-te em algum lado perguntar o tipo, e um deles será "Unique" ou algo parecido.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
lealdl

Mudei um pouco o código, mas o cadastro continua sendo inserido. O que será que estou errando?

if (dm1.tbaluno.State in [dsInsert]) then
begin
if DBEdit2.Text <> '' then
begin
if dm1.tbaluno.Locate('ALUNO', TRIM(DBEdit2.Text), [loPartialKey, loCaseInsensitive]) then
begin
Application.MessageBox('Aluno ja cadastrado!','Sistema',MB_OK + MB_ICONEXCLAMATION);
end;
end;
Exit;
end;

Fiz como o amigo indicou, inserindo um índice secundário, mas não sei o porquê não salva a tabela com o novo índice. Por isso resolvi mudar as linhas de código, mas mesmo assim não deu. O problema é que tenho pouco conhecimento, tudo o que aprendi foi lendo e praticando. Não tenho conhecimento de como criar uma query, mas vou tentar.

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
nunopicado

Se tentaste na DB e não deu, é porque não ficou bem...

Essa é infalível, pois a propria DB não guarda se o valor for contra os índices.

À parte disto, podes usar uma query para pesquisar antes de guardar.

Testa assim:

1. O teu DBEdit2 tem de passar a ser um TEdit simples, e não um TDBEdit.

2. Crias uma Query para usar de forma temporária, independente da outra que já usas

3. Depois do user inserir lá dados, corres a query:

tbTemp.SQL.Text:='SELECT Aluno FROM tuatabela WHERE Aluno = '+edit2.text;
tbTemp.ExecSQL;
if tbTemp.RecordCount>0
  then begin
          Showmessage('Aluno já inserido');
          Exit;
       end;

4. Depois deste código, continuas com o que precisas fazer, não esquecendo de atribuir o valor do edit2 à base de dados (pois comom não é um TDBEdit, não se mete lá sozinho).

dm.tbAluno.Edit;
dm.tbAluno.FieldValues['Aluno']:=edit2.text;
dm.tbAluno.Post;

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
lealdl

Obrigado, nunopicado! Irei dar uma estudada no que me indicou. Quero entender o que programo, não somente copiar e colar. Sua ajuda está sendo de grande valor!

Abraços,

Luciano

  • Vote 1

Share this post


Link to post
Share on other sites
Joao Marjonio B Colares

Amigo aonde coloca os códigos citados acima

Obrigada

.

 

 

Edited by Joao Marjonio B Colares

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.