Jump to content

Recommended Posts

Posted

boas

estou a desenvolver um projeto em visual basic com ligação a uma base de dados de access e o problema é que quando apago um registo um novo que va criar nao ocupa o "id" daquele

por exemplo:

crio os seguintes registos(id nome idade):

1 ze 22

2 manuel 35

3 joaquim 21

4 rui 19

5 pedro 35

apago um deles(fica assim):

1 ze 22

3 joaquim 21

4 rui 19

5 pedro 35

ao adicionar um novo fica assim:

1 ze 22

3 joaquim 21

4 rui 19

5 pedro 35

6 luis 27

e eu queria que ele tomasse o id mais "pequeno", ou seja que ficasse assim:

1 ze 22

2 luis 27

3 joaquim 21

4 rui 19

5 pedro 35

Posted

Olá,

A maneira correcta de fazer é assim mesmo, imagine que tens as tabelas relacionadas, e que foi feita uma venda para o cliente com o ID 2, depois vc remove o ID 2 e adiciona um novo cliente com ID 2, tá a ver o problema que irá dar...

Porém se quiseres fazer mesmo como disseste, o ID (chave primaria) não pode ser auto-increment, em access acho que é autonumber, tem que ser long.

Depois quanto inseres um novo registo, tens que fazer um ciclo para saber qual o primeiro numero disponível de uma sequência. Penso não existir nada "automático" que faça isso, tens de passar todos os ID's para um array.

code em VB6:

Option Explicit

Dim MyArr() As Variant

Private Sub Command1_Click()
   Dim i As Integer, iUltimoDaSeq As Integer, iInserir As Integer

   'Ver Qual Numero a Inserir
   iInserir = 1
   If (Not MyArr) = -1 Then
    Debug.Print "O Array não foi inicializado"
   Else
    For i = LBound(MyArr) To UBound(MyArr)
	    iUltimoDaSeq = iUltimoDaSeq + 1
	    If MyArr(i) = iUltimoDaSeq Then iInserir = MyArr(i) + 1 Else Exit For
    Next    'i
   End If
   MsgBox "Numero a inserir: " & iInserir

   'Adicionar novo numero ao Array
   Dim iTamanhoArray As Integer, iCont As Integer, i2 As Integer
   If (Not MyArr) = -1 Then iTamanhoArray = 0 Else iTamanhoArray = UBound(MyArr) + 1
   ReDim Preserve MyArr(iTamanhoArray) As Variant
   MyArr(iTamanhoArray) = iInserir
   For i = LBound(MyArr) To UBound(MyArr) - 1
    iCont = iCont + 1
    If iCont = iInserir Then
	    For i2 = UBound(MyArr) To i + 1 Step -1
		    MyArr(i2) = MyArr(i2 - 1)
	    Next    'i
	    MyArr(i) = iInserir
	    Exit For
    End If
   Next    'i

   'Listar conteudo do Array
   Debug.Print ".:Conteudo do Array:."
   For i = LBound(MyArr) To UBound(MyArr)
    Debug.Print "Index: " & i & "  Valor: " & MyArr(i)
    'MsgBox "Index: " & i & "  Valor: " & MyArr(i)
   Next    'i

End Sub

Private Sub Form_Load()
   Dim i As Integer

   MyArr = Array(1, 3, 4, 5)

   For i = LBound(MyArr) To UBound(MyArr)
    MsgBox "Index: " & i & "  Valor: " & MyArr(i)
   Next    'i
End Sub

A parte de Adicionar novo numero ao Array, não é necessária, foi só para completar este exemplo, apenas o que te interessa é saber Qual Numero a Inserir, não te esqueças que tens que passar todos os ID's para um array antes de fazeres isto.

Espero ter ajudado,

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.