Olá amigos. Estou fazendo uma função para escolher uma posição de chave entre 36. A questão é de acordo com a entrada e saída de registro a menor posição livre da chave pode estar desordenada, por exemplo pode estar ocupado de 1 a 4 e também de 6 a 23, logo a menor posição livre seria 5.
Fiz um código que compara uma array e um recordset que é descarregado em outra array ambas ordenadas.
Assim se o numero está na primeira que tem todas as posições, mas não está na segunda significa que a posição está livre.
Porém, estou apanhando... já tentei de tudo... o código funciona bem até 2... depois fica repetindo o numero 2 e não escolhe posições acima de 2.
peço ajuda porque não consigo mais prosseguir.
segue o código!
Obrigado a todos.
Fiz um código que compara uma array e um recordset que é descarregado em outra array ambas ordenadas.
Assim se o numero está na primeira que tem todas as posições, mas não está na segunda significa que a posição está livre.
Porém, estou apanhando... já tentei de tudo... o código funciona bem até 2... depois fica repetindo o numero 2 e não escolhe posições acima de 2.
peço ajuda porque não consigo mais prosseguir.
segue o código!
Obrigado a todos.
- Código:
Dim pChave As Integer
pChave = Nz(DMax("chave", "movimento", "isNull(horaSaída)"), 0)
If pChave = 0 Then
Me.chave = 1
Else
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim avarRecords As Variant
Dim intRecord As Integer
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Select chave From movimento Where IsNull([horaSaída]) and [chave] >= 1 Group by chave Order by chave;", dbOpenSnapshot)
Dim contchave As Integer
contchave = DCount("chave", "movimento", IsNull([horaSaída]) And Not IsNull(chave))
Dim i As Long
Dim p As Long
Dim v1() As Variant
Dim v2 As Variant
Dim v3 As Integer
If IsNull(rst1) Then
MsgBox "null"
Else
MsgBox "NAO NULO"
End If
v1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36)
v2(i) = rst.GetRows(countchave)
Debug.Print UBound(v2) + 1 & " records retrieved."
rst.Close
dbs.Close
Dim str1 As String
For i = LBound(v2) To UBound(v2)
str1 = str1 & ", " & v2(i)
Next i
p = 0
On Error Resume Next
Do While p < 36
If (v1(i) <> v2(i)) Then
v3 = v1(i)
p = 36
End If
Loop
Me.chave = v3
End If