AJUDA NOS BOTOES DE NAVEGACAO

USUARIO.EXCLUIDOS 10/07/2005 12:46:58
#93198
Pessoal, preciso de uma ajuda de vc's. Alguém, por favor dê uma luz.

Eu tenho vários módulos em meu sistema. Entre eu tenho o módulo Conexão onde tem as seguintes variáveis declaradas:

Public LocalFonteDados As String
Public DBNome As String
Public DBPassword As String


No meu mdi principal no evento load eu estou atribuindo dessa forma:

LocalFonteDados = App.Path
DBNome = "SGA"

Um dos outros módulos eu tenho várias funções que criei, como Conexao_Gravar, Conexão_Alterar, Conexao_excluir e outras mais. Dentre todas as funções estou fazendo da seguinte forma neste outro módulo:

Option Explicit
Private Conn As ADODB.Connection
Private rs As ADODB.Recordset

Public Function Conexao_Gravar_PCP() As Boolean
Dim ConexaoSQL As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim AbrirBanco As String

AbrirBanco = "DBQ="
AbrirBanco = AbrirBanco & LocalFonteDados & "\" & DBNome & ".mdb; "
AbrirBanco = AbrirBanco & "DRIVER={Microsoft Access Driver (*.mdb)}; "
AbrirBanco = AbrirBanco & "PWD=" & DBPassword
ConexaoSQL.Open AbrirBanco

aí eu faço meu insert into e o resto. Faço essa mesma coisa para o Conexao_Alterar e Conexao_Excluir.

E isso eu faço para os outros módulos. Agora vem meu problema, que sinceramente nunca achei que iria apanhar numa coisa tão simples.

No form que chamo essas funções eu tenho os famosos botões de navegação: primeiro, anterior, próximo e último.

só pra funcionar eu faço o básico:
if rs.bof and rs.EOF then
rs.movenext

e para os outros botões mesma coisa.

só que sempre me dá um erro do tipo não permitido quando o objeto estiver fechado ou quando está bloqueado e outros tipos de erros que naum lembro mais.

gente por favor, me ajudem nisso, please.

valeu
USUARIO.EXCLUIDOS 10/07/2005 16:18:56
#93209
vc esta carregando os dados e fechando a tabela . ex: RS.Close ?
USUARIO.EXCLUIDOS 10/07/2005 18:14:58
#93221
não, eu não estou fechando. oh como está quandoi eu incluo por exemplo:

Dim I As Integer
For I = 0 To (frmpcp.lstPeca.ListCount - 1)
sql = "Insert into PCP (CodRegra, NomeProduto, Departamento, Responsavel, "
sql = sql & "Peca, Dias, Horas, Minutos, Obs )"
sql = sql & "Values ('" & frmpcp.txtCodigoRegra.Text & "', '" & frmpcp.txtNomeProduto.Text & "', "
sql = sql & "'" & frmpcp.cmbDepartamento.Text & "', '" & frmpcp.cmbResponsavel.Text & "', "
sql = sql & "'" & frmpcp.lstPeca.List(I) & "', '" & frmpcp.txtDias.Text & " ', '" & frmpcp.txtHoras.Text & "', "
sql = sql & "'" & frmpcp.txtMinutos.Text & "', '" & frmpcp.txtObs.Text & "' ) "
'MsgBox sql
'Open App.Path & "\SQL.txt" For Output As #1
'Print #1, sql
'Close #1
Set rs = ConexaoSQL.Execute(sql)
Next I

eu não fecho em nenhum lugar.
WEBMASTER 10/07/2005 18:22:22
#93222
Talvez vc não esteja fechando a tabela e carregando os dados
USUARIO.EXCLUIDOS 11/07/2005 08:23:08
#93272
uma dica, você declarou a conexao e o recordset corretamente, agora voce nao precisa e não deve criar novamente, sob pena de ter muitos problemas com isto, apenas set elas:
Option Explicit
Public Conn As ADODB.Connection
Public rs As ADODB.Recordset

Public Function Conexao_Gravar_PCP() As Boolean
Set Conn = New ADODB.Connection
Set RS = New ADODB.Recordset
Dim sql As String
Dim AbrirBanco As String
MARCOSAV 16/07/2005 21:44:38
#94510
Mais uma coisinha... Vc disse (no seu primento post):

só pra funcionar eu faço o básico:
if rs.bof and rs.EOF then
rs.movenext


Bem,
If rs.BOF Then
ele não pode ser EOF
entendeu o que eu quis dizer ???


Mesmo que vc mude o operador para OR, se rs.EOF = True, seu movenext causaria um erro bem aí... Dá uma olhadinha melhor nisso, vlw ???
OBS: Caso vc tenha mencionado isso apenas como força de expressão, então ignore esta resposta, ok ???

Abraço.
JEAN.JEDSON 17/07/2005 08:05:00
#94539
bem... para utilizar os "move", inicialmente o cursor tem que estar no lado do cliente:

rs.cursorlocation = AdUseClient...

quanto aos botões, utilizo como abaixo:

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset

Private Sub Conecta()
On Error GoTo ErroConecta
Desconecta
Set cnn = New ADODB.Connection
cnn.Open "Provider = Microsoft.jet.OLEDB.4.0; Data Source = " & App.Path & "\" & "NomeDoBanco.mdb"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM NomeDaTabela", cnn, adOpenDynamic, adLockOptimistic
Exit Sub
ErroConecta:
MsgBox "Erro ao Conectar com o Banco de Dados:" & vbCrLf & vbCrLf & "Erro: " & Err.Number & vbCrLf & "Descrição: " & Err.Description, vbCritical, "Atenção"
End
End Sub

Private Sub Desconecta()
On Error Resume Next
If cnn.State = adStateOpen Then
cnn.Close
Set cnn = Nothing
End If
If rs.State = adStateOpen Then
rs.Close
Set rs = Nothing
End If
End Sub

Private Sub cmdPrimeiro_Click()
If rs.RecordCount > 0 And rs.absoluteposition > 1 Then rs.MoveFirst
End Sub

Private Sub cmdAnterior_Click()
If rs.RecordCount > 0 And rs.absoluteposition > 1 Then rs.MovePrevious
End Sub

Private Sub cmdPróximo_Click()
If rs.RecordCount > 0 And rs.absoluteposition < rs.RecordCount Then rs.MoveNext
End Sub

Private Sub cmdÃÅ¡ltimo_Click()
If rs.RecordCount > 0 And rs.absoluteposition < rs.RecordCount Then rs.MoveLast
End Sub
:
USUARIO.EXCLUIDOS 25/07/2005 15:35:30
#95942
só tirem uma dúvida minha: OLEDB é um tipo de conexão e ODBC é outro correto? eU ÂÂÂ'SO QUERO SABER POR PRECALÇÃO.

VALEU
Tópico encerrado , respostas não são mais permitidas