NAVEGAR ENTRE REGISTROS

AZORSCA 18/09/2012 14:28:35
#409893
Boa tarde amigos.

Gostaria de criar dois botões para navegação entre registros da minha base de dados. Os dados são exibidos em um formulário e um grid. Estou utilizando ADO.

Alguém, tem alguma dica para passar?


Abraços
MARCELO.TREZE 18/09/2012 14:41:03
#409894
Você pode usar o próprio select desde que exiba o código em um campo.

exemplo:

anterior
[Ô]SELECT MAX(id) FROM tabela Where id < [Ô] & txtcod

proximo
[Ô]SELECT MAX(id) FROM tabela Where id > [Ô] & txtcod

ultimo
[Ô]SELECT MAX(id) FROM tabela[Ô]

primeiro
[Ô]SELECT MIN(id) FROM tabela[Ô]
AZORSCA 18/09/2012 14:57:53
#409897
Não existe algum componente que faça isto?

AZORSCA 18/09/2012 15:26:32
#409905
Desta maneira é apenas selecionado o último código ou o primeiro, tanto faz, ele não traz todos os dados que preciso.

Como posso fazer?
OMAR2011 18/09/2012 15:58:04
#409908
[txt-color=#e80000]Do jeito que peguei na época.[/txt-color]

Título da Dica: Conexão ADO um pouco mais profissional e usando Command

Postada em 22/4/2003 por ®ogerVB
--------------------------------------------------------------------------------
Neste exemplo de conexão estou usando o ADO 2.7, e 3 TextBox, com os nomes TxtCodigo, TxtNome e TxtObs, e 4 CommandButton com os nome CmdPrimeiro, CmdAnterior, CmdProximo e CmdUltimo para a movimentação no banco! Depois de adicionado esse objetos pode e a referencia pode copiar o seguinte código:

Public Conexao As ADODB.Connection
Private RsTabela As ADODB.Recordset
Private Cmd As ADODB.Command
_______________________________________________________________________

Private Sub Atualizar()
TxtCodigo.Text = RsTabela([Ô]codigo[Ô])
TxtNome.Text = RsTabela([Ô]nome[Ô])
TxtObs.Text = RsTabela([Ô]obs[Ô])
End Sub
_______________________________________________________________________

Private Sub CmdAnterior_Click()
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conexao
Cmd.CommandType = adCmdText
Cmd.CommandText = [Ô]select * from tabela where codigo=(select max(codigo) from tabela where codigo < ?)[Ô]
Cmd.Parameters(0).Value = TxtCodigo.Text
Set RsTabela = Cmd.Execute

If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
Set Cmd = Nothing
End Sub
_______________________________________________________________________

Private Sub CmdPrimeiro_Click()
Set RsTabela = New ADODB.Recordset
RsTabela.Open [Ô]Select * From Tabela where codigo=(select min(codigo) from tabela)[Ô], Conexao, adOpenDynamic

If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
End Sub
_______________________________________________________________________

Private Sub CmdProximo_Click()
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conexao
Cmd.CommandType = adCmdText
Cmd.CommandText = [Ô]select * from tabela where codigo=(select min(codigo) from tabela where codigo > ?)[Ô]
Cmd.Parameters(0).Value = TxtCodigo.Text
Set RsTabela = Cmd.Execute

If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
Set Cmd = Nothing
End Sub
_______________________________________________________________________

Private Sub CmdUltimo_Click()

Set RsTabela = New ADODB.Recordset
RsTabela.ActiveConnection = Conexao
RsTabela.CursorLocation = adUseClient
RsTabela.CursorType = adOpenDynamic
RsTabela.Open [Ô]Select * From Tabela where codigo=(select max(codigo) from tabela)[Ô]

If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
End Sub
_______________________________________________________________________

Private Sub Form_Load()
[ô]abre banco
Set Conexao = New ADODB.Connection
Conexao.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source= [Ô] & App.Path & [Ô]\banco.mdb[Ô]
Frame1.Enabled = False
CmdPrimeiro_Click
End Sub

MARCELO.TREZE 18/09/2012 15:59:00
#409909
como eu disse ele acaba trazendo sim desde que vc se baseie em um codigo que é exibido no textbox

tem como vc postar seu código, ou o código qe tentou usar.

AZORSCA 18/09/2012 16:08:33
#409911
Marcelo olhe o código abaixo:

[ô] Navega para o primeiro registro da tabela
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]SELECT MIN(controle) FROM ger105[Ô]
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly

[ô] Verifica qual o estado da nota e exibe no lblStatus
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]B[Ô] Then
lblStatus.Caption = [Ô]Nota Baixada[Ô]
End If
[ô] Verfica se estado atual da nota está removido
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]R[Ô] Then
lblStatus.Caption = [Ô]Nota Removida[Ô]
End If
[ô] Verifica se estado atual da nota está aberto
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]A[Ô] Then
lblStatus.Caption = [Ô]Nota Aberta[Ô]
End If

[ô] Se retornar tabela vazia avisa o usuário e sai da função.
If oRecCadC.EOF = True Then
MsgBox [Ô]Não foi possível encontrar registros de compras anteriores, realize uma entrada.[Ô]
Exit Sub
End If

txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])
txtCodFornecedor.Text = oRecCadC.Fields([Ô]codfornecedor[Ô])
cboFornecedores.Text = oRecCadC.Fields([Ô]nome[Ô])
txtNumNota = oRecCadC.Fields([Ô]numnota[Ô])
txtDescricao.Text = oRecCadC.Fields([Ô]descricao[Ô])
txtAcrescimo.Text = oRecCadC.Fields([Ô]acrescimos[Ô])
txtDesconto.Text = oRecCadC.Fields([Ô]desconto[Ô])
txtBCICMS.Text = oRecCadC.Fields([Ô]bcicms[Ô])
txtValICMS.Text = oRecCadC.Fields([Ô]valicms[Ô])
txtValTotal.Text = oRecCadC.Fields([Ô]valortotalnota[Ô])
[ô] Até este ponto são carregadas somente a parte principal da nota(Dados principais)

[ô] Chama a função para carregar os itens da nota
Carrega_Equip_Ant

Call fechaObjetoConnection(oConCadC)
Call fechaObjetoRecordset(oRecCadC)
MARCELO.TREZE 18/09/2012 16:29:34
#409913
acima vc postou o codigo que carrega o primeiro registro da tabela, quando o código acima é carregado, vc preenche a textbox ( txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])) acredito que seja uma numero sequecial, se for basta fazer o seguinte

crie um botão proximo e cole

txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])

Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]SELECT MAX(controle) FROM ger105 WHERE controle >[Ô] & txtNumControle.Text
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly

não sei se vai funcionar mas teoricamente seria isto

AZORSCA 18/09/2012 16:39:33
#409915
Marcelo da maneira que você postou não funcionou

Fiz assim e deu certo para o Primeiro e para o ùltimo

Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]select * FROM ger105[Ô]
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
oRecCadC.MoveFirst / oRecCadC.MoveLast
MARCELO.TREZE 18/09/2012 17:01:16
#409918
bom não vou ficar fritando sua cabeça como não uso isso a muito tempo não consigo me lembrar como fazer com ADO mas este tópico acredito que te ajude veja

http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=343801
Tópico encerrado , respostas não são mais permitidas