![ActiveDelphi - Índice do Fórum](templates/subSilver/images/logo_phpBB.gif) |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
jfranco.delphi Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sábado, 20 de Junho de 2009 Mensagens: 86
|
Enviada: Seg Jun 03, 2013 4:20 pm Assunto: Como manipular erro de conteúdo duplicado - [Resolvido] |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Deganutti Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
![](http://cdn2.iconfinder.com/data/icons/sketchy-icons-v-1-2/128/starcraft2_copy.png)
Registrado: Terça-Feira, 24 de Janeiro de 2012 Mensagens: 244
|
Enviada: Seg Jun 03, 2013 4:37 pm Assunto: Re: Como manipular erro de conteúdo duplicado |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
jfranco.delphi Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sábado, 20 de Junho de 2009 Mensagens: 86
|
Enviada: Seg Jun 03, 2013 4:56 pm Assunto: Re: Como manipular erro de conteúdo duplicado |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Deganutti Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
![](http://cdn2.iconfinder.com/data/icons/sketchy-icons-v-1-2/128/starcraft2_copy.png)
Registrado: Terça-Feira, 24 de Janeiro de 2012 Mensagens: 244
|
Enviada: Ter Jun 04, 2013 8:04 am Assunto: Re: Como manipular erro de conteúdo duplicado |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
imex Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jun 04, 2013 10:33 am Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
jfranco.delphi Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sábado, 20 de Junho de 2009 Mensagens: 86
|
Enviada: Ter Jun 04, 2013 11:39 am Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
jfranco.delphi Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sábado, 20 de Junho de 2009 Mensagens: 86
|
Enviada: Ter Jun 04, 2013 11:45 am Assunto: Re: Como manipular erro de conteúdo duplicado |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
imex Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jun 04, 2013 11:52 am Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Deganutti Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
![](http://cdn2.iconfinder.com/data/icons/sketchy-icons-v-1-2/128/starcraft2_copy.png)
Registrado: Terça-Feira, 24 de Janeiro de 2012 Mensagens: 244
|
Enviada: Ter Jun 04, 2013 1:19 pm Assunto: Re: Como manipular erro de conteúdo duplicado |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|