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
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
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
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
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.
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:
Sexto Passo: Insert no Access
Neste passo foi criado um outro módulo cujo código segue abaixo:
Sétimo Passo: Botão Inserir
Agora só falta fazer o botão que irá executar:
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!
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: