Jump to content
Fórum Script Brasil
  • 0

Autoincrement Select Currval('teste') As Codigo


Alexandre Becker
 Share

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.4k
×
×
  • Create New...