CONEXÃO COM BANCO DE DADOS SQL - ERRO 3704
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?
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?
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
=====================================
[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.
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.
Ótimos materiais Tunusat.
Tudo funcionando perfeitamente agora.
Obrigado pelo apoio
Rogério Couto
Tudo funcionando perfeitamente agora.
Obrigado pelo apoio
Rogério Couto
Tópico encerrado , respostas não são mais permitidas