Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jxfdasilva

Duplicação!!

Recommended Posts

Companheiros,Boa noite para todos. Gostaria de ter um help vosso no seguinte:Tenho uma Tabela criada em MySQL e nela uma série de Campos. Acontece porém, que quando faço o Insert Into, quero evitar que os campos da tabela se dupliquem, ou seja, que se repitam os mesmos dados. Com possuem 7 Campos, a condição é que só, e apenas só, quando todos os valores a introduzir dos 7 Campos sejam iguais, nesta condição não haja inserção. Alguma sugestão?Chave estrangeira apenas não dá, uma vez que a condição é apenas, e só apenas quando os 7 Campos são iguais.Aquele AbraçoMaputo – Moçambique

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chave estrangeira não, mas a chave primária contendo os sete campos pode ser.Apesar de que vai ficar estranho uma chave deste tamanho, mas sei lá, não sei exatamente qual sua necessidade.Pensa ou tenta aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não dá, pq bastaria que um dos campos fosse igual (o campo com PK), para não funcionar! Exemplo, logo que o campo com Chave primária repetisse, logo daria erro. A ideia é simples: Uma Tabela com 7 Campos, sendo um campo PK. Imagina q é possível inserir a qquer momento “n” valores, onde estes valores se podem repetir e ser iguais; Estes valores podem ser até 6 iguais (campos) e 1 diferente. Não podem ser os 7 (campos)iguais!Que tal agora? Acho que fui mais claro…não sei….Abraço Amigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, em termos Lógicos, funciona como se se tratasse de uma Disjunção (Ou... OR): se A é verdadeiro, B é verdadeiro então o resultado é Verdadeiro. Ao contrario, se A é falso, B verdadeiro, saída Verdadeira, e por aí em diante.... Assumindo que ser Falso na saída significa "não validar dados". Assim, só teríamos Falso qdo tivéssemos F -> F -> FNão sei se piorei, ou deu para me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não sei se é prática normal, mas você poderia tranquilamente criar uma PK composta de todos os campos, daí esse "controle" de ter um registro igual passaria para o banco de dados e não para você.Outra solução seria antes de dar o insert você fazer um select da tabela procurando por este registro que está se tentando adicionar, se achar você não dá o insert.Do resto acho que você está complicando um pouco, talvez a solução do select seja a mais simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, você vai receber de um formulário os dados, vamos imaginar (A,B e C), cada um para um campo

 

SELECT count(*) as total from tabela where campoa = 'A' and campob = 'B' and campoc = 'C'

[code=auto:0]

 

Se "total" vir com zero é porque não achou nenhum registro, senão é porque tem algum com os dados exatamente iguais a estes três.

 

beleza.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola a Todos,

 

Bem, não desisti de usar a Sintaxe SQL, mas para já, arranjei uma saída mais airosa, com ajuda do Eduardo Moura Schaukoski . Aí esta:

 

 

Inserindo Registos

 

Para inserir registos em código você pode usar os métodos AppendRecord e InsertRecord, caso você não precise de algum campo, mesmo assim ele deve ser informado com o valor Null.

 

DtmProd.Tbl.AppendRecord([Null, EdtDescricao.Text, EdtPreco.Text]);

 

Localizando Registos

 

Para localizar registos você pode usar vários métodos, mas o melhor deles é o Locate, no exemplo abaixo é feita uma pesquisa exacta.

 

if not DtmCli.Tbl.Locate('CodCli', Edt.Text, []) then

ShowMessage('Cliente não encontrado.');

 

Você também pode fazer uma pesquisa parcial e/ou sem sensitividade de caso usando o terceiro parâmetro, que é um conjunto de opções.

 

DtmCli.Tbl.Locate('Nome', Edt.Text, [loPartialKey, loCaseInsensitive]);

 

Se você precisar fazer uma pesquisa por mais de um campo, separe os nomes dos campos por ponto e vírgula e use a função VarArrayOf para criar um array com os valores que você quer procurar.

 

if not DtmPed.Tbl.Locate('Vendedor;Data', VarArrayOf([EdtVendedor.Text, EdtData.Text]),

[loCaseInsensitive]) then

ShowMessage('O vendedor não realizou nenhuma venda nessa data');

 

Caso os campos pesquisados sejam indexados, a pesquisa será muito mais eficiente, senão será criado um filtro temporário da BDE para localizar os registos.

 

Espero ter contribuído.

 

José

 

Africa

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.