Logo Hardware.com.br
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas

[Resolvido] Acabando com as Dúvidas sobre ADO Excel x Access

#1 Por Coloniz@dor 13/05/2010 - 16:41
Pessoal boa tarde.

Tenho notado que muitos usuários do forum vem em busca de soluções em Excel que utiliza o Access como banco de dados .

Segue aqui um exemplo passo a passo de como enviar do excel para o Access e buscar dados do Access para o Excel.

Vamos começar habilitando o ADO do VBA.

No editor do VBA vá em Ferramentas > referências > Selecione o Microsoft Activex Data Object 2.8 Library e click em OK.

Vamos supor que vc precisa criar um programa que Cadastra Funcionários e precisa armazenar os dados no Access.

Crie um novo projeto no Access salve como o nome de base no C da maquina .

Crie uma tabela com o nome de Banco e ponha as seguintes colunas :

Nome / Cargo / Salario / Setor

Salve e feche o Access.

Abra o editor do VBA , crie um formulário com os seguintes dados :

Inclua 4 textbox e um commandbutton

Renomear os textbox para seus respectivos dados:

txtNome
txtCargo
txtSalario
txtSetor

Duplo click no commandbuton e insira esta macro.

'Declarando Variavel de conecção
Dim Conecção As ADODB.Connection
'Declarando Variavel de armazenamento da dados
Dim Dados As ADODB.Recordset
'Definindo Variavel conecção com nova consulta
Set Conecção = New ADODB.Connection
'Definindo parâmetros para conecção
With Conecção
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Base.mdb"
.Open
End With
'Definindo nova busca e armazenamento dos dados da Tabela
Set Dados = New ADODB.Recordset
'Definindo parâmetros dos dados
Dados.Open "Banco", Conecção, adOpenKeyset, adLockOptimistic, adCmdTable
'Observe que a palavra "banco" representa a tabela
'Criando uma condição para que nenhum dado deixe de ser digitado
If txtNome = "" Or txtCargo = "" Or txtSalario = "" Or txtSetor = "" Then
MsgBox "Preencher todos os campos", vbCritical
Else
'Caso ocorra algum erro , a macro segue
On Error Resume Next
'Inserindo os dados na tabela
With Dados
.AddNew
.Fields("Nome") = txtNome.Value
.Fields("Cargo") = txtCargo.Value
.Fields("Salario") = txtSalario.Value
.Fields("Setor") = txtSetor.Value
.Update
End With
'Encerrando Recordset liberando memória
Dados.Close
Set Dados = Nothing
'Encerrando conecção
Conecção.Close
Set Conecção = Nothing
'Limpando textbox para novo lançamento
txtNome = Empty
txtCargo = Empty
txtSalario = Empty
txtSetor = Empty
'Definindo foco no textbox txtNome
txtName.SetFocus

Para Importar os dados para o excel , crie um módulo e ponha esta macro :


Sub Trazer_Dados()
'Declarando Variavel de conecção
Dim Conecção As ADODB.Connection
'Declarando Variavel de armazenamento da dados
Dim Dados As ADODB.Recordset
'Definindo Variavel conecção com nova consulta
Set Conecção = New ADODB.Connection
'Definindo parâmetros para conecção
With Conecção
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Base.mdb"
.Open
End With
'Definindo nova busca e armazenamento dos dados da Tabela
Set Dados = New ADODB.Recordset
'Definindo parâmetros dos dados
Dados.Open "Banco", Conecção, adOpenKeyset, adLockOptimistic, adCmdTable
'Observe que a palavra "banco" representa a tabela
'Declarando variavel WorkSheet
Dim Xlst As Excel.Worksheet
Set Xlst = Sheets("Plan1")
'Copiando os dados para Plan1
Xlst.Range("A1").CopyFromRecordset Dados
'Criando o Cabeçalho
Range("A1").Select
ActiveCell.Text = "Nome do Funcionario"
ActiveCell.Offset(0, 1).Text = "Cargo"
ActiveCell.Offset(0, 2).Text = "Salario"
ActiveCell.Offset(0, 3).Text = "Setor"
Dados.Close
Set Dados = Nothing
Conecção.Close
Set Conecção = Nothing
End Sub

Testem e vejam se deu certo.

Abraço a todos.
Responder
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#3 Por Coloniz@dor
08/07/2010 - 07:52
Para conexão com o banco de dados , quando o programa que estamos criando requer várias consultas , para não ter que fica digitando todas vez o provedor e local do banco de dados , a melhor e mais prática maneira é criar uma classe.

Vamos lá.

No editor do VBA vá em inserir Módulo Classe e renomei a para - ClasseConexão.

Inserir esta código :

 '###################################
'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.Jet.OLEDB.4.0;Data Source=C:\Base.mdb"
Conn.ConnectionString = nConectar
Conn.Open 'CONEXÃO ABERTA

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


Então toda vez que precisar se conectar basta chamar a classe.

Vamos agora preparar nosso formulário para inserir registro:

1º Vamos formatar o textbox de Admissão para receber valores no formato de data.

Inserir esse código no textbox5:

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(Me.TextBox5) = 2 Or Len(Me.TextBox5) = 5 Then
Me.TextBox5.Text = Me.TextBox5.Text & "/"
SendKeys "{END}", True
End If
Me.TextBox5.MaxLength = 10 'DEFINE O NUMEROS DE CARACTERES NO TEXTBOX
End Sub '


Com isso , quando for digitar , irá ficar com máscara de data , só precisa digitar os numeros.

testem.

Feita isso , vamos ao cósdigo que inseri os novos registro.

Preencham os dados.

Inserir este código no botão inserir.

Private Sub CommandButton1_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " INSERT INTO Funcionario( Nome, Setor, Cargo, Salario, Admissão, Matricula )"
sql = sql & " VALUES ( "
sql = sql & " '" & Me.TextBox1.Text & "', "
sql = sql & " '" & Me.TextBox2.Text & "', "
sql = sql & " '" & Me.TextBox3.Text & "', " 'INSERT INTO , INSTRUÇÃO SQL PARA INSERIR DADOS
sql = sql & " '" & Me.TextBox4.Text & "', "
sql = sql & " '" & Me.TextBox5.Text & "', "
sql = sql & " '" & Me.TextBox6.Text & "' ) "
'CONECTAR AO BANCO DE DADOS
cx.Conectar
'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn

'CONFIRMAÇÃO DE REGISTRO
MsgBox "Funcionário: " & Me.TextBox1.Text & " Cadastrado."
'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar
Me.TextBox1 = Empty
Me.TextBox2 = Empty
Me.TextBox3 = Empty 'LIMPA OS CAMPOS PARA NOVO REGISTRO
Me.TextBox4 = Empty
Me.TextBox5 = Empty
Me.TextBox6 = Empty
Me.TextBox1.SetFocus ' FOCO NA TEXTBOX NOME
End Sub '



Façam vários cadastros para testar , se houver erros , favor postarem.

Até a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#5 Por Coloniz@dor
08/07/2010 - 14:53
Vamos agora importar os dados do Access para o Excel.

Vamos gravar os dados na Plan2 que já esta com os cabeçalhos , renomei o intervalo de celulas da A2:G100 como dados, isso definirá a carga do ListBox com o dados.

No Formulário vpa na aba Pesquisa I , duplo click no Botão Listar Todos e inserir esta Código.

Private Sub CommandButton9_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT * FROM Funcionario "
Range("dados&quot.Clear

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn

'DECLARANDO VARIÁVEL PARA LOCAL QUE RECEBERÁ OS DADOS NA PLANILHA
Dim xls As Excel.Worksheet
Set xls = Sheets("Plan2&quot
xls.Range("A2&quot.CopyFromRecordset banco

'CONFIGURANDO LISTBOX
Me.ListBox1.RowSource = "dados"
Me.ListBox1.ColumnHeads = True
Me.ListBox1.ColumnCount = 7
Me.ListBox1.ColumnWidths = "60pt;150pt;100pt;150pt"

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar

End Sub


Testem , e não esqueçam de renomear o intervalo senão não carregará o listbox.

Até a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#6 Por Coloniz@dor
09/07/2010 - 07:54
Olá a todos.
Vamos agora exibir os dados do banco de dados do access afim de conseguirmos alterar ou ate masmo deletar o registro.

Vamos para a aba alteração.

Duplo click no botão busca.

Inserir esse código.

Private Sub CommandButton4_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT Nome, Setor, Cargo, Salario, Admissão, Matricula FROM Funcionario "
sql = sql & " WHERE idFuncionario = " & Me.TextBox13.Text

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn
'VARIÁVEIS DO BANCO DE DADOS
Dim nNome As String
Dim nSetor As String
Dim nCargo As String
Dim nSalario As String
Dim nAdmissão As String
Dim nMatricula As String

'ASSOCIANDO AS VARIÁVEIS AS COLUNAS DO BANCO DE DADOS
nNome = banco.Fields("Nome&quot
nSetor = banco.Fields("Setor&quot
nCargo = banco.Fields("Cargo&quot
nSalario = banco.Fields("Salario&quot
nAdmissão = banco.Fields("Admissão&quot
nMatricula = banco.Fields("Matricula&quot

'PREENCHENDO TEXTBOX COM OS DADOS DO BANCO DE DADOS
Me.TextBox7.Text = nNome
Me.TextBox8.Text = nSetor
Me.TextBox9.Text = nCargo
Me.TextBox10.Text = nSalario
Me.TextBox11.Text = nAdmissão
Me.TextBox12.Text = nMatricula

'FORMATAR TEXTBOX PARA RECEBER DADOS MONETÁRIOS
Me.TextBox10.Text = Format(UserForm1.TextBox10.Text, "R$ #,###.00&quot

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar
End Sub



Observe que para pesquisar , basta digitar o numero do registro que foi gerado pelo access e depois buscar.

Os dados ref ao registro aparecem no formulário.

Testem.

Até a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Jones_RB
Jones_RB Super Participante Registrado
368 Mensagens 36 Curtidas
#7 Por Jones_RB
09/07/2010 - 21:53
Coloniz@dor disse:
Olá a todos.
Vamos agora exibir os dados do banco de dados do access afim de conseguirmos alterar ou ate masmo deletar o registro.

Vamos para a aba alteração.

Duplo click no botão busca.

Inserir esse código.

Private Sub CommandButton4_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT Nome, Setor, Cargo, Salario, Admissão, Matricula FROM Funcionario "
sql = sql & " WHERE idFuncionario = " & Me.TextBox13.Text

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn
'VARIÁVEIS DO BANCO DE DADOS
Dim nNome As String
Dim nSetor As String
Dim nCargo As String
Dim nSalario As String
Dim nAdmissão As String
Dim nMatricula As String

'ASSOCIANDO AS VARIÁVEIS AS COLUNAS DO BANCO DE DADOS
nNome = banco.Fields("Nome&quot
nSetor = banco.Fields("Setor&quot
nCargo = banco.Fields("Cargo&quot
nSalario = banco.Fields("Salario&quot
nAdmissão = banco.Fields("Admissão&quot
nMatricula = banco.Fields("Matricula&quot

'PREENCHENDO TEXTBOX COM OS DADOS DO BANCO DE DADOS
Me.TextBox7.Text = nNome
Me.TextBox8.Text = nSetor
Me.TextBox9.Text = nCargo
Me.TextBox10.Text = nSalario
Me.TextBox11.Text = nAdmissão
Me.TextBox12.Text = nMatricula

'FORMATAR TEXTBOX PARA RECEBER DADOS MONETÁRIOS
Me.TextBox10.Text = Format(UserForm1.TextBox10.Text, "R$ #,###.00&quot

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar
End Sub



Observe que para pesquisar , basta digitar o numero do registro que foi gerado pelo access e depois buscar.

Os dados ref ao registro aparecem no formulário.

Testem.

Até a proxima.

abraço.

Amigo...
como faço uma fórmula dentro do access?
Sds.
Jones R. Bussmann
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#8 Por Coloniz@dor
10/07/2010 - 08:35
Vamos agora Excluir determinado registro , para isso devemos indicar qual registro excluir , por isso a importância da chave primária com auto numeração .

Vamos na aba alteração , faça o como fez para alterar , digite o numero do registro no textbox e buscar.

Se o registro exibido na tela for o que deseja excluir pronto.
Duplo click no botão Deletar e inserir essa macro:

Private Sub CommandButton3_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " DELETE FROM Funcionario " 'DELETE INSTRUÇÃO SQL PARA DELETAR REGISTRO
sql = sql & " WHERE idFuncionario = " & Me.TextBox13.Text

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn

'CONFIRMAÇÃO DE EXCLUSÃO
MsgBox "Funcionário: " & Me.TextBox7.Text & " Alterado."

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar

Me.TextBox7 = Empty
Me.TextBox8 = Empty
Me.TextBox9 = Empty 'LIMPA OS CAMPOS PARA NOVA CONSULTA
Me.TextBox10 = Empty
Me.TextBox11 = Empty
Me.TextBox12 = Empty
Me.TextBox13 = Empty
Me.TextBox13.SetFocus ' FOCO NA TEXTBOX ID

End Sub


até a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#9 Por Coloniz@dor
12/07/2010 - 07:56
Vamos agora criar uma rotina para pesquisa no campo nome do funcionário , observe que vc poderá fazer um filtro podendo ser digitado desde a 1º letra até o nome todo.

Na aba pesquisa 1 duplo click no botão filtra do campo "Buscar pelo Nome" e inserir esta macro.

Private Sub CommandButton5_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT * FROM Funcionario "
sql = sql & " WHERE Nome LIKE '" & Me.TextBox14.Text & "%' "
Range("dados&quot.Clear

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL

banco.Open sql, cx.Conn

'DECLARANDO VARIÁVEL PARA LOCAL QUE RECEBERÁ OS DADOS NA PLANILHA
Dim xls As Excel.Worksheet
Set xls = Sheets("Plan2&quot
xls.Range("A2&quot.CopyFromRecordset banco

'CONFIGURANDO LISTBOX
Me.ListBox1.RowSource = "dados"
Me.ListBox1.ColumnHeads = True
Me.ListBox1.ColumnCount = 7
Me.ListBox1.ColumnWidths = "60pt;150pt;100pt;150pt"

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar

End Sub


até a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#10 Por Coloniz@dor
13/07/2010 - 08:15
Vamos agora criar o código que busca o funcionário pelo numero da matrícula.

Na aba pesquisa1 , no campo buscar por matrícula , duplo click no botão filtrar , inserir o código abaixo.

Private Sub CommandButton6_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT * FROM Funcionario "
sql = sql & " WHERE Matricula = " & Me.TextBox15.Text
Range("dados&quot.Clear

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn

'DECLARANDO VARIÁVEL PARA LOCAL QUE RECEBERÁ OS DADOS NA PLANILHA
Dim xls As Excel.Worksheet
Set xls = Sheets("Plan2&quot
xls.Range("A2&quot.CopyFromRecordset banco

'CONFIGURANDO LISTBOX
Me.ListBox1.RowSource = "dados"
Me.ListBox1.ColumnHeads = True
Me.ListBox1.ColumnCount = 7
Me.ListBox1.ColumnWidths = "60pt;150pt;100pt;150pt"

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar

End Sub


Testem

até a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#11 Por Coloniz@dor
15/07/2010 - 14:42
Vamos agora filtrar os dados pelo intervalo de datas , esse assunto sempre foi muito procurado , agora acabou o problema.

na aba Pesquisa 1 , no campo de pesquisa por data de admissão , duplo click em filtrar e inserir esse código.

Private Sub CommandButton7_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT * FROM Funcionario "
sql = sql & " WHERE Admissão "
sql = sql & " BETWEEN '" & Me.TextBox16.Text & "' "
sql = sql & " AND '" & Me.TextBox17.Text & "'"
Range("dados&quot.Clear

'CONECTAR AO BANCO DE DADOS
cx.Conectar

'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn

'DECLARANDO VARIÁVEL PARA LOCAL QUE RECEBERÁ OS DADOS NA PLANILHA
Dim xls As Excel.Worksheet
Set xls = Sheets("Plan2&quot
xls.Range("A2&quot.CopyFromRecordset banco

'CONFIGURANDO LISTBOX
Me.ListBox1.RowSource = "dados"
Me.ListBox1.ColumnHeads = True
Me.ListBox1.ColumnCount = 7
Me.ListBox1.ColumnWidths = "60pt;150pt;100pt;150pt"

'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar

End Sub


Testem utilizando um intervalo de datas.

alé a proxima.

abraço.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#12 Por Coloniz@dor
16/07/2010 - 07:55
Bom pessoal , por ultimo e não menos importante , vamos agora carregar os dados em um ListView , veja como fica melhor em comparação ao listbox.

Na aba pesquisa II , duplo click em carregar e inserir essa macro:

Private Sub CommandButton8_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " SELECT * FROM Funcionario "

cx.Conectar

'CONFIGURAR VARIÁVEL RECORSET
With banco
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.Source = sql
.ActiveConnection = cx.Conn
.Open
End With

'FORMATANDO O LISTVIEW
'CRIANDO OS CABEÇALHOS
Me.ListView1.ListItems.Clear
Me.ListView1.View = lvwReport
Me.ListView1.Gridlines = True
Me.ListView1.ColumnHeaders.Add , , "id Funcionário"
Me.ListView1.ColumnHeaders.Add , , "Nome"
Me.ListView1.ColumnHeaders.Add , , "Setor"
Me.ListView1.ColumnHeaders.Add , , "Cargo"
Me.ListView1.ColumnHeaders.Add , , "Salario"
Me.ListView1.ColumnHeaders.Add , , "Admissão"
Me.ListView1.ColumnHeaders.Add , , "Matrícula"

'DEFININDO A LARGURA DAS COLUNAS
Me.ListView1.ColumnHeaders(1).Width = 70
Me.ListView1.ColumnHeaders(2).Width = 150
Me.ListView1.ColumnHeaders(3).Width = 150
Me.ListView1.ColumnHeaders(4).Width = 150
Me.ListView1.ColumnHeaders(5).Width = 80
Me.ListView1.ColumnHeaders(6).Width = 80
Me.ListView1.ColumnHeaders(7).Width = 80

Me.ListView1.FullRowSelect = True

Dim itens As ListItem

'PREENCHENDO O LISTVIEW
While Not banco.EOF
Set itens = Me.ListView1.ListItems.Add(, , banco(0))
itens.SubItems(1) = "" & banco(1)
itens.SubItems(2) = "" & banco(2)
itens.SubItems(3) = "" & banco(3)
itens.SubItems(4) = "" & banco(4)
itens.SubItems(5) = "" & banco(5)
itens.SubItems(6) = "" & banco(6)
banco.MoveNext
Wend
cx.Desconectar
End Sub


Pronto pessoal , esses são os passos básicos para se montar um programa bem elaborado no Excel , espero que tenham gostado.

abraço a todos.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Depoisteconto
Depoistecont... Geek Registrado
1.5K Mensagens 447 Curtidas
#13 Por Depoistecont...
24/07/2010 - 18:54
Coloniz@dor disse:
Para conexão com o banco de dados , quando o programa que estamos criando requer várias consultas , para não ter que fica digitando todas vez o provedor e local do banco de dados , a melhor e mais prática maneira é criar uma classe.

Vamos lá.

No editor do VBA vá em inserir Módulo Classe e renomei a para - ClasseConexão.

Inserir esta código :

 '###################################
'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.Jet.OLEDB.4.0;Data Source=C:\Base.mdb"
Conn.ConnectionString = nConectar
Conn.Open 'CONEXÃO ABERTA

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


Então toda vez que precisar se conectar basta chamar a classe.

Vamos agora preparar nosso formulário para inserir registro:

1º Vamos formatar o textbox de Admissão para receber valores no formato de data.

Inserir esse código no textbox5:

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(Me.TextBox5) = 2 Or Len(Me.TextBox5) = 5 Then
Me.TextBox5.Text = Me.TextBox5.Text & "/"
SendKeys "{END}", True
End If
Me.TextBox5.MaxLength = 10 'DEFINE O NUMEROS DE CARACTERES NO TEXTBOX
End Sub '


Com isso , quando for digitar , irá ficar com máscara de data , só precisa digitar os numeros.

testem.

Feita isso , vamos ao cósdigo que inseri os novos registro.

Preencham os dados.

Inserir este código no botão inserir.

Private Sub CommandButton1_Click()
'CHAMANDO A CLASSE CONEXÃO
Dim cx As New ClasseConexao
'VARIÁVEL DE ARMAZENAMENTO DOS DADOS DO BANCO
Dim banco As ADODB.Recordset
'VARIÁVEL DE COMANDO PARA INSERIR OD DADOS
Dim sql As String
Set banco = New ADODB.Recordset
'DEFININDO INSTRUÇÃO A VARIÁVEL
sql = " INSERT INTO Funcionario( Nome, Setor, Cargo, Salario, Admissão, Matricula )"
sql = sql & " VALUES ( "
sql = sql & " '" & Me.TextBox1.Text & "', "
sql = sql & " '" & Me.TextBox2.Text & "', "
sql = sql & " '" & Me.TextBox3.Text & "', " 'INSERT INTO , INSTRUÇÃO SQL PARA INSERIR DADOS
sql = sql & " '" & Me.TextBox4.Text & "', "
sql = sql & " '" & Me.TextBox5.Text & "', "
sql = sql & " '" & Me.TextBox6.Text & "' ) "
'CONECTAR AO BANCO DE DADOS
cx.Conectar
'EXECUTAR A SQL
On Error Resume Next
banco.Open sql, cx.Conn

'CONFIRMAÇÃO DE REGISTRO
MsgBox "Funcionário: " & Me.TextBox1.Text & " Cadastrado."
'DESCONECTAR PARA LIBERAR MEMÓRIA
cx.Desconectar
Me.TextBox1 = Empty
Me.TextBox2 = Empty
Me.TextBox3 = Empty 'LIMPA OS CAMPOS PARA NOVO REGISTRO
Me.TextBox4 = Empty
Me.TextBox5 = Empty
Me.TextBox6 = Empty
Me.TextBox1.SetFocus ' FOCO NA TEXTBOX NOME
End Sub '



Façam vários cadastros para testar , se houver erros , favor postarem.

Até a proxima.

abraço.


Coloniz@ador, em tempo...

Utilizando os anexos, sendo base salva em C:, quando mando inserir aparece o erro:


O tipo definido pelo usuário nao foi definido
cx As New ClasseConexao

Tem alguma coisa haver com o name do modulo de classe

Renomei ClasseConexão

A declaração da variável está ClasseConexao

Alguma coisa haver?

At
“O Estado não é uma ampliação do círculo familiar”, HOLANDA, Sérgio Buarque, Raízes do Brasil, 1936



Coloniz@dor
Coloniz@dor General de Pijama Registrado
3.8K Mensagens 153 Curtidas
#15 Por Coloniz@dor
26/07/2010 - 07:39
Depoisteconto disse:
Coloniz@ador, em tempo...

Utilizando os anexos, sendo base salva em C:, quando mando inserir aparece o erro:


O tipo definido pelo usuário nao foi definido
cx As New ClasseConexao

Tem alguma coisa haver com o name do modulo de classe

Renomei ClasseConexão

A declaração da variável está ClasseConexao

Alguma coisa haver?

At


Tire o assento de conexão , deixe assim - ClasseConexao.
Soluções em Excel VBA, Access VBA, C# e ASP.NET
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal