GARANTIR DESCONTO

Fórum Insert sem duplicar dados #420381

24/07/2012

0

Eu estou tentando achar um meio simples de inserir dados numa tabela mas que não se repitam caso ja existam.
Tenho uma tabela simples onde para gravar os dados uso o INSERT,VALUES mas caso o dado do campo CODIGOS ja exista,não faça nada,apnas grava dados novos.
Uso o Firebird 2.0.3 com Delphi.
Obrigado a quem puder auxiliar.
Vtrx

Vtrx

Responder

Posts

24/07/2012

Cleber Campos.

se for insert por select

tente assim
insert into tabela1(codigo)
select codigo from tabela2 tb2
where not exists(select first 1 tb1.codigo from tabela1 tb1 where tb1.codigo = tb2.codigo)

caso nao seja, explique melhor o seu caso.

Espero ter ajudado.

Cleber
Responder

Gostei + 0

24/07/2012

William

Colega caso vc possua conhecimentos em triggers e exceptions, basta criar uma excption (Registro duplicado!) e dispará-la usando um trigger do tipo Before Insert, ou seja, vc monta um select para verificar se o código já existe na tabela caso exista vc dispara a exception e cancela o INSERT.
Responder

Gostei + 0

24/07/2012

Deivison Melo

Caso desejar você também pode criar uma chave única...
Responder

Gostei + 0

24/07/2012

Vtrx

Vou testar a solução proposta,mas deixa eu complementar melhor para voces.
Eu estou usando ,para inserir registros,a seguinte sequencia;
INSERT INTO tabela.
( CODIGOS,DESCRIT,POSI,STATUS,PRECO,ESTOQUE,MODELO,COMPO,MOD,DESC,QUANT,TIP)
Values (valores,etc)
Eu tenho uma rotina que carrega num StringGrid os dados retirados de um arquivo .xls
Eu verifico se MODELO ja existe e dou o aviso encerrando a inserção.
Mas tenho uma rotina de inserção manual e se eu gravar um registro com um certo modelo,quando vou carregar o arquivo .xls,a rotina não deixa,mesmo que o arquivo contenha mais registros do mesmo modelo.
Então programei a opção de informar se Deseja acrescentar mais registros novos.
É nesta parte que preciso apenas gravar os registros que não tenham o campo CODIGOS repetido.
Responder

Gostei + 0

25/07/2012

Vtrx

Pessoal,eu fiz umas rotinas para fazer oque estava precisando,vejam oque acha.
Cada vez que vou cadastrar um arquivo .xls que contén os ítens comforme a minha tabela,eu seleciono todos os códigos relacionado ao modelo para saber se o modelo ja foi cadastrado.
Usei 3 memos(invisível),um memo carrega todos os códigos do modelo(fiz uma rotina caso ja exista o modelo cadastrado),o outro memo carrega toda a coluna do StringGrid que contem os códigos a cadastrar e o terceiro memo é carregado com a diferença de códigos.
Então com um outro Stringgrid,que é uma cópia invisível do String principal,eu carregeui as linha com os códigos novos(baseado na listagem do Memo3),aí gravao e mostro num MessageBox quantos ítens novos foram gravados.
Será que não conseguiria isso usando comandos SQL no FB 2.0?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar