ABRIR E FECHAR CONEXÃO NO SQLSERVER
Bom dia pessoal,
Estou com uma dúvida com relação a abertura e fechamento do banco de dados.
Pelo que intendi, a conexão com o banco de dados deve ser aberta e fechada a cada ação, evitando assim lentidão e conflitos no sistema, porém, se eu não fecho a conexão a rotina funciona perfeitamente mas, se eu fecho através do comando close, apresenta a seguinte mensagem de erro:
Run time Error [ô]3704[ô]: Operação não permitida quando o objeto está fechado.
Abaixo uma rotina simples de INSERT que estou usando que apresenta o problema relatado acima, lembrando que estou utilizando SQLServer como Banco de Dados:
Dim CNConfBD As New ADODB.Connection
Dim rsConfBD As New ADODB.Recordset
Dim cnnConfBD As New ADODB.Command
Dim CConfBD As Control
CNConfBD.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CNConfBD.Properties([Ô]Data Source[Ô]).Value = [Ô]DESENVOLVIMENTO\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CNConfBD.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CNConfBD.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CNConfBD.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CNConfBD.Open [ô] Abrindo a conexão
Set rsConfBD = New ADODB.Recordset
Set rsConfBD.ActiveConnection = CNConfBD
If txtprovedor.Text <> [Ô][Ô] And txtcaminhobanco.Text <> [Ô][Ô] And txtnomebanco.Text <> [Ô][Ô] And txtusuariobanco.Text <> [Ô][Ô] And txtsenhabanco.Text <> [Ô][Ô] Then
rsConfBD.Open [Ô]INSERT INTO TABCONFBANCO(PROVEDORBD,CAMINHOBD,NOMEBD,USUARIOBD,SENHABD) values ([ô][Ô] & txtprovedor.Text & [Ô][ô],[ô][Ô] & txtcaminhobanco.Text & [Ô][ô],[ô][Ô] & txtnomebanco.Text & [Ô][ô],[ô][Ô] & txtusuariobanco.Text & [Ô][ô],[ô][Ô] & txtsenhabanco.Text & [Ô][ô])[Ô], CNConfBD, adOpenStatic
Else
MsgBox [Ô]Todos os campos devem ser preenchidos![Ô], vbInformation
End If
CNConfBD.Close
rsConfBD.Close
Conforme descrevi acima, se eu não colocar no final o CNConfBD.Close e rsConfBD.Close a rotina funciona perfeitamente, porém a conexão fica aberta, mais se coloco o CNConfBD.Close e rsConfBD.Close no final o erro 3407 acontece.
Alguém poderia me ajudar?
abraço
Rogério Couto
Estou com uma dúvida com relação a abertura e fechamento do banco de dados.
Pelo que intendi, a conexão com o banco de dados deve ser aberta e fechada a cada ação, evitando assim lentidão e conflitos no sistema, porém, se eu não fecho a conexão a rotina funciona perfeitamente mas, se eu fecho através do comando close, apresenta a seguinte mensagem de erro:
Run time Error [ô]3704[ô]: Operação não permitida quando o objeto está fechado.
Abaixo uma rotina simples de INSERT que estou usando que apresenta o problema relatado acima, lembrando que estou utilizando SQLServer como Banco de Dados:
Dim CNConfBD As New ADODB.Connection
Dim rsConfBD As New ADODB.Recordset
Dim cnnConfBD As New ADODB.Command
Dim CConfBD As Control
CNConfBD.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CNConfBD.Properties([Ô]Data Source[Ô]).Value = [Ô]DESENVOLVIMENTO\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CNConfBD.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CNConfBD.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CNConfBD.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CNConfBD.Open [ô] Abrindo a conexão
Set rsConfBD = New ADODB.Recordset
Set rsConfBD.ActiveConnection = CNConfBD
If txtprovedor.Text <> [Ô][Ô] And txtcaminhobanco.Text <> [Ô][Ô] And txtnomebanco.Text <> [Ô][Ô] And txtusuariobanco.Text <> [Ô][Ô] And txtsenhabanco.Text <> [Ô][Ô] Then
rsConfBD.Open [Ô]INSERT INTO TABCONFBANCO(PROVEDORBD,CAMINHOBD,NOMEBD,USUARIOBD,SENHABD) values ([ô][Ô] & txtprovedor.Text & [Ô][ô],[ô][Ô] & txtcaminhobanco.Text & [Ô][ô],[ô][Ô] & txtnomebanco.Text & [Ô][ô],[ô][Ô] & txtusuariobanco.Text & [Ô][ô],[ô][Ô] & txtsenhabanco.Text & [Ô][ô])[Ô], CNConfBD, adOpenStatic
Else
MsgBox [Ô]Todos os campos devem ser preenchidos![Ô], vbInformation
End If
CNConfBD.Close
rsConfBD.Close
Conforme descrevi acima, se eu não colocar no final o CNConfBD.Close e rsConfBD.Close a rotina funciona perfeitamente, porém a conexão fica aberta, mais se coloco o CNConfBD.Close e rsConfBD.Close no final o erro 3407 acontece.
Alguém poderia me ajudar?
abraço
Rogério Couto
Faça assim.
[txt-color=#e80000]rsConfBD.Close[/txt-color]
CNConfBD.Close
[txt-color=#e80000]rsConfBD.Close[/txt-color]
CNConfBD.Close
Bom dia Omar,
Obrigado pelo retorno.
Tentei realizar da maneira que me instruiu, mais o problema ainda persiste.
Deu o mesmo erro.
Rogério Couto
Obrigado pelo retorno.
Tentei realizar da maneira que me instruiu, mais o problema ainda persiste.
Deu o mesmo erro.
Rogério Couto
Este foi o teste que realizei com Access.
Dim CNConfBD As New ADODB.Connection
Dim rsConfBD As New ADODB.Recordset
Dim cnnConfBD As New ADODB.Command
Dim CConfBD As Control
Private Sub Form_Load()
[ô]para conexão no BD no SQL SERVER 2008
Set CNConfBD = New ADODB.Connection
sPath = App.Path & [Ô]\Estoque97.mdb[Ô]
CNConfBD.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & sPath
Set rsConfBD = New ADODB.Recordset
Set rsConfBD.ActiveConnection = CNConfBD
rsConfBD.Open [Ô]Select * From Tblestoque[Ô]
[ô]CNConfBD.Close
[ô]rsConfBD.Close [txt-color=#e80000]Aqui onde aconctece o mesmo erro seu[/txt-color]
rsConfBD.Close
CNConfBD.Close
End Sub
Dim CNConfBD As New ADODB.Connection
Dim rsConfBD As New ADODB.Recordset
Dim cnnConfBD As New ADODB.Command
Dim CConfBD As Control
Private Sub Form_Load()
[ô]para conexão no BD no SQL SERVER 2008
Set CNConfBD = New ADODB.Connection
sPath = App.Path & [Ô]\Estoque97.mdb[Ô]
CNConfBD.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & sPath
Set rsConfBD = New ADODB.Recordset
Set rsConfBD.ActiveConnection = CNConfBD
rsConfBD.Open [Ô]Select * From Tblestoque[Ô]
[ô]CNConfBD.Close
[ô]rsConfBD.Close [txt-color=#e80000]Aqui onde aconctece o mesmo erro seu[/txt-color]
rsConfBD.Close
CNConfBD.Close
End Sub
Você não deve usar um recordset para um comando sem retorno como o INSERT, ao invés disso use:
E retire as variáveis de recordset que não são necessárias nesse caso. O que acontece é que você não pode fechar a conexão porque você usou um comando de abertura de recordset e o driver fica esperando algum retorno.
cnconfdb.Execute [Ô]insert......[Ô]
E retire as variáveis de recordset que não são necessárias nesse caso. O que acontece é que você não pode fechar a conexão porque você usou um comando de abertura de recordset e o driver fica esperando algum retorno.
Boa tarde KERPLUNK
Tentei fazer como me orientou mais o CNCONFDB não disponibiliza a opção EXECUTE.
Tem mais alguma coisa que preciso fazer?
Tentei fazer como me orientou mais o CNCONFDB não disponibiliza a opção EXECUTE.
Tem mais alguma coisa que preciso fazer?
KERPLUNK , me perdoe, eu tinha tentado colocar o EXECUTE no recordset.
Sua solução funcionou perfeitamente.
Você solucionou uma dúvida que eu estava a tempos.
Valeu!!!!!
Sua solução funcionou perfeitamente.
Você solucionou uma dúvida que eu estava a tempos.
Valeu!!!!!
KKKKKKK
Peguei um projeto de tempos atrás.
Tem que rir, Esse tal de visual studio 2010.
Esta usando o Execute.
E do seu jeito ocorre o erro mesmo. Mas vale ressaltar
que grava.
Parabéns para o famigerado.
Peguei um projeto de tempos atrás.
Tem que rir, Esse tal de visual studio 2010.
Esta usando o Execute.
E do seu jeito ocorre o erro mesmo. Mas vale ressaltar
que grava.
Parabéns para o famigerado.
Que bom, fico feliz em ter ajudado, mas o mais importante é que você tenha entendido o que acontece. Isso evita dúvidas no futuro!
Tópico encerrado , respostas não são mais permitidas