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