Jump to content

Recommended Posts

Posted

Bom dia pessoas!

Estou num projecto portanto vão-me surgindo dúvidas e eu vou tentando descobrir e postando aqui para ver se já alguém sabe facilitando-me o trabalho.

Bem hoje, a minha dúvida é:

tenho um campo ID que é numeração automatica

Nele ja tinha inserido 6 registos mas apaguei todos.

Depois vou inserir um registo novo na mesma tabela e o ID torna-se 7 e eu nao queria que ela fizesse isso, que se torna-se 1 outra vez. Neste caso toda a vez que uma linha for apagada, conseguir meter no lugar dessa linha apagada um novo registo.

Quem me poder ajudar agradeço imenso.

Cumprimentos

P.S - Estou a utilizar PostgreSQL 9.x e Visual Studio 2010 (VB)

Posted (edited)

boas

espero não estar a dizer baboseira mas

penso que em todas as basededados é assim, para contornar a situação em vez de eliminar o registo faça update. que nem sempre dará certo.

ou então

colocar chave primaria num campo que não tenha dados repetidos.(muito usada)

ou ainda

adicionar um campo numerico para servir de id com chave primaria, numero adicionado via codigo, que depois seria possivel voltar adicionar o numero deletado, mas penso que nada funcional.

cumps

acao

Edited by acao
Posted

Olá,

Eu nunca usei o postgreSQL mas com certeza term como reiniciar a numeração automática.

No Access basta você compactar/reparar o BD após deletar os dados da tabela.

No MySQL você usa o comando/cláusula TRUNCATE SuaTabela

Um Abraço,

Nelson Sousa

Posted

boas

espero não estar a dizer baboseira mas

penso que em todas as basededados é assim, para contornar a situação em vez de eliminar o registo faça update. que nem sempre dará certo.

ou então

colocar chave primaria num campo que não tenha dados repetidos.(muito usada)

ou ainda

adicionar um campo numerico para servir de id com chave primaria, numero adicionado via codigo, que depois seria possivel voltar adicionar o numero deletado, mas penso que nada funcional.

cumps

acao

Olá,

Eu nunca usei o postgreSQL mas com certeza term como reiniciar a numeração automática.

No Access basta você compactar/reparar o BD após deletar os dados da tabela.

No MySQL você usa o comando/cláusula TRUNCATE SuaTabela

olá,

desde já obrigado pela ajuda, mas não era bem isso que tinha em mente,

o meu objectivo era que caso algum registo fosse apagado, o proximo registo ficasse com o número desse de modo a não haver "buracos" nos id's.

Não se se isso é possivel mas gostava de ter ajuda nisso

Obrigado pelo tempo gasto, pela atenção e esforço,

Cumprimentos

Posted

Hum eu sou iniciante e estou a aprender sozinho VB.Net... mas parece-me que podias fazer isso, ao percorrer todos os ids do seguinte modo:

If "subtracao de dois ids consecutivos" = 1 then

Elseif "subtracao de dois ids consecutivos" = 2 then...

Não sei se me estou a fazer entender...

Posted (edited)

Olá,

No Access basta você compactar/reparar o BD após deletar os dados da tabela.

boas

isto apenas funciona se não existirem registo.ou seja para começar de inicio

e foi pedido isto.

Neste caso toda a vez que uma linha for apagada, conseguir meter no lugar dessa linha apagada um novo registo.

cumps

acao

Edited by acao
Posted (edited)

Ah certo,

Nesse caso a numeração automática não funciona, eu pelo menos nunca vi.

O que se pode fazer é utilizar-se de um campo numérico(Inteiro Longo) na tabela, e, toda vez que se for inserir um novo registro, antes da inserção, você pega o último número cadastrado e soma +1.

Talvez essa função te ajude:

   Public Function RetornarIdNumerico(ByVal strQuery As String) As Integer
       Dim cn As New OleDbConnection()
       Try
           'Abrir o banco de dados e passar os
           'parametros da consulta SQL, parametros
           'e ordem de execução e retorna um inteiro.
           cn = AbrirBanco() 'A sub AbrirAbanco desta linha a conexão com o BD
           Dim cmdCommand As New OleDbCommand
           With cmdCommand
               .CommandText = strQuery.ToString
               .CommandType = CommandType.Text
               .Connection = cn
           End With
           Dim dtReader As OleDbDataReader
           dtReader = cmdCommand.ExecuteReader()
           Dim codigo As Integer
           If dtReader.Read() Then
               codigo = dtReader(0)
           End If
           Return codigo
       Catch ex As Exception
           Throw ex
       Finally
           FecharBanco(cn)
       End Try
   End Function
Edited by ribeiro55

Um Abraço,

Nelson Sousa

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.