ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como manipular erro de conteúdo duplicado - [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jfranco.delphi
Novato
Novato


Registrado: Sábado, 20 de Junho de 2009
Mensagens: 86

MensagemEnviada: Seg Jun 03, 2013 4:20 pm    Assunto: Como manipular erro de conteúdo duplicado - [Resolvido] Responder com Citação

Boa tarde a todos,
Estou com o seguinte problema: tenho uma tabela que possui quatro campos: Código, Descrição, Abreviação e Sequência. A chave primária é o Código, mas não quero que a Descrição possa ser duplicada. Qual a melhor solução: incluir o campo Descrição na chave primária ou fazer uma verificação de duplicidade por um índice?


Editado pela última vez por jfranco.delphi em Qua Jun 05, 2013 8:53 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Deganutti
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Janeiro de 2012
Mensagens: 244

MensagemEnviada: Seg Jun 03, 2013 4:37 pm    Assunto: Re: Como manipular erro de conteúdo duplicado Responder com Citação

jfranco.delphi escreveu:
Boa tarde a todos,
Estou com o seguinte problema: tenho uma tabela que possui quatro campos: Código, Descrição, Abreviação e Sequência. A chave primária é o Código, mas não quero que a Descrição possa ser duplicada. Qual a melhor solução: incluir o campo Descrição na chave primária ou fazer uma verificação de duplicidade por um índice?

Então não aconcelho usar pk em descrição
acho melhor validar quando esta em tempo de execução.


[]'s
_________________
"Se quiser testar o caráter de alguém, dê-lhe o poder" - Abraham Lincoln
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
jfranco.delphi
Novato
Novato


Registrado: Sábado, 20 de Junho de 2009
Mensagens: 86

MensagemEnviada: Seg Jun 03, 2013 4:56 pm    Assunto: Re: Como manipular erro de conteúdo duplicado Responder com Citação

Deganutti escreveu:
jfranco.delphi escreveu:
Boa tarde a todos,
Estou com o seguinte problema: tenho uma tabela que possui quatro campos: Código, Descrição, Abreviação e Sequência. A chave primária é o Código, mas não quero que a Descrição possa ser duplicada. Qual a melhor solução: incluir o campo Descrição na chave primária ou fazer uma verificação de duplicidade por um índice?

Então não aconcelho usar pk em descrição
acho melhor validar quando esta em tempo de execução.


[]'s

Nesse caso, qual seria a melhor forma de validação?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Deganutti
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Janeiro de 2012
Mensagens: 244

MensagemEnviada: Ter Jun 04, 2013 8:04 am    Assunto: Re: Como manipular erro de conteúdo duplicado Responder com Citação

jfranco.delphi escreveu:
Deganutti escreveu:
jfranco.delphi escreveu:
Boa tarde a todos,
Estou com o seguinte problema: tenho uma tabela que possui quatro campos: Código, Descrição, Abreviação e Sequência. A chave primária é o Código, mas não quero que a Descrição possa ser duplicada. Qual a melhor solução: incluir o campo Descrição na chave primária ou fazer uma verificação de duplicidade por um índice?

Então não aconcelho usar pk em descrição
acho melhor validar quando esta em tempo de execução.


[]'s

Nesse caso, qual seria a melhor forma de validação?


usa uma query quando for gravar ou sair do componente de descrição do que voce necessita, faça um select contendo a descrição depois usa o componente query.recordcont > 0 para validar ex:

Código:

Codigo da query;

sq = sua query.

sq.close;
sq.sql.clear;
sq.sql.add('select * from sua_tabela where sua_tabela.descrição = :descricao');
sq.parambyname('descricao').asstring := edit.text;
sq.open;

if sq.recordcount > 0 then
   showmessage('BOOOG Não e possivel utilizar esta descrição');


Lembrando que muitas vezes os campos são case isensitive ou seja, você deve ter um padrão de charcase para upper ou lower para que isso funcione de forma adequada, e creio que isso não seja o problema para você.

espero que te ajude.

[]'s
_________________
"Se quiser testar o caráter de alguém, dê-lhe o poder" - Abraham Lincoln
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 04, 2013 10:33 am    Assunto: Responder com Citação

Bom dia,

jfranco.delphi, não sei qual banco de dados você está utilizando, mas se vai ser comum fazer consultas pela descrição ou ordenando pela mesma pode ser considerada a opção de criar um índice específico com a descrição.
Outra alternativa seria verificar a duplicidade executando uma query dentro de uma trigger antes do Insert e do Update.

Espero que ajude.


Editado pela última vez por imex em Seg Abr 29, 2024 12:09 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jfranco.delphi
Novato
Novato


Registrado: Sábado, 20 de Junho de 2009
Mensagens: 86

MensagemEnviada: Ter Jun 04, 2013 11:39 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

jfranco.delphi, não sei qual banco de dados você está utilizando, mas se vai ser comum fazer consultas pela descrição ou ordenando pela mesma pode ser considerada a opção de criar um índice específico com a descrição.
Outra alternativa seria verificar a duplicidade executando uma query dentro de uma trigger antes do Insert e do Update.

Espero que ajude.

imex, é justamente essa a minha dúvida: já tenho o índice pela descrição, mas não sei como faço para testar a duplicidade do conteúdo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jfranco.delphi
Novato
Novato


Registrado: Sábado, 20 de Junho de 2009
Mensagens: 86

MensagemEnviada: Ter Jun 04, 2013 11:45 am    Assunto: Re: Como manipular erro de conteúdo duplicado Responder com Citação

Deganutti escreveu:
jfranco.delphi escreveu:
Deganutti escreveu:
jfranco.delphi escreveu:
Boa tarde a todos,
Estou com o seguinte problema: tenho uma tabela que possui quatro campos: Código, Descrição, Abreviação e Sequência. A chave primária é o Código, mas não quero que a Descrição possa ser duplicada. Qual a melhor solução: incluir o campo Descrição na chave primária ou fazer uma verificação de duplicidade por um índice?

Então não aconcelho usar pk em descrição
acho melhor validar quando esta em tempo de execução.


[]'s

Nesse caso, qual seria a melhor forma de validação?


usa uma query quando for gravar ou sair do componente de descrição do que voce necessita, faça um select contendo a descrição depois usa o componente query.recordcont > 0 para validar ex:

Código:

Codigo da query;

sq = sua query.

sq.close;
sq.sql.clear;
sq.sql.add('select * from sua_tabela where sua_tabela.descrição = :descricao');
sq.parambyname('descricao').asstring := edit.text;
sq.open;

if sq.recordcount > 0 then
   showmessage('BOOOG Não e possivel utilizar esta descrição');


Lembrando que muitas vezes os campos são case isensitive ou seja, você deve ter um padrão de charcase para upper ou lower para que isso funcione de forma adequada, e creio que isso não seja o problema para você.

espero que te ajude.

[]'s

Deganutti, no código que você sugeriu acima, acho que no if a comparação deve ser " > 1 " e não " > 0 ", pois mesmo se houver apenas um registro com aquela descrição o resultado sempre vai dar verdadeiro, estou certo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 04, 2013 11:52 am    Assunto: Responder com Citação

Não sei qual banco de dados você está utilizando mas acho que você pode definir o índice como único, o que vai fazer com que ocorra um erro ao tentar gravar alguma descrição duplicada.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Deganutti
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Janeiro de 2012
Mensagens: 244

MensagemEnviada: Ter Jun 04, 2013 1:19 pm    Assunto: Re: Como manipular erro de conteúdo duplicado Responder com Citação

jfranco.delphi escreveu:

Deganutti, no código que você sugeriu acima, acho que no if a comparação deve ser " > 1 " e não " > 0 ", pois mesmo se houver apenas um registro com aquela descrição o resultado sempre vai dar verdadeiro, estou certo?


no caso >1.
ou segue pela trigger que faz o mesmo que o exemplo que lhe passei so que no caso da trigger somente quando fazer alguma alteração no bando. Sem consulta.


[]'s
_________________
"Se quiser testar o caráter de alguém, dê-lhe o poder" - Abraham Lincoln
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB