Ir para conteúdo

POWERED BY:

Arquivado

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

ZecaLoteiro

AutoNumeração

Recommended Posts

Olá, tenho um fórmulário para cadastro de empresa com vários campos, entre eles o campo "cod".

 

Gostaria que esse campo recebe-se, ao carregar o formulário, o PROXIMO CÓDIGO (imediato) para cadastro... ..hum..

se os cadastros vão até o 116, o formulário mostra o número 117.

 

Só que se entre os cadastros houver um "buraco", preciso que ele retorne NÃO o ultimo código, e sim o código que "tape o buraco".

 

???

Alguém tem ideia de como fazer isso ?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas seu campo é autonumeração? Se for não tem como. Não pode ser de autonumeração.

 

Abraços...

Então, não fiz ainda pois não ser como fazer... é viavel ele ficar consultando o banco de dados pra saber qual é o proximo ?

Ow isso torna o programa lento... (levando em consideração que o banco tem cerca de 20.000 registros)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não ficará lento, pois você irá selecionar apenas um único campo. E basta usar a função MIN do Sql Server que ele trará o menor número para você, tendo buraco ou não. Mas se você já quer que este número apareça logo quando abrir o cadastro, como vai reservar o número para outro usuário não pegar o mesmo? Se dois usuários abrirem o mesmo formulário mais ou menos juntos?

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for assim nao tem como usar a autonumeração do DB

 

mas pode fazer via programação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não ficará lento, pois você irá selecionar apenas um único campo. E basta usar a função MIN do Sql Server que ele trará o menor número para você, tendo buraco ou não. Mas se você já quer que este número apareça logo quando abrir o cadastro, como vai reservar o número para outro usuário não pegar o mesmo? Se dois usuários abrirem o mesmo formulário mais ou menos juntos?

 

Abraços...

Então, na hora de incluir no DB ele verifica denovo, se ja houver o codigo ele da uma msg, incrementa o campo cod, e aguar a solicitação do usuario para incluir novamente.

 

se for assim nao tem como usar a autonumeração do DB

 

mas pode fazer via programação

Voce poderia me dar uma força com isso ?

Há algum comando em SQL que retorna o menor valor permitido ? ou algo do tipo ??

 

Ou tenho que ir selecionando registro por registro e comparando o registro PASSADO com o registro ATUAL ??? Se a diferença for > 1 então eu uso PASSADO + 1 ????????

 

Há outra forma de fazer isso ???

 

Mto obrigado pela força ae pessoal.

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

[Então, não fiz ainda pois não ser como fazer... é viavel ele ficar consultando o banco de dados pra saber qual é o proximo ?

Ow isso torna o programa lento... (levando em consideração que o banco tem cerca de 20.000 registros)

 

Não entendi o problema e porque não usa autonumeração. A autonumeração é um campo automático e que não necessita de código algum. Não torna também a aplicação mais lenta porque é feito na base de dados (ou no servidor se for o caso).

 

Depois, após inserir, pode verificar qual o ID do registo inserido, usando por exemplo o @@IDENTITY

 

Veja este exemplo: @@IDENTITY – Verificando Registo Inserido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite,

 

Acredito que uma das formas de se fazer isso seria o seu programa executar um Select na base Sql, da seguinte forma:

 

string Sql = "SELECT TOP 1 IDENTIFICADOR FROM TABELA ORDER BY IDENTIFICADOR DESC";

Dessa forma o programa nao sofreria em performance pois só traria 1 registro e começaria a consulta do ultimo.

 

Jogue o valor em uma variavel e some 1, ou voce poderia somar na propria query.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

[Então, não fiz ainda pois não ser como fazer... é viavel ele ficar consultando o banco de dados pra saber qual é o proximo ?

Ow isso torna o programa lento... (levando em consideração que o banco tem cerca de 20.000 registros)

 

Não entendi o problema e porque não usa autonumeração. A autonumeração é um campo automático e que não necessita de código algum. Não torna também a aplicação mais lenta porque é feito na base de dados (ou no servidor se for o caso).

 

Depois, após inserir, pode verificar qual o ID do registo inserido, usando por exemplo o @@IDENTITY

 

Veja este exemplo: @@IDENTITY – Verificando Registo Inserido

 

Opa... então não posso usar AutoNumeração pois tenho que permitir que o usuario altere esse código, tenho que carregar um código, mas como sugestão, o usuário pode altera-lo para um código (no caso do registro já possuir um código diferente do sugerido)... de qualquer forma muito obrigado.

;)

 

 

Boa noite,

 

Acredito que uma das formas de se fazer isso seria o seu programa executar um Select na base Sql, da seguinte forma:

 

string Sql = "SELECT TOP 1 IDENTIFICADOR FROM TABELA ORDER BY IDENTIFICADOR DESC";

Dessa forma o programa nao sofreria em performance pois só traria 1 registro e começaria a consulta do ultimo.

 

Jogue o valor em uma variavel e some 1, ou voce poderia somar na propria query.

 

Espero ter ajudado.

Opa, ajudou sim, mas não resolveu, não posso fazer isso pq ele me retornaria sempre o ÚLTIMO código da tabela, e se houver "buraco" entre os códigos, ele não corrigirá...e apontará pro final, continuando assim o buraco....

 

De qualquer forma valew...

 

 

Tentarei com o MIN, procurarei mais material pra ver se funciona...

 

Obrigado a todos !

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse utiliza o MIN ele irá retornar o menor valor do campo.

 

Abraços...

Opa, você diz pra ser algo do tipo:

select min (cod) as 'Código' from tb_cadastro
?????

 

Assim ele me retorna o primeiro código, o menor, e não o menor disponivel... :(

Ou eu estou fazendo errado...

 

Valew.

;)

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.