Jump to content

Erro conexão Base dados


pedro_mexico

Recommended Posts

boa tarde forum,

á uns tempos tomei o gosto por criar um formulário excel vba , com ajuda da net, la consegui criar um ficheiro com formulário excel vba, mas agora queria me aventurar no ficheiro mas com Base dados Access.

ja vi vários filmes, procurei na net e ate ja fiz download de alguns ficheiros com base de dados para tentar adaptar os códigos ao meu formulário, mas estou com erros que me estão a dar dores de cabeça passo a explicar:

tinha uma conexão ao banco de dados simples, mas os vários ficheiros que fazia download vinham com outro código para conexão, por isso como não conseguia adaptar os códigos á minha conexão, decidi substituir os códigos de conexão.

o estranho é que colando os codigos de um exemplo ou outro ficheiro no meu formulário e trocando nomes das combobox, textboxs, tabelas Banco de dados, dá sempre erro.

neste momento diz me sempre que "erro de correspondência entre tipos"

Alguém me podia dar umas luzes ou ajuda com o código para perceber o que está mal?

os meus códigos sao estes:

'###################################
'CLASSE PARA CONEXÃO COM BANCO DE 'DADOS ACCESS , este codigo esta numa CLASS MODULE
'###################################
Public Conn As New ADODB.Connection 'DECLARAÇÃO DA VARIÁVEL DE CONEXÃO

Public Sub Conectar()
'***************************'
'VARIÁVEL STRING QUE INDICA '
'PROVEDOR E LOCAL DO BANCO  '
'DE DADOS ACCESS            '
'***************************'
Dim nConectar As String
    nConectar = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\Base_dados_Mapa_Viaturas.mdb"
    Conn.ConnectionString = nConectar
    Conn.Open 'CONEXÃO ABERTA
   MsgBox "banco aberto"
End Sub

Public Sub Desconectar()
Conn.Close 'CONEXÃO FECHADA
End Sub '

e depois fiz um codigo que tentava preencher as comboboxs com dados da tabela, isto colando o codigo do exemplo que tirei da net e adaptando ao meu formulario

 Sub CarregaDados_Manutencoes()


 'Variável de Conexão e Armazenamento
    Dim Cx As New ClasseConexao
    Dim Rs As ADODB.Recordset
    Dim sql, sql2, sql3, sql4, sql5, sql6 As String
    Dim Rs2 As ADODB.Recordset

'    'Visualizar página 1 ao abrir formulário
'    Me.MultiPage1.Value = 0

    sql = "SELECT Estado FROM Dados"
    Set Rs = New ADODB.Recordset
    
    Cx.Conectar
    
    Rs.Open sql, Cx.Conn
    
    'Loop para carregar combobox ESTADO
    Do Until Rs.EOF
        UserForm_Menu.ComboBoxEstado.AddItem Rs!Estado
        Rs.MoveNext
    Loop
    
    sql2 = "SELECT Matriculas FROM Dados"
        
    Set Rs2 = New ADODB.Recordset
    
        Rs2.Open sql2, Cx.Conn
    
    'Loop para carregar combobox MATRICULAS
    Do Until Rs2.EOF
        UserForm_Menu.ComboBoxMatriculas.AddItem Rs2!Matriculas
        Rs2.MoveNext
    Loop
    
  'Liberar Memória
    Set Rs = Nothing
    Set Rs = Nothing
   
    Cx.Desconectar

End Sub

o erro é na parte "UserForm_Menu.ComboBoxEstado.AddItem Rs!Estado "

aqui é que faz geral o erro de conexão.

Alguém consegue dar uma ideia do que se passa?

 

estes sao os codigos originais do formulario que corre correctamente

'###################################
'CLASSE PARA CONEXÃO COM BANCO DE
'DADOS ACCESS
'###################################
Public Conn As New ADODB.Connection 'DECLARAÇÃO DA VARIÁVEL DE CONEXÃO
Public Sub Conectar()
'***************************'
'VARIÁVEL STRING QUE INDICA '
'PROVEDOR E LOCAL DO BANCO  '
'DE DADOS ACCESS            '
'***************************'
Dim nConectar As String
    nConectar = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\Base_dados_Mapa_Viaturas.mdb"
    Conn.ConnectionString = nConectar
    Conn.Open 'CONEXÃO ABERTA
   MsgBox "banco aberto"
End Sub

Public Sub Desconectar()
Conn.Close 'CONEXÃO FECHADA
MsgBox "banco fechado"
End Sub '



   'Variável de Conexão e Armazenamento
    Dim cx As New ClasseConexao
    Dim banco As ADODB.Recordset
    Dim sql, sql2 As String
    Dim banco2 As ADODB.Recordset
    
    'Visualizar página 1 ao abrir formulário
    Me.MultiPage1.Value = 0
    
    sql = "SELECT cargo FROM cargo"
    sql = sql & " ORDER BY cargo" 'Ordenar coluna
    
    Set banco = New ADODB.Recordset
    
    cx.Conectar
    
    banco.Open sql, cx.Conn
    
    'Loop para carregar combobox dos cargos
    Do While Not banco.EOF
        Me.ComboBox2.AddItem banco!cargo
        Me.ComboBox4.AddItem banco!cargo
        Me.ComboBox5.AddItem banco!cargo
        Me.ComboBox7.AddItem banco!cargo
        banco.MoveNext
    Loop
    
    sql2 = "SELECT setor FROM setor"
    sql2 = sql2 & " ORDER BY setor"
    
    Set banco2 = New ADODB.Recordset
    
    banco2.Open sql2, cx.Conn
    
    'Loop para carregar combobox dos setores
    Do While Not banco2.EOF
        Me.ComboBox1.AddItem banco2!setor
        Me.ComboBox3.AddItem banco2!setor
        Me.ComboBox6.AddItem banco2!setor
        Me.ComboBox8.AddItem banco2!setor
        banco2.MoveNext
    Loop
    
    'Liberar Memória
    Set banco = Nothing
    Set banco2 = Nothing
    cx.Desconectar
    
End Sub

 

Fico a aguardar alguma ajuda.

Obrigado

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.