Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucke SkyWalker

Run-time Error 3709

Recommended Posts

Estou desenvolvendo um software para controle de funcionários em VB 6.0 e estou com problema em uma chamada do datagrid.

 

O erro

 

Run-time error 3709

A conexão não pode ser usada para realizar esta operação. Ela está fechada ou é invalida neste contexto.

 

O Módulo.

Option Explicit
Public banco As ADODB.Connection
Public tabela As ADODB.Recordset
Public caminho As String
Public Sub AcessoBD()
Set banco = New ADODB.Connection
banco.CursorLocation = adUseClient
banco.Provider = "Microsoft.Jet.OleDB.4.0"
banco.Open "Data Source = " & caminho
End Sub

Private Sub Main()
caminho = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\HMTR\Desktop\SESMT\hmtr\hmtr.mdb;Persist Security Info=False"
AcessoBD
If App.PrevInstance = True Then
MsgBox " O sistema já está em execução!", 48, "Atenção"
End
End If
frmSplash.Show
End Sub
Private Sub form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
tabela.Close
Set tabela = Nothing
End Sub

O DataGrid

Option Explicit
Public banco As ADODB.Connection
Public tabela As ADODB.Recordset
Private Sub Command1_Click()
Dim resposta As Integer
resposta = MsgBox("Deseja sair do programa?", 36, "Cadastro de Clientes")
If resposta = 6 Then
End
End If
End Sub

Private Sub DataGrid1_DblClick()
DataGrid1.Col = 0
frmfuncionario.Labcod.Caption = DataGrid1.Text
DataGrid1.Col = 1
frmfuncionario.txtnome.Text = DataGrid1.Text
DataGrid1.Col = 2
frmfuncionario.txtre.Text = DataGrid1.Text
DataGrid1.Col = 3
frmfuncionario.txtadmissao.Text = DataGrid1.Text
DataGrid1.Col = 4
frmfuncionario.txtdemissao.Text = DataGrid1.Text
DataGrid1.Col = 5
frmfuncionario.txtcargo = DataGrid1.Text
DataGrid1.Col = 6
frmfuncionario.txtcaixa = DataGrid1.Text
Unload Me
frmfuncionario.Show
frmfuncionario.Command3.Enabled = True
frmfuncionario.alterar.Enabled = True
frmfuncionario.txtnome.Enabled = False
frmfuncionario.txtcargo.Enabled = False
frmfuncionario.txtadmissao.Enabled = False
frmfuncionario.txtdemissao.Enabled = False
frmfuncionario.txtre.Enabled = False
frmfuncionario.txtcaixa.Enabled = False
frmfuncionario.alterar.SetFocus
End Sub

Private Sub DataGrid1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
DataGrid1.SetFocus
KeyAscii = 0
DataGrid1.Col = 0
frmfuncionario.Labcod.Caption = DataGrid1.Text
DataGrid1.Col = 1
frmfuncionario.txtnome.Text = DataGrid1.Text
DataGrid1.Col = 2
frmfuncionario.txtre.Text = DataGrid1.Text
DataGrid1.Col = 3
frmfuncionario.txtadmissao.Text = DataGrid1.Text
DataGrid1.Col = 4
frmfuncionario.txtdemissao.Text = DataGrid1.Text
DataGrid1.Col = 5
frmfuncionario.txtcargo = DataGrid1.Text
DataGrid1.Col = 6
frmfuncionario.txtcaixa = DataGrid1.Text
Unload Me
frmfuncionario.Show
frmfuncionario.txtnome.Enabled = False
frmfuncionario.txtcargo.Enabled = False
frmfuncionario.txtadmissao.Enabled = False
frmfuncionario.txtdemissao.Enabled = False
frmfuncionario.txtre.Enabled = False
frmfuncionario.txtcaixa.Enabled = False
frmfuncionario.alterar.SetFocus
End If
End Sub

Private Sub Form_Load()
Set tabela = New ADODB.Recordset

-(O erro é nesta linha)
tabela.Open "Select ficha, nome, re, admissao, demissao, cargo, caixa from hmtr", banco

Set DataGrid1.DataSource = tabela
End Sub

Private Sub funcionario_Click()
Unload Me
frmfuncionario.Show
End Sub

Private Sub txtnome_Change()
Set tabela = New ADODB.Recordset
tabela.Open "Select ficha, nome, re, admissao, demissao, cargo, caixa from hmtr where nome like'" & txtnome.Text & "%'", banco
Set DataGrid1.DataSource = tabela
End Sub

Private Sub txtnome_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
DataGrid1.SetFocus
KeyAscii = 0
End If
End Sub
Sou novato em Vb por isso estou apnhando igual vaca na horta, então peço a ajuda dos amigos programadores

Compartilhar este post


Link para o post
Compartilhar em outros sites

banco.Open "Data Source = " & caminho
Aí não deveria ser assim:

banco.Open caminho
Já que na variável caminho você já coloca o "Data Source":

caminho = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\HMTR\Desktop\SESMT\hmtr\hmtr.mdb;Persist Security Info=False"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu copiei seu código e tentei reproduzi-lo...

 

Se você, ao invés de executá-lo de uma vez, der F8 também achará o problema sozinho...

 

Ele executa primeiro o form_load e não o sub_main do módulo, que é onde você está fazendo a conexão com o banco.

 

O que pode fazer é, que também acho que é muito mais útil, é colocar a parte da conexão do banco também no form_load.

 

Te garanto que assim funcionará, tenta ai e se tiver alguma dúvida pode gritar...

 

Abraços e boa sorte.

 

Eu copiei seu código e tentei reproduzi-lo...

 

Se você, ao invés de executá-lo de uma vez, der F8 também achará o problema sozinho...

 

Ele executa primeiro o form_load e não o sub_main do módulo, que é onde você está fazendo a conexão com o banco.

 

O que pode fazer (que também acho que é muito mais útil) é colocar a parte da conexão do banco também no form_load.

 

Te garanto que assim funcionará, tenta ai e se tiver alguma dúvida pode gritar...

 

Abraços e boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.