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

Autoincrement Select Currval('teste') As Codigo


Alexandre Becker

Pergunta

criei em um banco uma sequencia chamada entidades_entid_seq

quero ver o valor dela atual

select currval('entidades_entid_seq') as codigo

ERROR: currval of sequence "entidades_entid_seq" is not yet defined in this session

tudo bem..... eu já descobri pesquisando por aí que o valor so pode ser visto no momento da transacao

ou depois de se imcrementar o valor desta variavel com uma operacao

select nextval('nomedasequencia') as codigo

mas aí a sequencia já andou..... ex: 200

select nextval('nomedasequencia') as codigo

a sequencia ficou 201

quero unica e excluisavente mostra qual o numero do proximo registro a ser inserido ao meu usuario na tela na hora que ele clicar num botao inserir da vida.... ou ate que seja.... na hora que o registro é gravado.... o que atualmente não acontece... ( este mesmo problema eu tinha com firebird

e resolvi com generator facilmente e sem problemas pois podia ver o valor atual no momento necessário )

não axei quem sabe como recuperar isto....... PORÉM!!

abra o pgadmin.....

então eu criei minha sequencia e nunca usei.... mas no porque admin quando eu abro a sequencia ( dois cliques em cima da mesma ) , ele me traz as informacoes dela sem afetar o contador atual e sem mensagem de erro..... mostra lá..... atual 1 limite tal.....

alguém sabe como resolver meu problema???

ou fazer um outro tipo de contador não transacional ou seja... nada de select count(*) ou selec max(id) from tabela tal porque isso aí transacionalmente é a maior furada que existe, porque se você tiver N usuarios utilizando ex: o mesmo cadastro de clientes e não estiver utilizando bloqueio para insercao também ( o que é ridículo porque enquanto um usa todo o resto fica parado ) o valor vai dar problema e gerar uma mensagem de duplicidade ou violacao de key (ex: 2 usuarios inserindo um novo registro ao mesmo tempo - dificil? imagine 100 usuarios utilizando mesmo cadastro ao mesmo tempo.... já aconteceu comigo....) ( SIM ESTOU USANDO AUTO INCREMENTo COMO CHAVE PRIMARIA kkk..... TEM PROBLEMAS? SIM!! POSSO PERDER Alguns numeros da SEQUENCIA ..... mas tudo bem so quero uma facilidade

se alguém puder me ajudar eu agradeço muito porque to trincando a cuca pesquisando e ateh agora não achei nada 100%

DESDE JÁ agradeço a todos os interessados!!!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Eu só mostro a chave primária depois de inserir o registro, não antes. Até porque uso isso para diferenciar se o registro está sendo incluído (quando o chave primária é 0) ou se está sendo editado (chave primária diferente de 0). Não seria mais simples?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Eu só mostro a chave primária depois de inserir o registro, não antes. Até porque uso isso para diferenciar se o registro está sendo incluído (quando o chave primária é 0) ou se está sendo editado (chave primária diferente de 0). Não seria mais simples?

Abraços,

Graymalkin

Ola, quanto ao resultado de estar inserindo ou não a tabela tem um label que já controla o estado dela, mas seguinte.... o problema é que o valor não aparece nem depois de gravado... somente se eu fechar a tabela e abrir novamente...... mas normalmente abro a tabela localizando pelo codigo ID diferencial unico para a tabela....... e sem codigo!! como fazer isto???

infelizmente agora estou com outros problemas ateh mais sérios que este pois trabalho com postgre a pouquissimo tempo com delphi 6 + zeos 6.6 e postgre 8.2.4-1 em windows.... e toda a vez que dou um comando close na query ( ex: select * from clientes ) ele dá um erro dizendo que não é permitido esta opçao em um dataset fechado.... mas meu deus!! o comando foi justamente para fechar!!! poxa .. gostei tanto do postgre e gostaria de continuar utilizando..... mas um problema como este eu já penei bastante e não consegui resolver.... vou postar um tópico pra ver no que dá..... obrigado pela ajuda!!!

Link para o comentário
Compartilhar em outros sites

  • 0
Ola, quanto ao resultado de estar inserindo ou não a tabela tem um label que já controla o estado dela, mas seguinte.... o problema é que o valor não aparece nem depois de gravado... somente se eu fechar a tabela e abrir novamente...... mas normalmente abro a tabela localizando pelo codigo ID diferencial unico para a tabela....... e sem codigo!! como fazer isto???

É, parece realmente que tem algo errado aí. Eu acabo de fazer o INSERT e posso fazer o SELECT CURRVAL(...) normalmente e o código me é retornado.

infelizmente agora estou com outros problemas ateh mais sérios que este pois trabalho com postgre a pouquissimo tempo com delphi 6 + zeos 6.6 e postgre 8.2.4-1 em windows.... e toda a vez que dou um comando close na query ( ex: select * from clientes ) ele dá um erro dizendo que não é permitido esta opçao em um dataset fechado.... mas meu deus!! o comando foi justamente para fechar!!! poxa .. gostei tanto do postgre e gostaria de continuar utilizando..... mas um problema como este eu já penei bastante e não consegui resolver.... vou postar um tópico pra ver no que dá..... obrigado pela ajuda!!!

Já tentou usar ADO (com um provedor OLEDB) ou outra classe de acesso? Eu não uso Delphi, mas sei que nela também existem formas diferentes de se conectar a um banco de dados. Tenho usado PostgreSQL com VB.NET e uso o npgsql para acesso.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

tinha erros mesmo, mas tudo resolvido... acredito que era a respeito da versao que eu instalei... com o update funcionou tudo certinho, estou seguindo a dica do nosso colega acima de deixar o valor em branco na inserçao pois agora ao gravar o valor é retornado corretamente na tela!!!

agora a DAC ficou normal tambem, mas vou utilizar mesmo o ZEOS por ser um projeto free e não precisar pagar por atualizacoes futuras!!

mutio obrigado a todos pela participação, espero daki a algum tempo poder ajudar a todos como estou sendo ajudado!!!

Abraço aí galera!! :lol:

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...