ERRO NA AUTO NUMERACAO
                    olá amigos + uma vez venho lhes pedir ajuda, bom tenho uma rotina que conecta a recordset, depois mando contar os registros e por fim mando mover para o ultimo registro, só que dá esse erro:
ERRO :
o conjunto de linhas não oferece suporte para busca regressiva.
e essa e a rotina: obrigado
Formulário:
Modulo:
 
                
            ERRO :
o conjunto de linhas não oferece suporte para busca regressiva.
e essa e a rotina: obrigado
Formulário:
Private Sub txtNome_GotFocus()
    'GERANDO ALTA NUMERAÇÃO
    If booAlterar = False Then
       strSql = "SELECT * FROM TBUsuarios"
       Consultar
       With rsSelecao
            If .EOF = False And .BOF = False Then
               If .RecordCount <> -1 Then
                  .MoveLast
                  txtCodigo.Text = zeros(Str(Val(!PKCodigo) + 1), 5)
               End If
            Else
               txtCodigo.Text = zeros("1", 5)
            End If
       End With
    End If
    
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    strSql = Empty
    
End SubModulo:
Public Function Consultar()
    With cnnComando
         .ActiveConnection = cnnBiblio
         .CommandType = adCmdText
         'Monta o comando SELECT para selecionar o registro na tabela:
         .CommandText = strSql
         Set rsSelecao = .Execute
    End With
    
End Function
                    Isso não é auto numeração, isso é numeração manual... Auto numeração é controlada pelo banco!
Para garantir que o último registro sempre é o de maior valor seu comando deveria ser o seguinte:
strSql = "SELECT * FROM TBUsuarios ORDER BY PKCodigo"
Ou ainda poderia ser o primeiro registro retornado, assim não seria necessário usar MoveLast:
strSql = "SELECT * FROM TBUsuarios ORDER BY PKCodigo DESC"
ou melhor ainda, poderia retornar o próximo número a ser usado:
strSql = "SELECT Max(PKCodigo) + 1 FROM TBUsuarios"
                
            Para garantir que o último registro sempre é o de maior valor seu comando deveria ser o seguinte:
strSql = "SELECT * FROM TBUsuarios ORDER BY PKCodigo"
Ou ainda poderia ser o primeiro registro retornado, assim não seria necessário usar MoveLast:
strSql = "SELECT * FROM TBUsuarios ORDER BY PKCodigo DESC"
ou melhor ainda, poderia retornar o próximo número a ser usado:
strSql = "SELECT Max(PKCodigo) + 1 FROM TBUsuarios"
                    Amigo ...qual eh o banco q vc esta usando ?
Só para adiantar....
se for mysql vc pode ter uma auto numeração da seguinte maneira :
Crie uma tabela chamada sequencia no seu banco com apenas um campo
Insira um registro
Dai vc pode usar a tabela para gerar sequência de números
utilizando a instrução abaixo :
ok.....
                
            Só para adiantar....
se for mysql vc pode ter uma auto numeração da seguinte maneira :
Crie uma tabela chamada sequencia no seu banco com apenas um campo
CREATE TABLE sequencia (id INT NOT NULL);Insira um registro
INSERT INTO sequencia VALUES (0);Dai vc pode usar a tabela para gerar sequência de números
utilizando a instrução abaixo :
UPDATE sequencia SET id=LAST_INSERT_ID(id+1);ok.....
                    olha amigos, eu estou usando o access, mais como eu posso usar a auto numeração do access para ser exibido no meu txt.
AH vou testar o que vcs me passaram, obrigado
                
            AH vou testar o que vcs me passaram, obrigado
                    BEM.
Isto depende do tipo de ambiente q vc está progrando...
se for multi-usuário existe tecnicas adequadas para este procedimento......
ser for mono-usuario, vc deverá colocar no botão (INSERIR OU NOVO CADASTROS) um instrução que identifique qual foi o ultimo registros OU inserindo apenas dados de um campo (desde que a tabela naum tenha campos que naum permita o preenchimento NULL).
EXEMPLO :
EH ISSO AE......
Dessa forma vc pode utilizar para até para ambientes multi-usuarios...ok
fui......
                
            Isto depende do tipo de ambiente q vc está progrando...
se for multi-usuário existe tecnicas adequadas para este procedimento......
ser for mono-usuario, vc deverá colocar no botão (INSERIR OU NOVO CADASTROS) um instrução que identifique qual foi o ultimo registros OU inserindo apenas dados de um campo (desde que a tabela naum tenha campos que naum permita o preenchimento NULL).
EXEMPLO :
Private Sub gConex()
Set rsCompras = New ADODB.Recordset
    rsCompras.Source = "SELECT ID " & _
    "FROM Compras ORDER by id"
    rsCompras.CursorLocation = adUseClient
    rsCompras.CursorType = adOpenKeyset
    rsCompras.LockType = adLockOptimistic
    rsCompras.Open , bd
End SubPublic Sub GerarIDCompras()
gConex
If rsCompras.EOF Then
id = 1
frmNewFornecedores.txtNumNota = id
rsCompras.AddNew
frmNewFornecedores.txtNumNota = id
frmNewFornecedores.lblPedidoInterno = id
rsCompras.Fields("ID") = id
rsCompras.Update
frmNewFornecedores.txtObservacao.SetFocus
Else
        rsCompras.MoveLast
        id = rsCompras.Fields("ID") + 1
        rsCompras.AddNew
        rsCompras.Fields("ID") = id
        frmNewFornecedores.txtNumNota = id
        frmNewFornecedores.txtNumNota.ForeColor = 255
        frmNewFornecedores.txtObservacao.SetFocus
        frmNewFornecedores.lblPedidoInterno.Caption = id
        rsCompras.Update
End If
End Sub
End Sub EH ISSO AE......
Dessa forma vc pode utilizar para até para ambientes multi-usuarios...ok
fui......
                    Cara esta rotina é super fácil, bom digo isso para mim, qual a conexão que você está utilizando, é ADO se for faça assim:
Private Sub AutoIncremento()
Dim NewId As String
'no meu caso, o banco ja foi aberto e
Set rsTabela = New ADODB.Recordset
With rsTabela
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Source = "Select * From tabela"
.ActiveConnection = [A Conexão com o BD que você esta usando]
.Open
If .BOF = True And .EOF = True Then
NewId = 1
Else
.MoveLast
NewId = !CDPR_ID + 1
End If
txt_id.Text = Format(NewId, "0000")
End With
End Sub
'===========================================================================
Belza???
Faça isso e veja se derá ceto, ok???
aàvocê volta aqui e encerra o tópico, caso contrario poste novamente, ok??
                
            Private Sub AutoIncremento()
Dim NewId As String
'no meu caso, o banco ja foi aberto e
Set rsTabela = New ADODB.Recordset
With rsTabela
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Source = "Select * From tabela"
.ActiveConnection = [A Conexão com o BD que você esta usando]
.Open
If .BOF = True And .EOF = True Then
NewId = 1
Else
.MoveLast
NewId = !CDPR_ID + 1
End If
txt_id.Text = Format(NewId, "0000")
End With
End Sub
'===========================================================================
Belza???
Faça isso e veja se derá ceto, ok???
aàvocê volta aqui e encerra o tópico, caso contrario poste novamente, ok??
                        Tópico encerrado , respostas não são mais permitidas