AJUDA NOS BOTOES DE NAVEGACAO
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
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
vc esta carregando os dados e fechando a tabela . ex: RS.Close ?
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.
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.
Talvez vc não esteja fechando a tabela e carregando os dados
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
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
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.
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.
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
:
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
:
só tirem uma dúvida minha: OLEDB é um tipo de conexão e ODBC é outro correto? eU ÂÂÂ'SO QUERO SABER POR PRECALÇÃO.
VALEU
VALEU
Tópico encerrado , respostas não são mais permitidas