ACHAR PROXIMO CODIGO DISPONIVEL PARA CADASTRO

HUBER.FABIO 17/01/2013 10:12:14
#417604
Olá amigos !

Tem como achar o próximo código disponível para ser usado no cadastro no campo [Ô]código do produto[Ô] por exemplo. O que acontece é que meu cadastro está com vários códigos sortidos como 1, 5, 10, 18, 36, etc... gostaria nesse caso que o sistema reconheça o próximo disponível os ainda não usados.
IRENKO 17/01/2013 11:00:29
#417612
Essa coisa de campo vago é uma tristeza!!

Tente isso:

Dim Cont As Integer
Cont = 1

Set NumeroVago = Banco4.Execute([Ô]SELECT max(Val(ID)) AS MaiorValor FROM Tabela [Ô])
With NumeroVago
If .EOF = True And .BOF = True Then
Cont = [Ô]1[Ô]
Else
.MoveLast
Cont = Val(.Fields([Ô]MaiorValor[Ô])) + 1
End If
Codigo = Cont
MsgBox Codigo
If Not (NumeroVago Is Nothing) Then .Close: Set NumeroVago = Nothing
End With
OMAR2011 17/01/2013 11:03:51
#417614
Um mais simples

sSQL = [Ô]SELECT MAX(Codigo) as Tot From Tabela[Ô]
Set rs = Banco.Execute(sSQL)
If Not IsNull(rs!Tot) Then
Text1.Text = Val(rs!Tot + 1) [ô]Vai aparecer adicionado mais 1 do próximo registro
Text1.Text = Val(rs!Tot ) [ô]Vai aparecer o último resgistro
end if
Valeu.
HUBER.FABIO 17/01/2013 13:25:18
#417629
Olá amigos !

Pelas rotinas passadas pelos amigos estou entendendo que o sistema acha o último código cadastrado e acrescenta + 1 para achar o código atual. O que exatamente preciso é achar o primeiro código ainda não usado para que eu possa aproveitar. Ex: tenho cadastrado clientes com códigos 1,3,4,5 ...neste exemplo não tenho o cliente 2 cadastrado, gostaria de achar o primeiro código não usado para aproveitá-lo.
FILMAN 17/01/2013 13:48:55
#417630
Resposta escolhida
Faça assim:

Public Function CodigoCadastro() As Long
Dim i As Long
Dim cod As Long
Dim codAux As Long
Dim rst As New ADODB.RecordSet

rst.Open [Ô]SELECT CodigoID FROM tbClientes Order By CodigoID ASC[Ô], SuaConexao, adOpenDynamic, adLockOptimistic
If rst.RecordCount > 0 Then
cod = 0
For i = 1 To rst.RecordCount
codAux = CLng(rst([Ô]CodigoID[Ô]))
If cod < codAux AND (cod + 1) <> codAux Then
cod = cod + 1
Exit For
Else
cod = codAux
End If
rst.MoveNext
Next i
If cod = codAux Then cod = cod + 1
Else
cod = 1
End If

CodigoCadastro = cod
End Function


Para chamar a função é só fazer assim

Dim Codigo As Long

Codigo = CodigoCadastro
Tópico encerrado , respostas não são mais permitidas