Ir para conteúdo
Fórum Script Brasil
  • 0

PROBLEMAS COM TABELA TEMPORARIA


Gaabi Motta

Pergunta

Pessoal estou com um problema com o auto incremento em tabelas do Firebird (IBExpert), vou explicar o que está acontecendo:

Tenho uma tabela ItensVendas e uma ItensVendasTEMP, o usuário adiciona itens na ItensVendasTEMP e após inserir todos os itens ele finaliza a venda (neste momento é executada uma Stored Procedure no Firebird, que grava os itens da tabela ItensVendasTEMP para a ItensVendas e depois realiza um delete na ItensVendasTEMP).

O que acontece: Após eu realizar um delete o auto-incremento da ItensVendasTEMP começa a contar do 1, e na proxima vez que eu for gravar os registros na ItensVendas ocorre "violação de chave", pois ela já possui estes valores.

Exemplo:

ItensVendaTemp: (depois de executar a procedure que grava e depois deleta)

Cod Produto

1 Coca-cola

2 Cachorro quente

3 Mouse

ItensVenda (Observem que esta tabela já possui os valores Codigo gerados na venda anterior)

Cod Produto

1 Placa-mãe PCChips

2 Processador Intel

3 Banana

Espero ter explicado bem detalhadamente, mas resumindo é o sequinte:

Mesmo deletando os registros da tabela temporária preciso manter o campo CÒDIGO na mesma sequência.

(no SQL 2000 mesmo ao apagar todos os registros, ao inserir outro, ele segue a seqência do último apagado)

alguém tem uma solução?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Olá...

Bom... esse é mesmo um problema no Firebird... nos outros bancos (até no VisualDbase7 com BDE) o campo AUTOINC não "esquece" a sequência...

Eu uso o MySQL em praticamente todas as aplicações...

Meus colegas que trabalham com as aplicações no Firebird usam uma trigger para sempre gravar o último valor do campo autoinc de uma tabela...

Eu faria o seguinte...

- criaria uma tabela para conter o nome de todas as tabelas e respectivos campos "autoinc"

exemplo:

tabela campo ultimo

pedido idpedido 0

participante idparticipante 32

- antes de incluir um registro novo na tabela (por exemplo) pedido, pego o ultimo usado (0), somo 1 e faco o "insert":

insert into pedido (idpedido, qtde, codigo...) values (1, 10.5, '7893934041911'....);

Logo, a trigger com o "before insert" deverá:

- identificar a tabela que receberá um novo registro, identificando se tem campo autoincrement... se não tiver, prossegue no insert normalmente... e se tiver o campo autoincrement, obtem o ultimo, incrementa e então parte para o insert...

Ok?

Espero ter ajudado...

Link para o comentário
Compartilhar em outros sites

  • 0
veja como usar o autoincremento

Jhonas, eu sei como usar um auto incremento , o problema é o seguinte,

Vamos dizer que eu tenha salvo em minha tabela temporaria 4 itens, aperto o botao gravar esses itens são jogados pra a tabela de origem e a tabela temporaria fica vazia.

quando eu dou um novo registro , seleciona mais 4 itens e jogo na temp, só que ao invés de salvar apartir do ID 5, ela volta a salvar como 1,2,3,4. Na hora em que eu gravo , da erro de violação de chave primaria.

Bom no sql eu consigo realizar isso , pois quando eu do um delete na tabela, ela não reinicia no cod 1, e sim onde parou. Por exemplo , 5. Já o firebird não faz isso !

Link para o comentário
Compartilhar em outros sites

  • 0
Vamos dizer que eu tenha salvo em minha tabela temporaria 4 itens, aperto o botao gravar esses itens são jogados pra a tabela de origem e a tabela temporaria fica vazia.

quando eu dou um novo registro , seleciona mais 4 itens e jogo na temp, só que ao invés de salvar apartir do ID 5, ela volta a salvar como 1,2,3,4. Na hora em que eu gravo , da erro de violação de chave primaria.

Bom no sql eu consigo realizar isso , pois quando eu do um delete na tabela, ela não reinicia no cod 1, e sim onde parou. Por exemplo , 5. Já o firebird não faz isso !

No Interbase ou no Firebird, o campo autoincremento não pode receber valores externos, ou seja, quando voce for salvar os registros da tabela temporária na tabela origem, voce não deve passar o valor do campo autoincremento, o valor será automaticamente incrementado quando voce salvar.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...