CONEXÃO COM BANCO DE DADOS SQL

ROGERCOUTO 13/09/2015 02:18:25
#451341
Bom dia Pessoal,

Tenho a seguinte instrução para conexão ao banco de dados SQLServer que é executada toda vez que tenho realizar uma operação no banco:

Dim CNConfBD As New ADODB.Connection

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

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

Como uso muito esse tipo de rotina do sistema, abrindo e fechando uma conexão no banco, gostaria de tornar a programação mais prática, não tendo que digitar a mesma coisa o tempo todo. Do modo que estou programando o tenho que digitar a mesma coisa várias vezes.

Gostaria da ajuda de vocês para automatizar essa rotina, para que, ao programar as rotinas, eu não tenha que setar apenas a condição.


DS2T 13/09/2015 03:07:53
#451342
Resposta escolhida
Você pode criar uma classe chamada Conexão e colocar o método Abrir e Fechar.
No Abrir você deixa o código:

Set CNConfBD = new Adodb,Connection
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



Deixa essa variável como pública:

Public CNConfBD As ADODB.Connection


e no método fechar:

CNConfBD.Close


Quando quiser executar alguma coisa, basta fazer:

Dim SuaClasse As New TipoSuaClasse

SuaClasse.Open()
SuaClasse.CnConfBD.Execute [Ô]Insert Into bla bla bla[Ô]
SuaClasse.Close()


Isso tem como ser melhorado, e muito... mas aí já entra conceitos de metodologia objeto-relacional ... orientação a objetos (q o vb6 não tem), etc...

Abraços
ROGERCOUTO 13/09/2015 23:51:07
#451350
Boa noite DS2T,

Obrigado pelo retorno.
Tentei realizar o que você indicou mais tenho algumas dúvidas. Fiz como abaixo:

1 - Primeiro Criei a classe ConexaoBanco:

Public CNConexaoBanco As ADODB.Connection

Private 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

Private Sub DesconectarBanco()

CNConexaoBanco.Close

End Sub

2 - Em segundo tentei usar a classe no objeto:

Private Sub cmdsalvarconfbanco_Click()

Dim ConexaoBanco As New Connection

[txt-color=#e80000]ConexaoBanco.Open[/txt-color]

If txtprovedor.Text <> [Ô][Ô] And txtcaminhobanco.Text <> [Ô][Ô] And txtnomebanco.Text <> [Ô][Ô] And txtusuariobanco.Text <> [Ô][Ô] And txtsenhabanco.Text <> [Ô][Ô] Then
[txt-color=#e80000]ConexaoBanco.Execute[/txt-color] [Ô]INSERT INTO TABCONFBANCO(PROVEDORBD,CAMINHOBD,NOMEBD,USUARIOBD,SENHABD) values ([ô][Ô] & txtprovedor.Text & [Ô][ô],[ô][Ô] & txtcaminhobanco.Text & [Ô][ô],[ô][Ô] & txtnomebanco.Text & [Ô][ô],[ô][Ô] & txtusuariobanco.Text & [Ô][ô],[ô][Ô] & txtsenhabanco.Text & [Ô][ô])[Ô] [ô], ConexaoBD, adOpenStatic
Else
MsgBox [Ô]Todos os campos devem ser preenchidos![Ô], vbInformation
End If

[txt-color=#e80000]ConexaoBanco.Close[/txt-color]

End Sub

Ao executar o projeto, a seguinte informação foi apresentada:

Run-time Error [ô]-2147467259 (80004005)[ô]:
[Microsoft][ODBC Driver Manager] Nome da fonte de dados não encontrado e nenhum driver padrão especificado.

Observações:
- Ao digitar a linha do execute [Ô]ConexaoBanco.Execute[Ô] não apareceu a opção CNConexãoBanco, que foi a variável que criei, ou seja, o certo, segundo sua explicação seria ficar ConexaoBanco.CNConexaoBanco.Execute. Seria isso mesmo ou fiz alguma coisa errado?

- Na parte, Dim ConexaoBanco As New ADODB.Connection, eu coloquei o tipo da classe como ADODB.Connection. Está correto?

- A terceira dúvida seria na parte do Execute intercalado com a condição IF. Eu coloquei da seguinte maneira:

If txtprovedor.Text <> [Ô][Ô] And txtcaminhobanco.Text <> [Ô][Ô] And txtnomebanco.Text <> [Ô][Ô] And txtusuariobanco.Text <> [Ô][Ô] And txtsenhabanco.Text <> [Ô][Ô] Then
[txt-color=#e80000]ConexaoBanco.Execute[/txt-color] [Ô]INSERT INTO TABCONFBANCO(PROVEDORBD,CAMINHOBD,NOMEBD,USUARIOBD,SENHABD) values ([ô][Ô] & txtprovedor.Text & [Ô][ô],[ô][Ô] & txtcaminhobanco.Text & [Ô][ô],[ô][Ô] & txtnomebanco.Text & [Ô][ô],[ô][Ô] & txtusuariobanco.Text & [Ô][ô],[ô][Ô] & txtsenhabanco.Text & [Ô][ô])[Ô] [ô], ConexaoBD, adOpenStatic
Else
MsgBox [Ô]Todos os campos devem ser preenchidos![Ô], vbInformation
End If

Gostaria de saber se está correto.

Abraço

Rogério Couto
ROGERCOUTO 14/09/2015 12:13:18
#451379
Pessoal,

Peço desculpas, a solução do DS2T funcionou perfeitamente. Eu que estava fazendo errado.

O jeito correto ficou:

Private Sub cmdsalvarconfbanco_Click()

Dim ConexaoBanco As New ConexaoBanco

ConexaoBanco.ConectarBanco

If txtprovedor.Text <> [Ô][Ô] And txtcaminhobanco.Text <> [Ô][Ô] And txtnomebanco.Text <> [Ô][Ô] And txtusuariobanco.Text <> [Ô][Ô] And txtsenhabanco.Text <> [Ô][Ô] Then
ConexaoBanco.CNConexaoBanco.Execute [Ô]INSERT INTO TABCONFBANCO(PROVEDORBD,CAMINHOBD,NOMEBD,USUARIOBD,SENHABD) values ([ô][Ô] & txtprovedor.Text & [Ô][ô],[ô][Ô] & txtcaminhobanco.Text & [Ô][ô],[ô][Ô] & txtnomebanco.Text & [Ô][ô],[ô][Ô] & txtusuariobanco.Text & [Ô][ô],[ô][Ô] & txtsenhabanco.Text & [Ô][ô])[Ô]
Else
MsgBox [Ô]Todos os campos devem ser preenchidos![Ô], vbInformation
End If

ConexaoBanco.DesconectarBanco

End Sub

1 - Eu estava declarando Dim ConexaoBanco As ADODB.Connection e o certo é Dim ConexaoBanco As New ConexaoBanco
2 - Também declarei os métodos na classe como públicos, antes eu estava declarando como privados.

DS2T, muito obrigado pela ajuda, a um bom tempo eu buscava uma maneira de resolver este problema.

Abraço

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