ABRIR E FECHAR CONEXÃO NO SQLSERVER

ROGERCOUTO 11/09/2015 09:49:13
#451264
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
OMAR2011 11/09/2015 10:07:49
#451266
Faça assim.
[txt-color=#e80000]rsConfBD.Close[/txt-color]
CNConfBD.Close
ROGERCOUTO 11/09/2015 10:44:54
#451270
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
OMAR2011 11/09/2015 13:09:13
#451277
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
KERPLUNK 11/09/2015 15:02:48
#451295
Você não deve usar um recordset para um comando sem retorno como o INSERT, ao invés disso use:

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.
ROGERCOUTO 11/09/2015 15:40:07
#451299
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?

ROGERCOUTO 11/09/2015 16:03:16
#451301
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!!!!!
OMAR2011 11/09/2015 16:17:55
#451304
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.
KERPLUNK 11/09/2015 19:08:36
#451316
Resposta escolhida
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