Arquivo

Posts Tagged ‘Banco De Dados Com Vba’

Ultimo Registro De Um Recordset VBA (consulta sql)

 

Conforme enquete a maioria votou que gostaria de saber como pegar o ultimo registro de um recordset, e sem mais de longas coloco o código abaixo para o deleite de todos.
O código é simples, mas eu sinceramente queria que fosse um comando de apenas uma linha! Rsrs…

Para não colocar o código solto, irei definir um exemplo com uma conexão de banco de dados. No meio do código eu demonstro como pegar o ultimo registro!

 

1 – Referencias

Ultimo Registro de um Recordset

 

 

2 – Código Do Ultimo registro de um Recordset

 

Sub Exemplo()

'-------------------------------------------------------Codigo de Introducao ------------------------------------------------
'Variaveis usadas
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim endLocal As String
Dim i As Integer

'variavel com endereco do banco
endLocal = ThisWorkbook.Path

'cria nova conexão definindo local do banco
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & endLocal & "/bd_manchester.mdb"
cn.Open

'define um novo objeto recordset
Set rs = New ADODB.Recordset

'-------define sql-----
sql = "SELECT * FROM TB_atendimento_paciente"

'------------------------------------------Codigo Ultimo Registro de um Record Set --------------------

rs.CursorType = adOpenKeyset
rs.Open sql, cn
rs.MoveLast
ultimoRegistro = rs.AbsolutePosition '.....Aqui eu gravei o ultimo registro da tabela
rs.MoveFirst '..............................................Aqui eu volto para o primeiro registro
'---------------------------------------------------

i = 8

If Not rs.EOF Then
Do While Not rs.EOF
DoEvents
Application.StatusBar = "Inserindo linha " & rs.AbsolutePosition & " de " & ultimoRegistro
Range("A" & i).Value = rs(0)
rs.MoveNext
i = i + 1
Loop
End If

cn.Close

End sub

 

3 – Video

 .

Inserir dados do Excel para o Access com Vba

 

Atualmente no site existe um artigo descrevendo como consultar dados do Access para o Excel (que por sinal é bem interessante) e resolvi complementar para aqueles que são amantes de usar o excel somente como interface.

Existe diversas formas de fazer esta inserção, mas acredito que esta seja uma das mais simples.

Com este artigo você poderá inserir dados do Excel para o Access e assim poderá ter todo um histórico de informações e consultas. Dependendo da situação nada melhor que salvar os dados em um banco de dados (ou melhor um: sgbd).

 

Primeiro Passo: Informações de diretório

 

O arquivo de banco de dados deve ficar dentro de uma pasta chamado: base
A pasta base deve ficar no mesmo diretório da planilha

excel para a access

 

Segundo Passo: Criação do banco no Access

 

Para este artigo criei uma tabela simples com as seguintes informações:

Campos: Nome, Idade, Profissao e Cidade
Nome Tabela: TB_dados_pessoais
Nome banco: BD_dados.mdb

 

excel com vba access

Obs.: É muito importante que neste exemplo de código você salve como .mdb

 

Terceiro: Biblioteca Excel

 

Primeiro é necessário marcar algumas bibliotecas para o código funcionar, portanto segue os passos abaixo:

Alt + F11 > Ferramentas > referências > marcar Microsoft Active data Objects

excel para o access

 

Quarto Passo: Interface Excel

 

Os campos na planilha são os mesmos que estão no Access.

Podem ser criados na planilha mesmo ou em formulário, fica a gosto. No exemplo aqui eu misturei as duas coisas, coloquei objetos do formulário na planilha.

 

excel access

 

Quinto Passo: Criando a comunicação com o Access

 

Aqui eu criei um módulo chamado mod_bd e dentro dele coloquei os códigos abaixo:

excel para o access

 

Sexto Passo: Insert no Access

 

Neste passo foi criado um outro módulo cujo código segue abaixo:

access excel

 

Sétimo Passo: Botão Inserir

 

Agora só falta fazer o botão que irá executar:

access com vba

 

Vídeo Demonstrativo

 

 

 

 

 

String de Conexão

Segue abaixo um site com diversas conexões com banco de dados, muito útil quando esquecemos alguma conexão ou desejamos saber uma conexão com um banco que não estamos acostumados.

Nesse site http://www.connectionstrings.com/ encontramos conexões para diversos bancos Oracle, Access, SQL Server,  MySQL, Postgre, DB2, Firebird,  , Informix, Interbase e etc.

Acesses: http://www.connectionstrings.com/

Excel com SQL (Sem banco de dados)

Abaixo segue um código que uso com frequencia, excel com sql.
Através dele é possível pegar uma sheet e passar todos os dados para Sql sem precisar usar um banco de dados.
E assim aproveitar do sql para usar filtros, consultas rápidas e etc.

Segue no link abaixo uma planilha que fiz como exemplo.
Caso queiram podem abaixar a planilha e usar para vocês, ou seja apagar os dados e colocar os seus.

——————————————————
Segue o código do excel com SQL:

Option Explicit
Global Db2 As Database
Global RSt As Recordset
Global RSt2 As Recordset
Global rstp As Recordset
Global RstAux As Recordset
Global UserName, SQL, SQL1 As String

Public Sub Busca_eventos()

'VARIAVEIS
'variavel que grava o texto que será pesquisado
Dim varText As String
'define a linha, que trará o resultado da pesquisa:
Dim linha As Long

'LIMPA OS DADOS DA SHEET ATUAL
Range("A6:H1000").Select
Selection.ClearContents
Cells(1, 1).Select

'PEGA PALAVRA QUE DEVER SER USADO NA PESQUISA DO SQL
varText = Sheets("Formulário").Range("a1").Value
varText = UCase(varText)

'CODIGO QUE PASSA TODOS OS DADOS DA SHEET PARA SQL
Set Db2 = OpenDatabase(ThisWorkbook.Path & "\" & ThisWorkbook.Name, False, False, "Excel 8.0")
'[registro$] é o nome da sheet que passará para sql
'CONTEUDO é o titulo da coluna
Set RSt2 = Db2.OpenRecordset("SELECT * FROM [registro$] WHERE CONTEUDO like ('*" & varText & "*');")
'define em qual linha começar:

'CODIGO QUE PASSA OS DADOS DO SELECT PARA PLANILHA
linha = 5
'enquanto nouver dados:
While Not RSt2.EOF
linha = linha + 1
Cells(linha, 1) = RSt2("armario")
Cells(linha, 2) = RSt2("caixa")
Cells(linha, 3) = RSt2("prateleira")
Cells(linha, 4) = RSt2("conteudo")
RSt2.MoveNext
Wend
'fecha o banco
RSt2.Close
Db2.Close

End Sub

——————————————————————————-
Observação:

Para funcionar é necessário ir em ferramentas > Referencias e marcar: Microsoft DAO  3.6

______________________________________________________

 Segue demonstração abaixo:

 

*Dúvidas sobre o vídeo:

 Pegue a planilha Excel com SQL (Sem banco de dados) gratuitamente!

download planilha excel vba

Oracle VBA / Access

Abaixo segue um  código que muito me agrada! Não depender de criar uma fonte de dados ODBC para intermediar o banco e na e na própria planilha fazer consultas direto ao banco usando sql.

Eu uso uma base de dados oracle vba, mas também serve para base de dados access com vba (.mdb). O segundo código mais abaixo

Em ambos os casos (oracle ou access) é necessário adicionar a biblioteca ADO para conexão.

 

 

<<<<<Codigo Oracle Vba>>>>>

Private Sub cmdConexaoBD_Click()

Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer

'define a conexão com o banco de dados
Set cn = New ADODB.Connection

cn.CursorLocation = adUseClient

cn.Open "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=database;uid=usuario;pwd=senha;"

'define um novo objeto recordset (gravar resultado na variavel)
Set rs = New ADODB.Recordset

'define a instrução sql
sql = "SELECT NOME, CODIGO FROM TA_SITUACOES"

'gera o recordset para o sql sobre a conexao definida
rs.Open sql, cn

'define o cabeçalho das células no excel
Range("A1").Value = "NOME"
Range("B1").Value = "CODIGO"

'Retorno dos dados para excel, onde "i" é o contador e "EOF" fim dos dados
i = 1

If Not rs.EOF Then

Do While Not rs.EOF

Range("A" & i + 1).Value = rs(0)
Range("B" & i + 1).Value = rs(1)
rs.MoveNext
i = i + 1

Loop

End If

cn.Close

End Sub

_________________________________________________________________

 

<<<<<Codigo ACCESS VBA>>>>>

Private Sub cmdConexaoBD_Click()

Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer
'define a conexão com o banco de dados Northwind.mdb
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/teste/Northwind.mdb"
cn.Open
'define um novo objeto recordset
Set rs = New ADODB.Recordset
'define a instrução sql
sql = "SELECT Orders.CustomerID, Sum([Order Details].UnitPrice) AS ValorTotal, Sum([Order Details].Quantity) AS QuantidadeTotal"
sql = sql & " FROM (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) "
sql = sql & " INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID"
sql = sql & " GROUP BY Orders.CustomerID"
sql = sql & " ORDER BY Orders.CustomerID"
'gera o recordset para o sql sobre a conexao definida
rs.Open sql, cn
'define o cabeçalho das células no excel
Range("A1").Value = "Codigo do Cliente"
Range("B1").Value = "Quantidade Total"
Range("C1").Value = "Valor total dos Pedidos"

i = 2
If Not rs.EOF Then
Do While Not rs.EOF
Range("A" & i).Value = rs(0)
Range("B" & i).Value = rs(2)
Range("C" & i).Value = rs(1)
rs.MoveNext
i = i + 1
Loop
End If

cn.Close

End Sub

 

Fontes de pesquisa:
http://www.macoratti.net/vba_xls1.htm
http://social.msdn.microsoft.com/Forums/pt-BR/vbapt/thread/0a28ae49-98be-4ceb-84b8-cc80d925ddb9

Vídeo Recomendado: