CONEXÃO COM BANCO DE DADOS SQL - ERRO 3704

ROGERCOUTO 16/09/2015 10:11:35
#451448
Bom dia Pessoal,

Com a ajuda do DS2T resolvi um problema para simplificar a conexão a um banco de dados, mas me deparei com outro problema.
Ao utilizar uma instrução que possui recordset, recebe a mensagem dizendo que a operação não é permitida quando o objeto está fechado. (Erro 3704).

O problema ocorre na instrução abaixo:

Private Sub Form_Load()

Dim ConexaoBanco As New ConexaoBanco
Dim rsSelecaoBancorst As New ADODB.Recordset

ConexaoBanco.ConectarBancoRst

ConexaoBanco.CNConexaoBancoRst.Execute [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô]

[txt-color=#e80000]If Not ConexaoBanco.rsSelecaoBancorst.EOF And Not ConexaoBanco.rsSelecaoBancorst.BOF Then[/txt-color]
ConexaoBanco.rsSelecaoBancorst.MoveFirst
MostrarBanco
End If

Observação: o erro ocorre onde está em vermelho.

Para constar, reuni as informações de conexão a banco de dados em uma classe, chamada ConexaoBanco, sendo:

Public CNConexaoBanco As ADODB.Connection
Public CNConexaoBancoRst As ADODB.Connection
Public rsSelecaoBancorst As New ADODB.Recordset


Public Sub ConectarBanco()

Set CNConexaoBanco = New ADODB.Connection
CNConexaoBanco.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CNConexaoBanco.Properties([Ô]Data Source[Ô]).Value = [Ô]DESENVOLVIMENTO\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CNConexaoBanco.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CNConexaoBanco.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CNConexaoBanco.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CNConexaoBanco.Open [ô] Abrindo a conexão

End Sub

Public Sub DesconectarBanco()

CNConexaoBanco.Close

End Sub

Public Sub ConectarBancoRst()

Set CNConexaoBancoRst = New ADODB.Connection
CNConexaoBancoRst.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CNConexaoBancoRst.Properties([Ô]Data Source[Ô]).Value = [Ô]DESENVOLVIMENTO\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CNConexaoBancoRst.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CNConexaoBancoRst.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CNConexaoBancoRst.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CNConexaoBancoRst.Open [ô] Abrindo a conexão

Set rsSelecaoBancorst = New ADODB.Recordset
Set rsSelecaoBancorst.ActiveConnection = CNConexaoBancoRst




End Sub

Public Sub DesconectarBancoRst()

CNConexaoBancoRst.Close

End Sub

Observação: DesconectarBancoRst e ConectarBancoRst são as conexões que possuem o RecordSet.


Poderiam me auxilar em mais esta dúvida?

TUNUSAT 17/09/2015 07:47:04
#451485
Resposta escolhida
ROGERCOUTO,

Acho que você precisa verificar a propriedade [Ô]STATE[Ô], que indica se a conexão esta aberta, fechada ou em andamento, com um [Ô]IF[Ô].

Veja mais em:
=====================================
ADO - Como usar o objeto Connection ?
http://www.macoratti.net/connect.htm
=====================================
Data Base Class ADODB Command Recordset vb6 ADO FILE HANDLING OPEN
http://www.codeproject.com/Articles/21233/Data-Base-Class-ADODB-Command-Recordset-vb-ADO-FI

Public Function conopen() As Boolean
On Error GoTo err1:
If conConnection.State = 0 Then
connection

conConnection.Open
conopen = True
End If

err1:
If Error <> [Ô][Ô] Then
MsgBox [Ô]Connect to fail[Ô]
conclose

Exit Function
End If
End Function

=====================================
[RESOLVED] ADO error [Ô]3704[Ô] object is closed
http://www.vbforums.com/showthread.php?548078-RESOLVED-ADO-error-quot-3704-quot-object-is-closed
=====================================
Error 3704 Operation is not allowed when object is closed
http://www.dreamincode.net/forums/topic/188195-error-3704-operation-is-not-allowed-when-object-is-closed/
=====================================

[][ô]s,
Tunusat.
ROGERCOUTO 17/09/2015 15:08:44
#451510
Ótimos materiais Tunusat.
Tudo funcionando perfeitamente agora.

Obrigado pelo apoio

Rogério Couto
Tópico encerrado , respostas não são mais permitidas