Nomes duplicados....
pessoal sou novo em Delphi e n tenho muito material p estudo...
estou precisando de uma rotina q n deixe gravar nomes iguais na Tabela, alguem sabe onde posso encontrar ou ainda se tiver agradeço muito :)!!! valews
estou precisando de uma rotina q n deixe gravar nomes iguais na Tabela, alguem sabe onde posso encontrar ou ainda se tiver agradeço muito :)!!! valews
Hviana
Curtidas 0
Respostas
Repa
23/06/2004
P/ fazer a verificação eu faço a comparação entre o edit (que foi digitado) e o dbedit(que está na tabela)..
Por ex:
If ((tabela.FindKey([UpperCase(trim(Editnome.Text))]) = True)
then
begin
showmessage(´Já existe o nome na tabela´);
end;
Mas, é muito pouco provável que não existam pessoas com o mesmo nome, então sugiro que use + um campo p/ comparação, por exemplo um documento ou o nome da mãe.
Por ex:
If ((tabela.FindKey([UpperCase(trim(Editnome.Text))]) = True)
then
begin
showmessage(´Já existe o nome na tabela´);
end;
Mas, é muito pouco provável que não existam pessoas com o mesmo nome, então sugiro que use + um campo p/ comparação, por exemplo um documento ou o nome da mãe.
GOSTEI 0
Motta
23/06/2004
Ou solução (mais onerosa) é criar um índice único na tabela, a criação depende do bd, mas o índice agiliza a busca pelo nome.
GOSTEI 0
Hviana
23/06/2004
Ou solução (mais onerosa) é criar um índice único na tabela, a criação depende do bd, mas o índice agiliza a busca pelo nome.
blz...mais como eu traduzo essa messagem p/ o usuário???
GOSTEI 0
Reginaldo174
23/06/2004
vc acha que pode existir dois : joão da silva ??
Re: é claro que sim !
Então acho que voce deve usar uma referencia que não exista outra iguais por exemplo o CPF, CNPJ, Identidade, etc...
Dessa forma sua aplicação ficará mais consistente.
Já que está iniciando vá ao www.superdownloads.com.br e procure por Deephi.exe . É um arquivo com 1.600 dicas de delphi que funcionam.
Re: é claro que sim !
Então acho que voce deve usar uma referencia que não exista outra iguais por exemplo o CPF, CNPJ, Identidade, etc...
Dessa forma sua aplicação ficará mais consistente.
Já que está iniciando vá ao www.superdownloads.com.br e procure por Deephi.exe . É um arquivo com 1.600 dicas de delphi que funcionam.
GOSTEI 0
Hviana
23/06/2004
vc acha que pode existir dois : joão da silva ??
Re: é claro que sim !
Então acho que voce deve usar uma referencia que não exista outra iguais por exemplo o CPF, CNPJ, Identidade, etc...
Dessa forma sua aplicação ficará mais consistente.
Já que está iniciando vá ao www.superdownloads.com.br e procure por Deephi.exe . É um arquivo com 1.600 dicas de delphi que funcionam.
Qndo eu disse ´nome´ na verdade quis generalizar...no meu caso especifico é um cadastro de músicas q n pode ter musicas cadastradas c mesmo nome 2 vezes!!!
GOSTEI 0
Motta
23/06/2004
blz...mais como eu traduzo essa messagem p/ o usuário???
qdo se grava é o indice é violado uma mensagem de erro retorna.
faço assim
try
...
excepty
on e:exception do
_begin
____if pos (e.message,´idx_xpto´) > 0 then
_______ShowMessage(´Nome Duplicado´);
_end;
end;
idx_xpto é o nome do indice violado, no Oracle funciona assim ele retorna o objeto que gerou o erro,creioque funciona em outros bd´s , até os mais simples tipo paradox.
nao tenho certeza da sintaxe da function pos, nunca lembro a ordem ....
qdo se grava é o indice é violado uma mensagem de erro retorna.
faço assim
try
...
excepty
on e:exception do
_begin
____if pos (e.message,´idx_xpto´) > 0 then
_______ShowMessage(´Nome Duplicado´);
_end;
end;
idx_xpto é o nome do indice violado, no Oracle funciona assim ele retorna o objeto que gerou o erro,creioque funciona em outros bd´s , até os mais simples tipo paradox.
nao tenho certeza da sintaxe da function pos, nunca lembro a ordem ....
GOSTEI 0
Hviana
23/06/2004
blz...mais como eu traduzo essa messagem p/ o usuário???
qdo se grava é o indice é violado uma mensagem de erro retorna.
faço assim
try
...
excepty
on e:exception do
_begin
____if pos (e.message,´idx_xpto´) > 0 then
_______ShowMessage(´Nome Duplicado´);
_end;
end;
idx_xpto é o nome do indice violado, no Oracle funciona assim ele retorna o objeto que gerou o erro,creioque funciona em outros bd´s , até os mais simples tipo paradox.
nao tenho certeza da sintaxe da function pos, nunca lembro a ordem ....
valew galera...vc´s do forun desenrolam tudo...a união faz a força heheh :idea:
GOSTEI 0
Rm
23/06/2004
Tive a necessidade disto a pouco tempo.Sem pesquisar soluções prontas simplesmente fiz O QUE SEGUE. Experimente é bem pratico. Deleta o registro igual logo apos que inserido e seleciona o já existente.
Para fazer somente primeira letra maisucula SEMPRE.
procedure TForm1.Table3BeforePost(DataSet: TDataSet);
begin
if table3combina.value<> ´´ then begin
table3.Edit;
table3combina.value:= UpperCase(Copy(table3combina.value,1,1))+LowerCase(Copy(table3combina.value,2,Length(table3combina.value)));
end;
end;
Para localizar e deletar registros IGUAIS por locate (locaseInsensitive)
TABLE3COMBINA.VALUE É O REGISTRO QUE SERIA PARA TI ´MUSICA´.
procedure TForm1.Table3AfterPost(DataSet: TDataSet);
VAR
s:string;
r:integer;
begin
s:=table3combina.value;
r:=table3.RecNo;
Table3.Locate(´combina´,s,[LoCaseInsensitive]);
if table3.RecNo<>r then begin
if table3combina.value=s then begin
showmessage (´Registro já existe!!Duplicação foi deletada!Registro já existente está selecionado.´);
table3.recno:=r;
table3.delete;
Table3.Locate(´combina´,s,[LoCaseInsensitive]);
end;
end;
end;
SDS/RM
Para fazer somente primeira letra maisucula SEMPRE.
procedure TForm1.Table3BeforePost(DataSet: TDataSet);
begin
if table3combina.value<> ´´ then begin
table3.Edit;
table3combina.value:= UpperCase(Copy(table3combina.value,1,1))+LowerCase(Copy(table3combina.value,2,Length(table3combina.value)));
end;
end;
Para localizar e deletar registros IGUAIS por locate (locaseInsensitive)
TABLE3COMBINA.VALUE É O REGISTRO QUE SERIA PARA TI ´MUSICA´.
procedure TForm1.Table3AfterPost(DataSet: TDataSet);
VAR
s:string;
r:integer;
begin
s:=table3combina.value;
r:=table3.RecNo;
Table3.Locate(´combina´,s,[LoCaseInsensitive]);
if table3.RecNo<>r then begin
if table3combina.value=s then begin
showmessage (´Registro já existe!!Duplicação foi deletada!Registro já existente está selecionado.´);
table3.recno:=r;
table3.delete;
Table3.Locate(´combina´,s,[LoCaseInsensitive]);
end;
end;
end;
SDS/RM
GOSTEI 0