pedro_mexico Posted March 31, 2021 at 01:15 PM Report Share #621876 Posted March 31, 2021 at 01:15 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now