lealdl Posted May 19, 2014 at 06:39 PM Report #556289 Posted May 19, 2014 at 06:39 PM (edited) 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 May 19, 2014 at 07:20 PM by nunopicado GeShi, Indentação
nunopicado Posted May 19, 2014 at 07:31 PM Report #556292 Posted May 19, 2014 at 07:31 PM 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.
lealdl Posted May 19, 2014 at 08:30 PM Author Report #556299 Posted May 19, 2014 at 08:30 PM Obrigado, amigo! irei rever as linhas do código e pensarei na maneira mais prática. Abraços, qualquer coisa irei chamá-los novamente.
nunopicado Posted May 19, 2014 at 08:54 PM Report #556305 Posted May 19, 2014 at 08:54 PM 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.
lealdl Posted May 20, 2014 at 05:25 PM Author Report #556393 Posted May 20, 2014 at 05:25 PM Acho que o jeito mais rápido é bloquear no BD. Mas como faço isso no database desktop e tabela Paradox? Grato!
nunopicado Posted May 20, 2014 at 05:36 PM Report #556395 Posted May 20, 2014 at 05:36 PM 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.
lealdl Posted May 21, 2014 at 05:47 PM Author Report #556519 Posted May 21, 2014 at 05:47 PM (edited) 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 May 21, 2014 at 08:43 PM by thoga31 Tags code + GeSHi
nunopicado Posted May 23, 2014 at 03:34 PM Report #556788 Posted May 23, 2014 at 03:34 PM (edited) 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 May 23, 2014 at 03:34 PM 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.
lealdl Posted May 23, 2014 at 04:14 PM Author Report #556794 Posted May 23, 2014 at 04:14 PM 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 1 Report
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now