CONEXAO COM BANCO DE DADOS MYSQL

MATHEUSNERIS 22/11/2012 11:20:41
#414576
Amigos estou com dificuldades em uma coisa muito simples. Provavelmente esteja faltando alguma referencia ou algo do tipo. Bom, eu tenho o seguinte código. Quando eu executo ele me da o seguinte problema [Ô]Object Variable or with a block variable not set[Ô]. Na linha em negrito


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Sub Conectar()
con.ConnectionString = [Ô]Driver={MySQL ODBC 5.2w Driver};Server=localhost;Database=testedb;User=root;Password=1234;Option=3;[Ô]
con.Open
End Sub


Private Sub Form_Load()
[ô]Dim clsConectar As clsConectar
[ô]clsConectar.Conectar
Conectar
End Sub


Desde já muito grato.
KERPLUNK 22/11/2012 11:41:52
#414578

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

[txt-color=#e80000]Set con = New ADODB.Connection
Se rs = New ADODB.Recordset[/txt-color]
...resto do código

MATHEUSNERIS 22/11/2012 11:48:27
#414580
Agora deu certo!!

KERPLUNK porque antes não deu? Porque eu tenho que declarar ele como ADODB e depois setar?
MARCELO.TREZE 22/11/2012 11:54:02
#414582
Resposta escolhida
Desculpe me atravessar, mas é assim Set é definir, ou seja você é obrigado a definir o ADODB como um novo OBJETO, ou seja você declara o objeto e o define como novo, porém você poderia também declarar o objeto como novo diretamente, ex:

Dim CON As New ADODB.Connection


e da maneira acima você não precisaria defini-lo ou seta-lo

MATHEUSNERIS 22/11/2012 12:04:30
#414585
Ok, deu tudo certo, só mais uma dúvida.
E se eu fosse chamar ele de uma classe? Ou seja, estou colocando minha rotina de conexão com o banco de dados dentro de uma classe, e quero chama-lo no load do projeto.
MARCELO.TREZE 22/11/2012 12:09:48
#414586
eu particularmente chamo ele de um módulo você poderia muito bem chama-lo de uma classe da mesma maniera veja:

Global Conexao As New ADODB.Connection

Public Function Conecta(Valor As Boolean)
Dim SERVER As String, BD As String, PORTA As String, USER As String, SENHA As String
Dim CON_STR As String

If Conexao.State = 1 Then
Conexao.Close
Set Conexao = Nothing
Valor = True
End If

If Valor = True Then
SERVER = [Ô]localhost[Ô]
BD = [Ô]nomedobanco[Ô]
PORTA = [Ô]3306[Ô]
USER = [Ô]root[Ô]
SENHA = [Ô]suasenha[Ô]
CON_STR = [Ô]DRIVER={MySQL ODBC 5.1 DRIVER};[Ô] _
& [Ô]Server=[Ô] & SERVER & [Ô];[Ô] _
& [Ô]Port=[Ô] & PORTA & [Ô];[Ô] _
& [Ô]Database=[Ô] & BD & [Ô];[Ô] _
& [Ô]UID=[Ô] & USER & [Ô];[Ô] _
& [Ô]PWD=[Ô] & SENHA & [Ô];[Ô] _
& [Ô]Option=3;[Ô]
With Conexao
.CursorLocation = adUseClient
.ConnectionString = CON_STR
.Open CON_STR
End With
Else
Conexao.Close
Set Conexao = Nothing
End If
End Function



Repare que declarei o ADODB como global, e criei uma função publica, que é fácil de utilizar, veja

no load do form abro a conexão assim

Conecta True


e No unload fecho

Conecta False


e pronto

na função acima ainda criei uma sistema de segurança que fecha o banco automaticamente caso eu o esqueça aberto e tente abri-lo novamente.

If Conexao.State = 1 Then
Conexao.Close
Set Conexao = Nothing
Valor = True
End If
MATHEUSNERIS 22/11/2012 12:13:30
#414587
Obrigado novamente MARCELO-TREZE.

Consegui finalizar por aqui. Só mais uma coisa, como você põe a codificação dentro desta caixa azul ?

Muito obrigado, depois da resposta eu finalizo o tópico e pontuo.
MARCELO.TREZE 22/11/2012 12:25:08
#414588
quando for código você o seleciona e clica na letra C acima das carinhas no canto esquerdo da caixa de digitação
Tópico encerrado , respostas não são mais permitidas