ERRO NA AUTO NUMERACAO

USUARIO.EXCLUIDOS 10/08/2007 21:37:30
#230449
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:

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 Sub



Modulo:

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


USUARIO.EXCLUIDOS 10/08/2007 22:19:52
#230451
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"
LCSD 11/08/2007 00:11:31
#230459
Resposta escolhida
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

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.....

USUARIO.EXCLUIDOS 11/08/2007 12:31:06
#230485
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
LCSD 11/08/2007 13:09:33
#230489
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 :

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 Sub


Public 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......

DANIKULL 12/08/2007 02:09:43
#230545
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??
Tópico encerrado , respostas não são mais permitidas