... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Aprenda sobre filtragens

Apresento um breve resumo das formas mais empregadas de filtragens, com o objetivo de atender aos anseios dos menos experientes, na programação com o Access.   Para reforçar o assunto aqui abordado, ofereço uma vídeo-aula, com dicas importantes sobre a construção de consultas pelo VBA e  disponibilizo o aplicativo Maestro, que traz inúmeros exemplos práticos sobre filtragens.

Consultas Seleção.

As consultas seleção são empregadas no carregamento dos objetos: formulários, relatórios, listbox e combobox.  A flexibilidade em alteramos a estrutura de uma consulta pelo VBA, em tempo de execução, nos permite elaborar soluções, sem igual,  para estes objetos.  

É essencial que você aprenda, o quanto antes, a sintaxe de consulta. Eu lhe garanto que é muito simples!  Estarei lhe dando uma ajudinha através da vídeo-aula.

A sintaxe mais simples possível para uma consulta seleção é essa:

SELECT [Lista dos Campos] FROM [Nome da Tabela];
 
"SELECT * FROM tblClientes;"

O asterisco (*) representa todos os campos da tabela.  Bom, esta consulta não nos traz benefício algum em termos de filtragem, pois o resultado  seria o mesmo que acionar diretamente à tabela de clientes.  Vamos supor que essa tabela de clientes tenha uns 20 campos, mas estamos precisando apenas de três destes campos para alimentar uma combobox.  Assim, montamos a consulta, somente com os campos que desejamos exibir:

"SELECT idCliente, NomeCliente, Estado FROM tblClientes;"

Temos então, a nossa primeira forma de filtragem que é a seleção de campos desejados.

A cláusula WHERE

As consultas possuem a cláusula WHERE, que nos permite utilizar critérios de filtragem para exibir registros específicos.  Exemplo: Quero que a consulta exiba apenas os clientes do estado de São Paulo.

SELECT [Lista dos Campos] FROM [Nome da Tabela] WHERE [critério de filtragem];
 
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado='São Paulo';"

Observe que coloquei 'São Paulo' entre os apóstrofes.  É uma regra da consulta, a colocação dos apóstrofes ou aspas duplas, para valores do  tipo string.  Para valores do tipo número, não se põe os apóstrofes. Exemplo:

"SELECT idCliente, NomeCliente FROM tblClientes WHERE idCliente=2;"

Para valores do tipo data temos que usar o cerquilha/tralha (#) . Veja o exemplo de uma consulta exibindo todos os pedidos que possuem a data de entrega maior ou igual a dois de março de dois mil e onze:

"SELECT idPedido, fornecedor FROM tblPedidos WHERE DataEntrega >= #03/02/2011#;"

Outra questão importantíssima a saber no uso de data é o formato. O código VBA interpreta o formato Americano (mês/dia/ano).  Então, observe que o código acima está lendo dois de março e não três de fevereiro. 

Vamos supor que você esteja utilizando o campo de um formulário, de nome txData, como critério de filtragem para a data na consulta:

"SELECT idPedido, fornecedor FROM tblPedidos WHERE DataEntrega >=#" & me!txData & "#;"

A data no formulário é digitada no formato (dia/mês/ano), porém é preciso entregá-la ao código no formato Americano (mês/dia/ano), para que o VBA leia de forma correta.  Vamos supor então que tenhamos digitado na caixa de texto do formulário, a data 03/02/2011 (três de fevereiro). 

"SELECT * FROM tblPedidos WHERE DataEntrega >=#" & Format(me!txData,"mm/dd/yyyy") & "#;"

A função Format() pega a data do campo do formulário e a entrega para o VBA no formato Americano.  O resultado final da consulta é como vemos abaixo:

"SELECT * FROM tblPedidos WHERE DataEntrega >= #02/03/2011#;"

O VBA irá ler três de fevereiro de dois mil e onze, como nós desejamos.

Operador Between...And

Uma outra forma muito empregada é a filtragem por período (data inicial e data final).  Para isso usamos o operador BETWEEN...AND.  Exemplo:

filtro = "Between #" & me!txDataInicial & "# AND #" & me!txDataFinal"
 
"SELECT * FROM tblPedidos WHERE DataEntrega " & filtro  &  "#;"

Como se encontra a escrita acima, você já sabe que teremos resultados errados de filtragem, não?  Claro que sabe, pois falta transformamos as datas digitadas nos campos do formulário para o formato Americano.  O correto então é:

filtro="Format(me!txDataInicial,"mm/dd/yyyy") & "# AND #" & Format(me!txDataFinal,"mm/dd/yyyy")"
 
"SELECT * FROM tblPedidos WHERE DataEntrega Between #" & filtro &  "#;"

Concatenação

Alguns de vocês devem estar se perguntando o que significa o símbolo & na estrutura da consulta.  Significa concatenação (unir).  Usamos este símbolo quando estamos juntando uma sintaxe escrita do VBA com um valor originário de um campo de formulário ou originário de uma variável.

Sintaxe final da consulta = [sintaxe parcial] & [variável ou campo do formulário] & [sintaxe parcial]

Estas junções costumam dar "dores de cabeça" para os programadores mais novos, pois qualquer "bobeada" provoca uma "má" formação da sintaxe, acarretando numa mensagem de erro no momento da sua execução.  Com a vídeo-aula você aprenderá como solucionar estes erros, rapidamente.

Uso do operador LIKE

O LIKE é o operador mais apropriado para comparar valores do tipo texto, permitindo não só especificar cadeias de texto idênticas, mas também semelhantes, pois existem alguns caracteres especiais que funcionam como "curingas".

Exemplos:

"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like 'São Paulo';"

A consulta acima retorna somente os registros dos clientes residentes no estado de São Paulo.

"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like 'pa*';"

Já nesta outra consulta, observamos a inclusão do caractere asterisco (*) que permite traduzir a declaração nos seguintes termos: Retorna todos os clientes residentes nos estados, começando com "pa", não importando o que venha depois de "pa" (Pará, Paraíba e Paraná).

"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like '* do *';"

A consulta acima, retorna somente os registros dos clientes residentes nos estados que possuam " DO " no nome ( Rio Grande DO Norte, Rio Grande DO Sul e Mato Grosso DO Sul ).

O uso do LIKE é muito empregado na prática, principalmente em consultas dinâmicas.  Aquelas em que, à medida que se vai digitando, vai se obtendo o resultado. 

Não deixe de observar o uso dos apóstrofes ( ' ), já que estamos tratando de valores do tipo string.

Usando o Operador IN

Determina se o valor de uma expressão é igual a algum dos vários valores de uma lista especificada.  Exemplo:

filtro = "IN('São Paulo', 'Paraná', 'Rio de janeiro')"
 
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado " & filtro & ";"

Retorna somente os registros dos clientes residentes nos estados de São Paulo, Paraná e Rio de janeiro.

As propriedades RowSource e RecordSource

A propriedade RowSource nos permite alimentar as combobox e as listbox com as consultas.

Exemplo de uma consulta, via código, alimentando uma combobox, pelo evento "Ao receber foco":

Private Sub cboClientes_GotFocus()
Dim strSql As String
strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='São Paulo';"
Me!cboClientes.RowSource = strSql
End Sub

Para alimentar os formulários e relatórios é usada a propriedade RecordSource.

Exemplo de uma consulta, alimentando um relatório, pelo evento "Ao abrir" do relatório:

Private Sub Report_Open(Cancel As Integer)
Dim strSql As String
strSql = "SELECT * FROM tblClientes WHERE Estado='São Paulo';"
Me.RecordSource = strSql
End Sub

Uso das propriedades Filter e FilterOn dos objetos formulário e relatório.

Vamos imaginar um relatório de cadastro de clientes, que tem como origem dos dados, a tabela tblClientes.  Se abrirmos pura é simplesmente o relatório, todos os registros serão carregados, pois não há qualquer tipo de filtragem.  Porém, podemos aplicar a propriedade filter ao abrir o relatório, para obtermos os registros específicos desejados.  No exemplo abaixo, o relatório irá exibir somente clientes de São Paulo.

Private Sub Report_Open(Cancel As Integer)
Me.filter = "Estado='São Paulo';"
Me.filterOn = true 
End Sub

A propriedade filter é uma expressão de seqüência de caracteres que consiste em uma cláusula WHERE  sem a palavra-chave WHERE.

FilterOn = true aplica a filtragem e FilterOn=false retira a filtragem.

A propriedade filter é amplamente utilizada nos casos aonde necessitamos filtrar subformulários, baseada em um campo do formulário principal. 

Veja no exemplo abaixo, um código que filtra um subformulário(sfrmClientes) à medida que se digita em uma caixa de texto (txCliente) do formulário principal:

Private Sub txCliente_Change()
Dim filtro As String
If Len(Me!txCliente.Text & "") = 0 Then
    'Se não há nada digitado, remove o filtro
    Me!sfrmClientes.Form.Filter = ""
    Me!sfrmClientes.Form.FilterOn = False
    Exit Sub
End If
filtro = "[NomeDoCliente] like '*" & Me!txCliente.Text & "*'"
Me!sfrmClientes.Form.Filter = filtro
Me!sfrmClientes.Form.FilterOn = True
End Sub

Cláusula WHERE do comando de ação DoCmd.ApplyFilter

Este comando de filtragem é aplicado em formulários e em relatórios que possuem o foco.  Por exemplo, no cadastro de clientes, do aplicativo Maestro, tem uma combobox aonde se seleciona o cliente de interesse para a exibição do seu respectivo cadastro.   Veja na figura abaixo:

Maestro v.2

Ao selecionar o cliente, o evento "Após atualizar" da combobox é disparado e a filtragem do registro é feita, aplicando-se o comando DoCmd.ApplyFilter.  É usado no critério de filtragem do comando, o número exclusivo do cliente selecionado, que se encontra na primeira coluna (oculta) da combobox.

Private Sub cboConsulta_AfterUpdate()
DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0)
Me!cli_Nome.SetFocus
Me!cboConsulta = Null
End Sub

Note que há um botão ao lado da combobox que é para a remoção do filtro, se for preciso.

Private Sub btRemoverFiltro_Click()
DoCmd.RunCommand acCmdRemoveFilterSort
'-----------------------
'Ou DoCmd.ShowAllRecords
'-----------------------
Me!cboConsulta.SetFocus
End Sub

Cláusula WHERE dos comandos de ação DoCmd.Openform e DoCmd.OpenReport.

Ao solicitarmos a abertura de um formulário ou de um relatório, podemos, simultaneamente, definir uma filtragem a ser aplicada e isso é amplamente utilizado.   Eu abuso desta opção.

Imagine uma caixa de listagem, com uma lista de pedidos.  Desejamos que, ao se dar um duplo clique em um dos pedidos da lista, se abra o formulário de pedidos, no registro correspondente.

Private Sub Lista_DblClick(Cancel As Integer)
Docmd.OpenForm "frmPedidos",,,"NumeroPedido = " & Me!Lista.column(1)
End Sub

Outra situação muito comum é querer imprimir ou visualizar um relatório, correspondente ao cadastro que se está alterando naquele momento.

Private Sub btImprimir_Click()
'Salva as alterações do cadastro para se refletir no relatório
Docmd.RunCommand acCmdSaveRecord
'Abre o relatório, filtrado pelo número exclusivo do cliente
DoCmd.OpenReport "rltCadastroCliente",acViewPreview,,"idCliente = " & me!idCliente
DoCmd.Maximize
End Sub

Critérios de filtragem das funções DLookup(), Dsum(), Dcount() e outras

Saber aplicar filtros nestas funções é fundamental , porém nada difere do que você viu até agora.

Vamos supor que seja preciso capturar o Preço de Custo de um PenDrive , código pd8gb, que se encontra na tabela de estoque.  Podemos capturar valores com a função Dlookup()

PreçoVenda = Dlookup("PreçoCusto","tblEstoque","Código = 'pd8gb'") * 1.35

Um uso prático para a função DCount() é de investigar se há registro(s) presente(s) em uma determinada tabela. O exemplo abaixo investiga se o cliente que está sendo cadastrado, já se encontra registrado na tabela.  A lógica é : se a função Dcount() contar 1 ou maior que 1 ,  o registro existe.

Private Sub NomeCliente_BeforeUpdate(Cancel As Integer)
If DCount("IdCliente","tblClientes","NomeCliente = '" & me!NomeCliente & "'") > 0 then
   MsgBox "O Cliente " & Me!NomeCliente & " já existe..."
   Me.Undo
   Cancel = True
End If
End Sub

Imagine que você agora precise somar as despesas de Luz pagas de um Contas a Pagar, no ano de 2011.  A função Dsum() resolve a questão de forma bem simples.

ValorLuz = Dsum("ValConta","tblContasPagas","TipoConta='Luz' And Year(DataPagamento)=2011")

A questão central é você saber aplicar corretamente o critério de filtragem.

Para ampliar o seu conhecimento

O Access possui uma centena de funções prontas, que solucionam a maioria de casos do cotidiano e você não pode deixar de, pelo menos, saber que existem.  

O conhecimento destas funções irá ampliar significativamente o seu potencial para montagem desses critérios de filtragem.

Algumas destas funções que foram utilizadas aqui no artigo :

Format()
Year()
Dlookup()
Dcount()
Dsum()

Aprenda aonde conhecer todas estas funções no Access aqui.

Arquivo exemplo

Ofereço o aplicativo Maestro que possui uma série de exemplos, empregando as técnicas de filtragem, aqui apresentadas.

Maestro v.2

 

Para entrar na estrutura do Maestro (Maestro_vx.accdb), basta manter pressionada a tecla SHIFT na inicialização.

Senha do usuário admin  > admin
Senha do usuário Avelino > 1234
Senha do Maestro_vx_be.accdb (tabelas) > a1234

O que irá aprender com o vídeo

Como utilizar o MODO SQL para analisar as consultas criadas no ambiente gráfico.

Identificar os erros mais comuns, cometidos na construção do critério de filtragens das consultas.

Como construir uma Combobox para filtragens, usada em um formulário de cadastro.

Como utilizar o PONTO DE INTERRUPÇÃO no VBA, para detectar erros nos códigos.


 

Faça o login aqui para ter acesso ao vídeo.


Sucesso!


 

 


285 comentários

James Resplandes   07/04/2011 19:20:19

Muito bom artigo, parabéns!

Você, como sempre, contribuindo para o crescimento dessa fantástica ferramenta de aprendizagem.

Márcio Melo - RJ   07/04/2011 21:57:32

Gostei muito desse artigo, da forma que elaborou, passou segurança em trabalharmos com o sql no VBA, onde tenho evitado... por muitas vezes apanhei em finalizar a escrita sql que se modifica do gerado pelo construtor para o utilizado no VBA. Utilizo de um projeto que existe na net desde a versão 2k e funciona em todas acima é o FrmGerReports, segue o link http://www.ativoaccess.com.br/mostra.exemplo.php?aplicativo=277 , de uma analisada, adaptei aos meus projetos, pessoal do site são nota 10 e tem sua mesma filosofia em ensinar, só que agora estão oferecendo o material que antes era de livre acesso, mais vale apena, foram as minhas fontes de aprendizagem no passado que utilizo até hoje. Forte abraço!

WELSON ZEFERINO DE OLIVEIRA JUNIOR   07/04/2011 22:21:35

Estou contando nos dedos as suas aulas de vba, vc é iluminado por Deus. Que sua sabedoria venha crescer a cada dia. Agradeço muito por ter você como meu professor, suas aulas tem mudado a minha vida como futuro programador, obrigado.

Fábio Bindá - Manaus/AM   08/04/2011 16:40:19

Parabéns Avelino, você é nota 1000!!! Seus tutoriais e materiais publicados estão me ajudando muito... essa matéria sobre consultas está simplesmente PERFEITA.

Francisco Sene   10/04/2011 12:04:10

Excelente. Sou novato neste mundo "Access" apesar dos meus 50 anos. Sou professor de Matemática e quero registrar que a sua didática e o seu material são muito eficazes. Penso que todos que tiverem dificuldades com o Access deveriam assistir algumas aulas com você. Parabéns e Obrigado.

Avelino Sampaio   11/04/2011 04:17:29

Fico muito grato pelo depoimento de vocês.

GILBERTO TEIXEIRA   13/04/2011 16:23:49

boa tarde avelino, como faço para enviar sendkey no windows 7

Avelino Sampaio   14/04/2011 09:48:58

Gilberto,

Use o do wscript. exemplo:

Dim objws As Object
Set objws = CreateObject("wscript.shell")
objws.SendKeys fncCapturaSenha, True
objws.SendKeys "{ENTER}"

Sucesso

Márcio   15/04/2011 16:09:16

Parabéns Avelino!
Grande iniciativa.
Não caminhei muito, pois o formulário clientes não abre. Informe que o acesso está bloqueado. O que devo fazer para resolver isso e continuar a vídeo-aula.
Parabéns mais uma vez!

Avelino Sampaio   15/04/2011 16:33:52

Márcio,

Vá no evento "Ao carregar" do formulário clientes e desabilite a linha:

'Call fncPermissões(Me)

Bom estudo

Ivan   23/04/2011 14:14:36

Boa tarde Avelino, tenho um aplicativo baseado no access 2007, com cadastros e informações de clientes, e sempre tenho que cadastrar novos clientes.

Gostaria de saber a seguinte: No formulario para entrar com novo cliente, preciso digitar as informações, Razao Social, CNPJ etc, queria saber se quando eu digitar o CEP, e der um TAB as informações de Rua, Bairro, Cidade e UF, se preencham automaticamente nos campos a elas relacionados, é possivel fazer isso e como faço?

Avelino Sampaio   25/04/2011 06:42:57

Ivan,

Veja no fórum abaixo um tópico sobre este assunto. Lá tem um exemplo prático.

http://maximoaccess.maisforum.com/t1624-resolvidobusca-cep-no-formulario-do-access-2007

Bom estudo

Johnny Cardoso   25/04/2011 11:38:02

Avelino, quero partilhar com você e demais programadores uma implementação que fiz em meu sistema:
ComboBox com Evento para filtrar um caractere ou um conjunto de caracteres em um consulta SQL.

' Descrição da Função:
' Carregar dados de tabela na combo e filtrar conforme digita na combo
' Filtra por junção de caracteres, retornando todos + conjunto já digitado + todos
' Se tiver Johnny, carlos e elton John na lista, ao digitar joh, retornará o primeiro e último registro.
' Filtra por radical da lista
---------------
No seu formulário, crie uma Combobox com nome Combo0 ou outro qualquer. Lembre-se de alterar nos eventos

Em propriedades, configure o tipo de origem da linha para Tabela/Consulta e
a Origem da linha como:
SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela ORDER BY Tabela.nm_cliente;

Nota: A ordem de classificação fica a critério seu.
-------------------------------

No evento da combo0, Ao alterar (change) insira o código abaixo:

Private Sub Combo0_Change()
' Descrição da Função:
' Carregar dados de tabela na combo e filtrar conforme digita na combo
' Filtra por junção de caracteres, retornando todos + conjunto já digitado + todos
' Se tiver Johnny, carlos e elton John na lista, ao digitar joh, retornará o primeiro e último registro.
' Filtra por radical da lista

Dim strText, strFind, strFind2

' strText-Retorna o valor da Combo
' strFind-Retorna o valor do conjunto já digitado
' strFind2-Junta a clausula WHERE ao valor do conjunto já digitado

strText = Me.Combo0.Text

If Len(Trim(strText)) > 0 Then
' Mostra a lista com os registro que contenham o conjunto já digitado
' Cria uma expressão de consulta SQL com string para clausula WHERE do SQL que retorna os dados da tabela
strFind2 = "nm_cliente Like '*"
For I = 1 To Len(Trim(strText))
If (Right(strFind, 1) = "*") Then
strFind = Left(strFind, Len(strFind) - 1)
End If
strFind = strFind & Mid(strText, I, 1) & "*"
Next
strFind2 = strFind2 & strFind & "'"

strsql = "SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela where " & strFind2 & " ORDER BY Tabela.nm_cliente;"

' Filter os registros da combo list utilizando a nova consulta sql
Me.Combo0.RowSource = strsql

Else
' Senão, mostra a lista com todos os registros
strsql = "SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela ORDER BY Tabela.nm_cliente; "

Me.Combo0.RowSource = strsql
End If
' Abre a lista do combobox para mostrar os registros filtrados
Me.Combo0.Dropdown
End Sub


NOTA: Este procedimento apenas está filtrando os registros. Para utilizar esses dados filtrados para carregar um registro em um formulário ou subformulário, ou para consultas ou outro evento, faça as modificações necessárias.


-------------------------------

No evento da combo0, Ao apertar tecla (keydown) insira o código abaixo:

Private Sub Combo0_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 27 Then 'Se pressionou tecla ESCAPE então carrega a lsita completa da consulta
strsql = "SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela ORDER BY Tabela.nm_cliente; "
Me.Combo0.RowSource = strsql
Me.Combo0 = Null 'Limpa a combo
End If
End Sub

Luis Antonio   30/04/2011 01:52:12

Gostaria de compatilhar com vocês um sistema que criei inspirado nesta aula. Trata-se de um sistema de filtragem comandado por dois botões de alternância. Quando eu clico no botao1 se filtra por um critério, ao clicar no botão2 se filtra por outro critério. Um botão quando marcado desmarca o outro.

Private Sub Botao2_Click()
If Me.Botao2 = True Then
Me.Filter = "CD4_CV=yes"
Me.Botao = False
Me.FilterOn = True
ElseIf Me.Botao2 = False Then
Me.Filter = "CD4_CV=yes"
Me.Botao = True
Me.FilterOn = False
End If
End Sub

Private Sub Botao_Click()
If Me.Botao = True Then
Me.Filter = "CVCriaExposta=yes"
Me.Botao2 = False
Me.FilterOn = True
ElseIf Me.Botao = False Then
Me.Filter = "CVCriaExposta=yes"
Me.Botao2 = True
Me.FilterOn = False
End If

End Sub

Ivan Allessi   31/05/2011 21:13:50

Boa noite Avelino,

Tenho um formulario com dados de clientes, alguns campos são bloqueados e o usuario não pode fazer alterações neles, porem quando o usuario vai cadastrar um novo cliente, abre-se um um outro formulario para entrada de dados.

Gostaria de saber o seguinte: Se posso bloquear esses campos para alteração via código, e libera-los quando o usuario clicar no botão NOVO CLIENTE (inserir um novo registro) para que ele possa fazer a entrada de dados no mesmo formulario?

Desde já agradeço.

Avelino Sampaio   01/06/2011 03:45:56

Ivan,

é perfeitamente possível montar essa programação. Só não ficou claro se vc está querendo descartar a abertura de um outro formulário, ou seja, usar o próprior formulário de clientes para inclusão do novos clientes.

Entre em contato, através da seção contato do site, e me esclareça melhor, para eu te oferecer uma solução.

No aguardo

Juan   05/07/2011 16:57:54

Avelino,

Muito Obrigado pelos seus ensinamentos. Você é Show! ainda não tinha aprimorado meu sisteminha com essas ferramentas por achar que era coisa de outro mundo.

Excelente Material.

Adilson Calixto dos Santos   20/07/2011 18:03:43

TENHO A SEGUINTE FUNÇÃO NO ACCESS PARA CALCULAR A IDADE DE UM CANDIDATO,
SÓ QUE MEU BD ESTÁ EM SERVIDOR DE REDE E EXECUTO O BD NO CLIENTE,
DESENVOLVENDO O BD. A SEGUINTE FUNÇÃO CALCULAVA A IDADE DO CANDIDATO
NORMALMENTE E CORRETAMENTE, SÓ QUE PASSEI O BD PARA O SERVIDOR E FICO
DESENVOLVENDO DO PC CLIENTE.
AGORA QUE ESTOU MANIPULANDO O BD DO LADO DO CLIENTE ELE NÃO
CALCULA MAIS A IDADE. O QUE FAÇO. PODEM ME AJUDAR.

Public Function IdadeAnos(valor1 As Date, valor2 As Date) As Long

IdadeAnos = DateDiff("yyyy", valor1, valor2)

If Format(valor1, "mmdd") > Format(valor2, "mmdd") Then

IdadeAnos = IdadeAnos - 1

End If

End Function

Avelino Sampaio   21/07/2011 06:50:12

Adilson

Esta sua função funciona aqui comigo.

Da versão 2003 em diante o VBA do Access vem desabilitado. Para que o código funcione é necessário então desabiltar a macro de segurança. Vc fez isso ? Qual é a versão do seu Access ?

IVAN ALLESSI   31/07/2011 10:07:57

Boa tarde Avelino,

Quero Filtrar usando os campos "Processo", "Data", e "Vendedor" juntos, mais na data não esta dando resultado nenhum, Se eu colocar um Valor no Campo "Processo" e no "Vendedor" ele filtra tudo certinho, mais se eu colocar a data não funciona. Quando eu coloco só a data ai ele filtra.(Tanto faz pelo Ano, Mês, Dia, ele retorna filtrando os registros tudo certinho)

Meu problema é que se eu colocar os valores nos 3 campos não filtra nada, Já tentei de varias formas e nã consigo resolver, acho que é um problema na escrita da função, já quebrei a cabeça um monte.
Abaixo segue o código, se puderes me ajudar agradeço.

Option Compare Database
Dim j As Byte
Dim filtroLista As String
Private Sub fncCarregalista(Optional filtro As String, Optional ordem As String)
Dim strSql As String
strSql = "SELECT Código, Processo, Data, Codigo, Cliente, Zona, Vendedor, Valor, Motivo"
strSql = strSql & " FROM GarantiaDevolucao WHERE " & filtro
strSql = strSql & " ORDER BY Data;"
Me!Lista.RowSource = strSql
filtroLista = filtro
End Sub
----------------------------------------------------------------------------------

Private Sub tx_Change()
Dim filtro As String
j = 0
If Len(Me!tx.Text & "") > 0 Then j = j + 1
If Len(Me!tx1 & "") > 0 Then j = j + 2
If Len(Me!tx2 & "") > 0 Then j = j + 3
Select Case j
Case 0
filtro = "Código > 0"
Case 1
filtro = "Data like '*" & Me!tx.Text & "*'"
Case 2
filtro = "Processo like '*" & Me!tx1 & "*'"
Case 3
filtro = "Vendedor like *" & Me!tx2 & "*"
Case 4
filtro = "Processo like '*" & Me!tx1 & "*' AND Data like '*" & Me!tx.Text & "*'AND Vendedor like '*" & Me!tx2 & "*'"
End Select
Call fncCarregalista(filtro)
End Sub

Private Sub tx1_Change()
Dim filtro As String
j = 0
If Len(Me!tx1.Text & "") > 0 Then j = j + 1
If Len(Me!tx & "") > 0 Then j = j + 2
If Len(Me!tx2 & "") > 0 Then j = j + 3
Select Case j
Case 0
filtro = "Código > 0"
Case 1
filtro = "Processo like '*" & Me!tx1.Text & "*'"
Case 2
filtro = "Data like *" & Me!tx & "*"
Case 3
filtro = "Vendedor like *" & Me!tx2 & "*"
Case 4
filtro = "Processo like '*" & Me!tx1.Text & "*' AND Data like '*" & Me!tx & "*'AND Vendedor like '*" & Me!tx2 & "*'"
End Select
Call fncCarregalista(filtro)
End Sub

Private Sub tx2_Change()
Dim filtro As String
j = 0
If Len(Me!tx2.Text & "") > 0 Then j = j + 1
If Len(Me!tx & "") > 0 Then j = j + 2
If Len(Me!tx1 & "") > 0 Then j = j + 3
Select Case j
Case 0
filtro = "Código > 0"
Case 1
filtro = "Processo like '*" & Me!tx1.Text & "*'"
Case 2
filtro = "Data like *" & Me!tx & "*"
Case 3
filtro = "Vendedor like *" & Me!tx2 & "*"
Case 4
filtro = "Processo like '*" & Me!tx1 & "*' AND Data like '*" & Me!tx & "*' AND Vendedor like '*" & Me!tx2.Text & "*'"
End Select
Call fncCarregalista(filtro)
End Sub


Avelino Sampaio   31/07/2011 11:15:29

Ivan,

A combinação dos três campos para filtragem o case é 6(1+2+3) e não 4

Case 6
filtro = "Processo like '*" & Me!tx1 & "*' AND Data like '*" & Me!tx.Text & "*'AND Vendedor like '*" & Me!tx2 & "*'"


CASE 4 e CASE 5 seria para o uso simultânea de dois campos.

Sucesso!

Ivan Allessi   31/07/2011 13:48:40

Fiz a Mudança, funcionou apenas se preencher os tres campos ai ele filtra tudo certo, mais se eu quiser só preencher o campo Processo e Data ou Data e Vendedor ai não funciona.

Avelino Sampaio   01/08/2011 05:13:16

Então amigo Ivan, esta faltando vc montar os "Cases" 4 e 5

Marcelo David   23/08/2011 01:21:39

Olá, Avelino, este artigo está demais!! Parabéns

Luciano Andrade   29/11/2011 01:53:46

Olá Avelino,

Com relação ao trecho de código, onde você mostrou como abrir um formulário ao dar um duplo click em um pedido numa caixa de listagem:

Private Sub Lista_DblClick(Cancel As Integer)
Docmd.OpenForm "frmPedidos",,,"NumeroPedido = " & Me!Lista.column(1)
End Sub

Há mais alguma coisa a ser feita no formulário que irá se abrir? Pois criei um form com campos para alteração de dados de uma tabela. Quando tento chamar este mesmo formulário por outro form usando a linha:

DoCmd.OpenForm "frmAlteraDados3", , , "txtNome = " & Me!cxLista.Column(1)

Recebo uma mensagem do access dizendo que está faltando argumentos nesta mesma linha. No access o trecho de código que estou usando é este:

Private Sub cxLista_DblClick(Cancel As Integer)
If Not IsNull(Me.cxLista) Then
DoCmd.OpenForm "frmAlteraDados3", , , "txtNome = " & Me!cxLista.Column(1)
End If
End Sub

Se puder me dar uma luz, ficaria muito grato, e desde de já obrigado pela atenção!

Avelino Sampaio   30/11/2011 05:56:50

Luciano,

quando se utiliza valores do tipo string na filtragem é obrigatório o uso do apóstrofe. Exemplo:

DoCmd.OpenForm "frmAlteraDados3", , , "txtNome = '" & Me!cxLista.Column(1) & "'"

Sucesso!

Juan   30/11/2011 16:15:04

Olá Avelino,

Como faria no "frmFiltraFormContinuo", ao dá um duplo clique sobre um registro ele passe os dados de uma coluna para um campo em um form que já está aberto?

desde já agradeço.

Luciano Andrade   30/11/2011 22:32:01

Obrigado Avelino, vou fazer as devidas modificações! :)

Ricardo   03/01/2012 12:11:45

Olá,

O seu site é muito bom.

Para quando as Video-Aulas de VBA?

Avelino Sampaio   04/01/2012 08:36:33

Ricardo,

não tenho uma previsão para o curso do VBA mas estou lutando muito para que sai em breve.

Sucesso!

Paulo_CWB   09/01/2012 11:03:07

Bom dia,
Por muitos anos usei Access 97. Atualmente, estou fazendo um novo aplicativo em Access 2010.
Uso back-end com senha para as tabelas e front-end para as interfaces.
Em meu computador em casa, uma consulta SQL no OpenRecordset funcionou perfeitamente. Já no PC da empresa, apresenta o problema de "senha inválida", erro 3101.
O restente do aplicativo funciona OK tanto em casa quanto no trabalho, acessando o banco, etc. Sempre usei essa configuração. Mas, nessa consulta SQL do Access 2010, tá dando esse erro. Alguma sugestão?

Set dbs = OpenDatabase("J:\1Tcc\##1_TR\CALC_be.accdb")

Set rst = dbs.OpenRecordset("select KEY_WIRE_CO, DIAM_WIRE_CO, PRICE_WIRE_CO from WIRE_CO " _
& "where KEY_WIRE_CO = " & DP1_COMBO & ";")

Agradeço.

Avelino Sampaio   09/01/2012 13:05:30

Paulo,

Acrescente a senha no comando de abertura do BD.

Set dbs = OpenDatabase("J:\1Tcc\##1_TR\CALC_be.accdb", False, False, ";PWD=senhaDoBd")

Sucesso!

Renner   10/01/2012 12:20:22

Olá Avelino, meus parabéns pelo site!!!
Tenho um BD onde controlo as autorizações para dirigir dos meus funcionarios, nele após preecher todos os dados eu imprimo a "autorização" como se fosse um crachá. Porém, só consigo imprimir um por vez ou todos de uma vez.
Gostaria de saber se existe um metodo onde eu possa imprimir os crachás dos funcionários que desejo Ex. 123, 553, 372

Conto com seu apoio.

Avelino Sampaio   10/01/2012 13:23:34

Renner,

estude sobre o operador IN. Exemplo:

Docmd.OpenReport "NomeRelatório", acViewPreview , ,idFuncionario in (123,553,372)

Acesse meu tutorial sobre "programação de relatórios" e baixe o arquivo exemplo. Tem um exemplo que tem uma lista de frutas e usa o operador IN para imprimir o selecionado.

Sucesso!


Renner   10/01/2012 15:30:49

Consegui Avelino....

Fiz assim:

DoCmd.OpenReport "Cracha",acViewPreview ,,"registro IN(" & Me.cxregistro & ")"

Muito obrigado pela ajuda, já fazia tempo que estava procurando uma maneira de fazer isso mas ninguém tinha comentado sobre o operador IN.

Mais uma vez, muito obrigado!!!

Paulo_CWB   12/01/2012 23:17:01

Boa noite Avelino,
Esqueci de agradecer a ajuda e avisar que realmente funcionou após sua sugestão de acrescentar a senha no comando de abertura.

Uma outra dúvida agora:
Instalei eu uma máquina para rodar via Access Runtime. Tenteui rodar o arquivo .ACCBE ou ACCDR, mas não vai. Com access runtime, só roda o .ACCDB. Pelo menos nessa maquina que testei. (runtime do 2010). Alguma sugestão?

Obrigado.

Avelino Sampaio   16/01/2012 08:54:09

Paulo,

crie um atalho para rodar o aplicativo em questão. Se ainda assim pelo atalho não abrir, acrescente a linha de chamada do atalho o "/runtime". exemplo:

DESTINO: C:\Maestro\Maestro_v2.accdr /runtime

Sucesso!

Atila Brasil   16/01/2012 17:39:57

Boa tarde Avelino!

Realmente os filtros do BD Maestro e seu video-aula sobre filtros ~foram muito bem produzidos.

Parabéns!


Atila Brasil   16/01/2012 17:51:07

Boa tarde Avelino!

Pretendo abrir um relatório já filtrado a partir de critérios definidos em 3 grupos de opção que estão num formulário, pesquisei em diversos fóruns e sites, contudo não encontrei um modelo ou um exemplo no qual eu conseguisse entender e aplicar ao meu bd de contas a pagar.
Como proceder?
Muito obrigado

Avelino Sampaio   17/01/2012 09:59:50

Atila,

crie um BD exemplo com os 3 grupos mais o relatório e envie para o meu email (zipado), para eu montar o modelo de filtragem.

meu email: avelino(arroba)usandoaccess(ponto)com(ponto)br

No aguardo

Marcos Oliveira   17/01/2012 16:16:47

Olá Avelino,
Como coloco um "botão de alternancia" para rodar. Tenho a necessidade de saber quando uma conta foi cancelada ou esta ativa. gostaria de colocar um botão de alternancia com cores diferentes tipo; ativo(VERDE) - cancelado(VERMELHO) e gostaria que esta informação ficasse gravado nos status de cada cliente meu individualmente.

Pode me ajudar !!!???? Muito obrigado !!!

Nelinho   17/01/2012 16:20:33

Boa Tarde

Amigos estou com um problema de principiante estou tentando obter uma informação em uma tabela que está vinculada no Access 2007 vinculada ao OBDC na maquina que eu trabalho eu tenho acesso as tabelas consigo visualizar consigo buscar os dados necessários para as necessidades do Diretor do Hospital mais quando vou criar um campo para fazer uma pesquisar e da pesquisar gerar um relatório não consigo.

E nesta tabela eu não posso editar os dados só pesquisar e visualizar os seus dados.

Esta minha tabela os dados que eu preciso para a pesquisar, que são dois modos e resulta em uma grid trazendo os dados referente ao solicitado.

O que fazer estou precisando muito da ajudada do amigo do amigo você pode mim ajudar?

Estou com o prazo vencido preciso destas informações o mais urgente possível, obrigado a todos.

Meu email nelinhor@hotmail.com

Atenciosamente,

Avelino Sampaio   18/01/2012 07:07:58

Marcos,

Vá na seção CONTATO e me passe seu email que lhe enviarei um exemplo.

No aguardo


Avelino Sampaio   18/01/2012 07:10:31

Nelinho,

Monte o seu relatório sem qualquer filtragem. Estando montado e funcionando, vc então aplicará a filtragem através do botão que chama pelo relatório. Exemplo:

docmd.OpenReport "NomeDoRelatório",acViewPreview ,,"NomeDoCampo ='" & me!NomeCampoPesquisa & "'"

Sucesso!

MARCIO MELO - RJ   08/02/2012 18:32:24

Muito show esse procedimento de filtragem, passei usar em algumas parte dos meus bd's, gostei muito, prático e eficiente e não sobrecarrega o formulário, esse tipo de artigos são muito importantes, sensacional rsrs...

Sou mais Brasil!

Misael Ferreira   09/02/2012 01:22:49

Quero fazer um filtro para imprimir relatório, já coloquei critério na consulta, porém, quero filtrar só um campo ou mais de um. Quando coloco o critério na consulta só para um campo da certo, ou para todos os campos, porém quando quero filtrar só 3 campos dos 10 existentes aí o relatório não traz nada.

Agradeço se alguém poder me ajudar.
Meu e-mail:Iscar@dana.com
Obrigado!

Marcos Aurélio   14/02/2012 00:09:32

Primeiramente quero parabenizar pela iniciativa, muito bom o site os conteúdos maravilhosos e as video aulas show de bola...
Queria muita uma ajuda, eu não estou conseguindo fazer uma pesquisa como critério um combo.cliente por intervalo entre datas, como no exemplo maestro filtros, essa consulta a origem de dados vem de uma outra consulta e não de uma tabela. É possivel fazer? Queria muito sua ajuda.

Avelino Sampaio   14/02/2012 08:15:05

Marcos,

é possível fazer sim mas preciso que me envie um BD exemplo ou imagem da sua consulta ou código que esta usando para que eu possa analisar. Entre em contato pelo meu email:

avelino(arroba)usandoaccess(ponto)com(ponto)br

Daelson Rumã0   01/03/2012 08:29:19

Prezados;

Bom Dia.

Estou criando um BD, e preciso criar um relatório que mostre apenas os dados de um determinado periodo, só que pela consulta não consigo criar o critério necessário.

Criei uma consulta onde tem um capo DataExecução, e pretendo filtrar os dados do periodo entre ex.: do dia 26 do mês anterior até o dia 25 do mês atual.

Como posso criar esse critério na consulta ou VB relatório,

Desde já agradeço a atenção, fico Aguardando retorno.

Avelino Sampaio   01/03/2012 15:52:31

Daelson,

experimente este critério no campo DataExecução:

Entre DataSerial(Ano(Data());Mês(Data())-1;26) E DataSerial(Ano(Data());Mês(Data());25)

Sucesso!

Carlos Bastos   07/03/2012 15:42:31

Primeiramente quero parabeniza-lo pelo site.

Avelino estou iniciando no VBNET , trabalho com clipper ha muitos anos e estou estudando o VB.

Estou com uma dúvida, como consigo colocar num List Box mais de um campo que tenho no meu Banco Access ?

Seria algo como uma consulta , onde eu teria os campos MAT, NOME e IDADE. Até o momento só consigo colocar um campo em cada List Box específica. Antecipadamente agradeço sua atencão.

Avelino Sampaio   07/03/2012 15:48:42

Carlos,

abra a lista de propriedades da listBox e determine o número de colunas. No caso 3.

Pode determinar também a largura de cada coluna.

Sucesso!

Carlos Bastos   07/03/2012 21:50:39

Obrigado pela rapidez em que me respondestes. Avelino eu ja tinha visto esta propriedade , acontece que eu nao sei como concatenar os tres campos ... Eu estou movendo para list dessa forma , ou seja um campo para cada list.
LstNome.Items.Add(leitura("NomFun"))
LstMat.Items.Add(leitura("MatFun"))
LstSal.Items.Add(leitura("SalFun"))

Como mover os tres para a mesma list ? Desculpe chatea-lo com essa pergunta que deve ser
primária, mas os dois livrpos que comprei de vb nao explicam isso.
Tenha uma ótima noite

Avelino Sampaio   08/03/2012 05:36:56

Carlos,

eu não sei como funciona o mecanismo no VB. No VBA usamos o ponto e virgula para separar as colunas. Exemplo:

Me!NomeDaLista.AddItem ("Valor da coluna 0" & ";" & "valor da coluna 1" & ";" & "valor da coluna 2")

Experimente algo como:

lstFun.items.add(leitura("NomFun") & ";" & leitura("MatFun") & ";" & leitura("SalFun"))

Sucesso!


Carlos Bastos   08/03/2012 14:38:04

Parceiro, boa tarde.

Mais uma vez obrigado, funcionou como eu queria.

Abraços

Gilmar Ribeiro da Silva   14/03/2012 10:33:54

No exemplo acima:
Private Sub Report_Open(Cancel As Integer)
Me.filter = "Estado='São Paulo';"
Me.filterOn = true

End Sub

Quando executo este evento num sub relatório, o Access indica inválida esta linha no evento Report_Open.
Mudei para o evento Report_Activate, mas ele simplesmente não executa esta linha!

Qual a sugestão para aplicar um filtro sum sub relatório?

Priscila   23/03/2012 08:10:48

Pessoal, Gostei muito do site, mas estou tentando resolver um problema e não consigo,

Tenho um Formulário chamado "Relatórios por filtros", nele tenho uma caixa de combinação nomeado "Seção" essa caixa (combinação39), está baseada na Tabela "Seção", a mesma deveria trazer o Rel_Seção conforme o item selecionado na cx. de listagem (Combinação39).

Deixando dessa maneira:

Private Sub Combinação39_AfterUpdate()
DoCmd.OpenReport "Rel_Seção", acViewDesign, , , acDialog, "Seção ='" & Me!Combinação39 & "'"
End Sub

O relatorio abre normalmente, mas com todos os itens da seção e não apenas o que selecionei,

Não consigo de maneira alguma realizar o filtro neste formulário, todos os outros consegui realizar via macro, mas esse em qualquer dos casos via VBA ou macro não consigo realizar o filtro neste caso..

Priscila

Avelino Sampaio   23/03/2012 09:32:43

Priscila,

Acrescente a caixa de mensagem e informe o valor que está retornando.

Private Sub Combinação39_AfterUpdate()
msgbox Me!Combinação39
DoCmd.OpenReport "Rel_Seção", acViewDesign, , , acDialog, "Seção ='" & Me!Combinação39 & "'"
End Sub

O campo "Seção" existe no relatório ?

No aguardo

Priscila   23/03/2012 09:52:46

Aparece uma caixa de Mensagem do Access com o Setor escolhido em questão:

Ex: 01.01.01 Gerenciamento
Clico em OK e ele abre o formulário novamente com todos os dados sem os filtros

Avelino Sampaio   23/03/2012 09:59:27

Priscila,

Por que esta pondo a filtragem no argumento OpenArgs ? Pode então ser este o seu problema de filtragem. Coloque o filtro no argumento WHERE do comando.

DoCmd.OpenReport "Rel_Seção", acViewDesign, ,"Seção ='" & Me!Combinação39 & "'" , acDialog

Sucesso!

Avelino Sampaio   23/03/2012 10:03:01

Priscila ,

Ops! Vi que também está chamando o relatório no modo Designer. Troque isso para:

DoCmd.OpenReport "Rel_Seção",acViewPreview ,,"Seção ='" & Me!Combinação39 & "'"

Priscila   23/03/2012 10:18:30

Avelino, Muito obrigada pela ajuda

Só mais uma pergunta o relatório deve abrir de modo que eu possa usar os botões de comando que constam nele (Imprimir; Salvar PDF; Sair)

Pelo pouco que entendi de VBA, isso está no códido acView...., tentei os que estão disponiveis mas nenhum deles fica dessa forma..

Estou fazendo certo?

Priscila

Priscila   23/03/2012 11:33:01

Avelino,

Muito obrigada pela sua ajuda consegui finalizar o projeto, aproveitei e deixei todos as caixas do formulário em código VBA ao invés das macros, aproveito para parabenizar o site que é muito bom

Priscila

Thiago   26/03/2012 10:42:49

Gostaria de saber como posso fazer uma macro para filtrar o valor "X", do campo FILTRO na minha tabela MAIN, no formulário.
Para que não apareçam mais quando eu o abrir.

Obrigado.

Avelino Sampaio   27/03/2012 09:05:23

Thiago,

desculpa pois não consegui entender o que deseja. Explique diferente.

No aguardo.

Luciane   28/03/2012 10:29:42

Criei um formulário com várias opções de cursos, para consultar gostaria de saber como filtrar apenas os cadastro feitos para cada tipo de curso; ou seja, mesmo quando peço apenas de um determinado curso, ele retorna todos os cadastros feitos e demarca com -1 o curso em referencia. Obrigada.

Thiago   30/03/2012 13:41:50

Tenho um formulário em que várias pessoas atualizam ao mesmo tempo.

Eu preciso de saber como fazer para que ninguém acesse o mesmo registro, e que o registro após ser atualizado não apareça mais.

Criei um campo FILTRO, em que toda hora que o primeiro campo é preenchido ele recebe o valor X; e uma macro que pega os registros com esse campo nulo.

Mas não está dando certo, se você puder me mostrar uma maneira melhor pra fazer isso....
Obrigado !

Marcos Oliveira   28/04/2012 12:20:58

Boa tarde AVELINO,

Preciso saber quantas vezes um devedor foi cadastrado no meu sistema, ou seja, preciso criar uma espécie de passagem do devedor em meu cadastro. Por exemplo, posso ter em meu sistema um mesmo devedor com débitos com diversos clientes. Exemplo;

Devedor: Marcos Paulo Silva - CPF. 000.123.456-78 - Vamos dizer que este mesmo devedor deva aos clientes A, B e também o C. – Gostaria que no mesmo momento que eu digitasse o nome do devedor na minha caixa de texto para procura-lo no meu banco de dados, eu recebesse a informação de todos os cadastro do mesmo no sistema,ou seja, se ele foi cadastrado 3 vezes por reter 3 débitos com diferentes clientes , gostaria que me listasse os 3 cadastros feitos para que eu escolhesse qual eu irei cobrar ou acionar.

Uma espécie de passagem. Pode me ajudar !!??

Obrigado!! Marcos Oliveira.

Marcos Oliveira   28/04/2012 12:50:39

Boa Tarde Avelino,
Na verdade não quero saber se ele(Devedor) já foi cadastrado, quero saber quantas vezes ele ja foi cadastro. Como seu exemplo acima, gostaria que ao digitar o nome do devedor, o sistema me listasse quantas vezes ele foi cadastrado e tivesse como escolher o cadastro que quero ver.

Exemplo, o sistema listou 3 vezes o nome ;

Marcos Oliveira - vamos dizer que este devedor deva a 3 clientes diferentes, eu escolheria qual dos débitos eu quero visualizar atraves de dois cliques em cima do nome.

pode me ajudar !!

Marcos Henrique   28/04/2012 17:35:29

Olá!

Avelino, estou criando um formulário para cadastro de viagens e nele existe os campos "nº_Ordem_de_Serviço" e "Nome_do_Viajante" entre outros. Quero Colocar uma crítica ao salvar. Quero que saber se o "nº_Ordem_de_Serviço" é o mesmo que foi criado para o "Nome_do_Viajante" na tabela "Ordem_de_Serviço" antes de salvar os dados na tabela "Viagem". Se possível gostaria de sua ajuda para saber como fazer esta crítica funcionar.

Alessandro   02/05/2012 18:02:03

Boa tarde, preciso de ajuda, preciso criar no meu formulário um botão que ao clicar vai direcionar para um site e automaticamente concatenar com o nr de CPF para abrir as informações do Cliente, alguém sabe como eu faço isso?

Estevão   13/05/2012 06:30:27

Adoro criar macros com botões para abrir planilha
presciso de mais conhecimento
OBRIGADO

Wanderley   18/05/2012 15:40:53

Olá, não estou conseguindo filtrar os nomes para meu banco de dados de clientes.
Gostaria de saber quais são as palavras variáveis e onde devem ser colocadas para o filtro funcionar.
Já tentei de todas as formas e não deu certo.

Private Sub cboConsulta_AfterUpdate()
DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0)
Me!cli_Nome.SetFocus
Me!cboConsulta = Null
End Sub

Avelino Sampaio   21/05/2012 05:12:46

Wanderley,

Quais os nomes dos campos que vc usa no seu cadastro ?
A sua cambo tem quantas colunas e quais os nomes dos campos, em sequência, destas colunas ?

No aguardo

Moreschi   25/05/2012 08:43:26

Olá,
tenho 10 caixas de texto num formulário. P1, ..... P10
Gostaria de usar a instrução For next para gravar o conteúdo destas caixas.
Como faço para que reconheça o conteúdo?
Porque quando faço:
For i = 1 to 10
a=P(i) ou a = "P" & (i)
não reconhece o valor de cada caixa.

Obrigado

Avelino Sampaio   25/05/2012 08:59:57

Moreschi,

dim a(10)

For i = 1 to 10
a(i)=me("p" & i)
next

Sucesso!

Moreschi   25/05/2012 10:16:58

Grande Avelino!

Funcionou perfeitamente.

Muito obrigado e abraços

Fabio   27/05/2012 10:45:43

Olá Avelino, muito obrigado por suas contribuições, são de grande valia para quem está a procura de algumas soluções.

Tenho aqui uma solução sua para filtrar em um formulário continuo por Cliente e Data, por Cliente está tudo ok, porém quando vou preencher o campo data esta dando erro... poderia me ajudar no que está dando este erro?

segue código:


Option Compare Database
Dim x As String
Dim j As Byte
Dim filtro As String
---------------------------------
Private Sub Form_Open(Cancel As Integer)
Me!tx2.SetFocus
Me.Filter = ""
End Sub
------------------------------------
Private Sub tx1_Change()
x = Me!tx1.Text
j = 0
If Len(Me!tx1.Text & "") > 0 Then j = j + 1
If Len(Me!tx2 & "") > 0 Then j = j + 2
Select Case j
Case 0
Me.Filter = ""
Me.FilterOn = False
Me!tx1.SetFocus
Exit Sub
Case 1
filtro = "Data Venda Like '*" & Me!tx1.Text & "*'"
Case 2
filtro = "NomeFirma Like '*" & Me!tx2 & "*'"
Case 3
filtro = "Data Venda Like '*" & Me!tx1.Text & "*' AND NomeFirma Like '*" & Me!tx2 & "*'"
End Select
Me.Filter = filtro
Me.FilterOn = True
Me!tx1 = x
Me!tx1.SelStart = Len(x & "")
End Sub
------------------------------------------------------
Private Sub tx2_Change()
j = 0
x = Me!tx2.Text
If Len(Me!tx2.Text & "") > 0 Then j = j + 1
If Len(Me!tx1 & "") > 0 Then j = j + 2
Select Case j
Case 0
Me.Filter = ""
Me.FilterOn = False
Me!tx2.SetFocus
Exit Sub
Case 1
filtro = "NomeFirma Like '*" & Me!tx2.Text & "*'"
Case 2
filtro = "Data Venda Like '*" & Me!tx1 & "*'"
Case 3
filtro = "NomeFirma Like '*" & Me!tx2.Text & "*' AND Data Venda Like '*" & Me!tx1 & "*'"
End Select
Me.Filter = filtro
Me.FilterOn = True
Me!tx2 = x
Me!tx2.SelStart = Len(x & "")
End Sub
---------------------------------------------

Desde já agradeço por sua boa vontade. Abraço!

Fabio   27/05/2012 10:57:00

Olá Avelino, é incrível mas acabei de descobrir o que estava errado.
No campo "DATA VENDA" o espaço entre as palavras era o causador do erro, desculpe incomodar e obrigado pelas suas contribuições.

Abraço!

Avelino Sampaio   28/05/2012 05:31:55

Fabio,

obrigado pelo feedback e muito sucesso!


Moreschi   12/06/2012 13:50:45

Olá Avelino, como vai?

Tenho um formulário onde informo as datas (inicial e final).
Quero filtrar os dados da tabela pelo período e também pela variável tipo = 2 ou tipo = 4.

Não está funcionando, onde está o meu erro?

Dim cr As Recordset
Dim SQL As String

SQL = "SELECT * FROM CRMcontatosDiversos where Tipo = 2 Or Tipo = 4 "
SQL = SQL & "And Data >= " & Format([Dti], "mm/dd/yyyy")
SQL = SQL & "And Data <= " & Format([Dtf], "mm/dd/yyyy")

SQL = SQL & "Order by data;"
Set cr = CurrentDb.OpenRecordset(SQL)

Abraços

Avelino Sampaio   13/06/2012 04:34:08

Moreschi,

qual é o erro que acusa ? Erro de sintaxe ?

Inclua espaços nos locais indicados.

SQL = "SELECT * FROM CRMcontatosDiversos where Tipo = 2 Or Tipo = 4 "
SQL = SQL & "And Data >= " & Format([Dti], "mm/dd/yyyy")
SQL = SQL & "< ESPAÇO >And Data <= " & Format([Dtf], "mm/dd/yyyy")
SQL = SQL & "< ESPAÇO >Order by data;"

Sucesso!

Moreschi   13/06/2012 07:40:32

Bom dia Avelino!
Realmente resolveu o problema de sintaxe, mas não está filtrando.
Informo no formulário 01/05/12 31/05/12 ---> resultado: vem dados desde 2003, ou seja, todos os dados da tabela.
Por que será que não está filtrando?
Abraços

Avelino Sampaio   13/06/2012 07:56:59

Moreschi,

primeiro realize teste individuais e por fim junte as partes:

Teste 1:

SQL = "SELECT * FROM CRMcontatosDiversos where Tipo = 2 Or Tipo = 4"
SQL = SQL & "< ESPAÇO >Order by data;"

Teste 2:

Use o BETWEEN e a tralha (#) e procure não usar o nome DATA que é reservado do Access

SQL = "SELECT * FROM CRMcontatosDiversos WHERE"
SQL = SQL & "< ESPAÇO > CRMcontatosDiversos.[Data] Between #" & Format([Dti], "mm/dd/yyyy")
SQL = SQL & "# And #" & Format([Dtf], "mm/dd/yyyy") & "#"
SQL = SQL & "< ESPAÇO >Order by CRMcontatosDiversos.[data];"

Tudo funcionando, junte as duas partes

Sucesso!

Moreschi   13/06/2012 11:50:40

Grande Avelino,
Após fazer o que você recomendou, continuou sem filtrar.
Coloquei entre parantisis e veja como ficou. Agora esta funcionando.
SQL = "SELECT * FROM CRMcontatosDiversos where"
SQL = SQL & " (CRMcontatosDiversos.[Tipo] = 2 or CRMcontatosDiversos.[Tipo] = 4)"
SQL = SQL & " and CRMcontatosDiversos.[DataPV] Between #" & Format([Dti], "mm/dd/yyyy")
SQL = SQL & "#And #" & Format([Dtf], "mm/dd/yyyy") & "#"
SQL = SQL & " Order by CRMcontatosDiversos.[dataPV];"
Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta

Muito obrigado mais uma vez. Esta foi difícil, mas com a sua ajuda consegui.


Avelino Sampaio   14/06/2012 07:30:44

Moreschi,

obrigado pelo feedback e sucesso no seu projeto!


Gil   16/06/2012 10:11:32

Amigo Avelino, antes de tudo agradeço a Deus por existir pessoas como você que se prontifica a ajudar quem ainda não sabe andar (meu caso no access).

vi e pus em em pratica seus ensinos, agora preciso,se possivel que me ajude em uma função, meu filtro ja esta funcionando quando faço busca pelo nome do cliente, agora como faço para filtrar também por outro critério ao mesmo tempo? no meu caso apelido (que é muito usado aqui onde moro).
Grande abraço e mais uma vez obrigado.

Jaffer Silva calhau   05/07/2012 00:51:58

Sr. Avelino boa noite!!!

estou trabalhando num formulario cadastro de cliente mas gostaria dem fazer

comando de filtragem é aplicado em formulários e em relatórios que possuem o foco. Por exemplo, no cadastro de clientes, tem uma combobox aonde se seleciona o cliente de interesse para a exibição do seu respectivo cadastro, só que eu precisava filtra com duas condição, por nome ou por cpf, para evirar que seja cadastrado um pessoa mais que uma vez.

assisti a sua aula, enendi, só gostaria de ssaber se a montagem dos codigo é o memso, tendo envista que o campo cpf esta no campo 5 não se se a ordem altera o funcionamento da escrita do código e o carregamento do formulario.

Juliano Lopez   05/07/2012 08:58:54

Avelino, bom dia. Queria te pedir ajuda com o seguinte. Tenho varias funções gravadas em tabelas. Gostaria de chamar essas funções pelo VBA.

A minha tabela se chama TFuncs, tem um campo ID (numero) e um campo FunçãoEscrita (memorando). Ao clicar no texto1 dentro de meu forms, quero que ele faça uma especie de dlookup() nesta tabela e já execute o que vai estar escrito dentro dela.

Uma segunda opção, seria já pegar uma caixa de texto dentro do forms, escrever a função ali e pedir para o access executar ela. Porém ainda não consegui localizar uma forma de fazer isso.

Obrigado por sua atenção a todos que postam aqui em seu site. Site que por sinal é uma "mão na roda". Melhor, uma não... duas mãos na roda... rsrs
Abraço.
JLopez

Avelino Sampaio   05/07/2012 17:38:10

Juliano

funções são armazenas no módulo global e não em tabelas. Qual o foi motivo de guardar os códigos em uma tabela ?

No aguardo

Juliano Lopez   05/07/2012 18:06:58

Então Avelino, eu queria fazer alterações em funções sem precisar desconectar o banco para isso. Se estiver em um modulo, não posso reescrever quando alguém estiver conectado. A necessidade surgiu em corrigir uma formula no VBA mesmo com os usuários usando o banco. Ou até mesmo, incluir uma nova função.

Exemplo: a função1 iria gerar uma msg box. Porém, eu gostaria que a hora fosse gravada. Logo, eu iria criar a função2 e escrever na tabela de funções, dentro da função1, que deveria ser chamado a função2 após a caixa de msg.

Jaffer Silva Calhau   06/07/2012 00:41:19

Sr. Avelino Boa noite

Fiz a o formulario frmNovoCliente que tem no Maestro v3 só que acredito ter feito como consta nos código que vc fez no entanto esta dando o seguiunte erro quando abro o formulario ele da erro em tempo de execução 438 quando mando depurar ele sinaliza em amarelo a linha:
Me!Lista.RowSource = strSql

Estou usando o acces 2010

Abraço!!!!!

Segue o codigo abaixo.

Option Compare Database
Private Function fncCarregaLista(filtro As String)
Dim strSql As String
strSql = "SELECT Código, NomeDoCliente "
strSql = strSql & "FROM TabCliente "
strSql = strSql & "WHERE NomeDoCliente like ""*" & filtro & "*"" "
strSql = strSql & "ORDER BY NomeDoCliente;"
Me!Lista.RowSource = strSql
End Function
'
Private Sub BtSalvar_Click()
Dim rs As DAO.Recordset
Dim id As Long

If Len(Me!Texto2 & "") = 0 Then
Me!Texto2.SetFocus
Exit Sub
End If

If Dcount("*", "TabCliente", "NomeDoCliente = """ & Me!Texto2 & """") = 1 Then
MsgBox "Cliente já cadastrado...", , "Aviso"
Me!Texto2.SetFocus
Exit Sub
End If

Set rs = CurrentDb.OpenRecordset("TabCliente")
rs.AddNew
id = rs!Código 'captura o número exclusivo do novo registro
rs!NomeDoCliente = Me!Texto2
rs.Update
rs.Close
Set rs = Nothing
Forms!ForTabCliente.Filter = "Código = " & id
Forms!ForTabCliente.FilterOn = True
Forms!frmClientes!cli_Endereço.SetFocus
DoCmd.Close acForm, "frmNovoCliente"
End Sub

Private Sub Lista_DblClick(Cancel As Integer)
Forms!ForTabCliente.Filter = "Código = " & Me!Lista.Column(0)
Forms!ForTabCliente.FilterOn = True
Forms!ForTabCliente!NomeDoCliente.SetFocus
DoCmd.Close acForm, "ForNovoCliente"
End Sub

Private Sub Texto2_Change()
Call fncCarregaLista(Me!Texto2.Text)
End Sub

Private Sub Texto2_GotFocus()
Me!Texto2.SelStart = Len(Me!Texto2 & "")
Call fncCarregaLista(Me!Texto2.Text)
End Sub

Private Function fncLimpaCampos()
Me!Texto2 = Null
contaRazao = 0
Me!Lista = -1
Me!Texto2.SetFocus
End Function

Eduardo Souza   11/07/2012 18:58:05

Avelino, se você continuar assim, sugiro que você pense em conceder certificação a "futuros programadores".
Gostei muito desse tópico sobre filtragem, que chega ser melhor do que muito manual oficial da Microsoft.
Um abraço.

MARCOS OLIVEIRA   19/07/2012 17:44:46

BOA TARDE AVELINO.

Preciso de uma ajuda. Tenho uma tela no meu sistema chamada “consulta devedor” quero criar uma CAIXA DE COMBINAÇÃO para filtrar todos os DEVEDORES de um determinado CLIENTE no CÓDIGO DO MEU NEGOCIADOR. Em suma quero criar 2 (duas) caixas de combinação onde meu NEGOCIADOR insira na primeira seu CÓDIGO e na segunda o CÓDIGO DO CLIENTE e assim o sistema me liste todos os devedores deste cliente no código do meu negociador.

Nomes das minhas tabelas:

Tab_negociador
Tab_cliente
Tab_devedores

OBRIGADO AGUARDO RETORNO


ISAC ALVES   23/07/2012 13:24:55

CARO, GOSTARIA DE FAZER INCUSÃO DE REGISTRO EM UMA TABELA APROVEITANDO OS DADOS DE UMA OUTRA, OU SEJA QUANDO DIGITAR UM CAMPO COMO MATRICULA ELE JÁ INCLUIR O NOME ENDREÇO ETC. DESTE CLIENTE QUE JÁ SE ENCONTRA NUMA TABELA CADASTRO, SÓ INCLUIRIA DADOS NOVOS ,PENSO QUE SERIA UM RELACIONAMENTO DE TABELAS.

MEU E-MAIL É ISACEDUCAR@HOTMAIL.COM

CJota   31/07/2012 08:56:51

Bom dia Avelino!
Estou com dificuldade no comando SQL para gerar um relatório filtrando por período e nome simultaneamente. Estou trabalhando em VB10 e o meu banco é Access 2000. Tenho no meu banco a TB_ALIMENTACAO que guarda as informações de consumo de cada funcionário do meu restaurante (exemplificando apenas). No final do mês, quero um relatório detalhado de cada consumo do funcionário e o total do consumo para ser descontado do pagamento.
Tentei o código abaixo, sugerido por você:

Format(me!txDataInicial,"mm/dd/yyyy") & "# AND #" & Format(me!txDataFinal,"mm/dd/yyyy")

Mas o VB não aceita. Fiz algumas alterações e ficou assim:

filtro = Convert.ToDateTime(dtpInicio.Text) & "# AND #" & Convert.ToDateTime(dtpFinal.Text)
comando.CommandText = "SELECT * FROM TB_ALIMENTACAO WHERE Data BETWEEN #" & filtro & "#"
Onde: dtpInicio=data inicial; dtpFinal= data final
Assim como está, ele me traz os dados de todos os funcionários. Preciso agora que ele me traga os dados apenas do funcionário selecionado no combobox (cmbNome) mas não consegui saber onde colocar o filtro. Também não consegui fazer a ordenação.
Se puder me dar uma dicas ficarei muito agradecido.
Ah! e parabéns pelo site. Está muito bacana.

Moreschi   06/08/2012 10:41:57

Jaffer
Coloque um espaço antes de cada palavra.
strSql = strSql & " FROM TabCliente "
strSql = strSql & " WHERE NomeDoCliente like ""*" & filtro & "*"" "
strSql = strSql & " ORDER BY NomeDoCliente;"
Só nestas 3 linhas, a primeira não tem espaço

Andre   09/08/2012 15:22:55

Boa tarde.

Criei um Listbox dentro de um Form (Access), atrelado a uma query. Defini este Listbox como multipla selacoes simples. Digamos que abri o formulario e no listbox selecionei as opcoes laranja, maca e uva. Como faco para capturar os itens selecionados no listbox e passa-los como parametro para um campo criterio de uma query?

obrigado

Avelino Sampaio   09/08/2012 16:31:16

Andre,

A query será usada para carregar um relatório ou um formulário ?

No aguardo

Moreschi   09/08/2012 16:57:07

Olá André,
Na sua consulta (query) tem que aparecer todas as frutas de uma vez (as escolhidas no listbox) ou uma por vez?

Andre   10/08/2012 08:49:28

Pessoal,

Obrigado pelo retorno. As queries resultado da selacao das frutas (no listbox) sera carregada no proprio formulario, em outros listbox. ± assim. Tenho 4 listbox, que sao carregados no load do form e estao funcionando perfeitamente. Logo abaixo de cada listbox eu coloquei um botao. Quando dou um click neste, entao o evento deve pegar os campo(s) selecionados (ou considerar todos caso nao haja selecao) e passar como parametro para outras 3 queries. Essas outras queries estao ligadas aos outros 3 listbox. Assim, quando dou um click, os outros 3 listbox sao atualizados (atraves de suas proprias queries e um comando requery) baseados nos itens selecionados no primeiro. Esta acao 'e realizada para qualquer listbox que eu venha a dar um click no seu respectivo botao query. Ou seja, a selecao em um listbox + botao query sempre ira atualizar os outros tres.


Ainda ontem, depois de postar essa duvida aqui, eu acabei achando um exemplo perfeito para o que eu precisava. Apliquei e deu muito certo. No link abaixo tem o examplo bem ilustrado e detalhado.

http://www.blueclaw-db.com/multi_select_parameter_form.htm
De qualquer forma, agradeco e retorno e o interesse na solucao dessa implementacao.

Avelino Sampaio   10/08/2012 09:09:46

Andre,

obrigado pelo feedback e pelo link.

Sucesso!

Antonio Carlos   21/08/2012 15:38:20

TENHO 2 TABELAs simples DE ALUNOS COM AS RESPECTIVAS NOTAS (uma do fundamental e outra do médio) a do fundamental a pesquisa funciona normal já a do médio também funcionava até ontem quando fui fazer a consulta e apareceu a seguinte mensagem: "É NULO / É NEGADO NULO". Sou iniciante e gostaria de saber se poderia me ajudar?

Tomé Vicente   23/08/2012 19:46:06

Muito muito bom!

Moreschi   24/08/2012 11:07:54

Olá Avelino, como vai?
Gostaria de saber se é possível um sub formulário não vinculado a uma tabela inserir várias linhas para alguns campos?
Eu tenho uma linha com um campo "Codigo" e um campo "Nome", gostaria que fosse aparecendo outras linhas como se este sub formulário estivesse vinculado a uma tabela.
Abraços

Moreschi   28/08/2012 11:51:28

Olá Avelino,
já achei a resposta.

Me.RecordSource = "Select * From NomeDaTabela"

Abraços

Tomé Vicente   14/09/2012 20:29:00

Onde posso encontrar a bd Maestro2 ?

Heitor   19/09/2012 14:42:42

Boa Tarde Galera

Preciso fazer o seguinte, tenho uma lista com varios produtos e entre eles eu digito entrada e saida em uma caixa de texto, ex: tubo 5/8 entrada : 5 saida 5 saldo total: 0, ai eu vo e mudo faço isso para varios outros pordutos e quando eu volto em tubo 5/8 ele me exibe o valor 0, ou seja o ultimo valor de cada item.
Me Ajudem Por Favor

Desde ja Muito Obrigado

Email: heitor.luiz@hotmail.com

Heitor   19/09/2012 14:44:06

Galera preciso em VBA

valeu muito obrigado

Guidemar   30/09/2012 04:16:58

Boa Noite Avelino,
Primeiro quero te dar meus parabéns, seus exemplos são ótimos, seu artigo espetacular.
Num dos seus exemplos de filtragem(frmAtendimentos) tem três campos de filtro, se eu acrescentar mais um compo(Marca), posso filtrar através de um campo individual ou mais de um ou ate mesmo os quatro campos juntos, é possível?, se puder me mandar o exemplo ou até mesmo postar o código agradeço desde já.

Email: guidemar2010@hotmail.com

Avelino Sampaio   01/10/2012 07:55:21

Guildemar,

use a técnica empregada no exemplo do formulário frmFiltraFormContinuo. Neste exemplo ele usa dois campos. Para expadir para 4, use a combinação:

If Len(Me!tx1.Text & "") > 0 Then j = j + 1
If Len(Me!tx2 & "") > 0 Then j = j + 2
If Len(Me!tx3 & "") > 0 Then j = j + 4
If Len(Me!tx4 & "") > 0 Then j = j + 8

Com isso , vc terá 16 combinações possiveis de filtragem no SELECT CASE.

Bom estudo!

Moreschi   03/10/2012 10:49:36

Olá
Estou tentando colocar os nomes de uma consulta num campo texto, um em cada linha, mas não está dando certo.

Dim SQL As String
Dim cr As Recordset

SQL = "SELECT FuncionariosPonte.Reg, FuncionariosPonte.Nome, FuncionariosPonte.Depto, FuncionariosPonte.Acrescenta"
SQL = SQL & " FROM FuncionariosPonte"
SQL = SQL & " WHERE (((FuncionariosPonte.Acrescenta)=-1));"
Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta
cr.MoveFirst

Do
Me.Comentarios = cr("depto") & " " & cr("reg") & " " & cr("nome")
Chr (13) & Chr(10)
cr.MoveNext
Loop Until cr.EOF

Avelino Sampaio   03/10/2012 11:05:36

Moreschi ,

Experimente assim:

...
Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta
cr.MoveFirst
Me!Comentarios=""
Do
Me!Comentarios =Me!Comentarios & cr("depto") & " " & cr("reg") & " " & cr("nome") & Chr (13) & Chr(10)
cr.MoveNext
Loop Until cr.EOF


Sucesso!

Moreschi   03/10/2012 13:37:21

Grande Avelino,
Na mosca.
Obrigado e um grande abraço.

Guidemar   06/10/2012 15:03:10

Boa Tarde Avelino,

Não consegui adaptar o seu conselho pois eu teria dois campos ali que pesquisaria entre duas datas.
Tentei colocar mais uma caixa de texto para pesquisa por placa no frmAtendimentos mas me abre uma caixa inserir valor do parâmetro.

segue o código

Dim j As Boolean, filtro As String
If IsNull(Me!cboCliente) Then j = True
If IsNull(Me!DataInicial) Then j = True
If IsNull(Me!DataFinal) Then j = True
If j = True Then
MsgBox "Preencha todos os campos...", vbInformation, "Aviso"
Me!cboCliente.SetFocus
Exit Sub
End If
filtro = "IdFrete = " & cboCliente.Column(0)

filtro = filtro & " AND Tb_ControleContainer.bd_Data Between #" & Format(Me!DataInicial, "mm/dd/yyyy") & "# AND #" & Format(Me!DataFinal, "mm/dd/yyyy") & "#"
'----------------------------------------------------------------------------------------------------------------------------------------------------------------
filtro = "bd_placa = " & TexPlaca

sfrmConsulta.Form.Filter = filtro
sfrmConsulta.Form.FilterOn = True
se puder me ajudar te agradeço.


Pedro Trindade   16/10/2012 11:31:56

Avelino,
Depois de quebrar muito a cabeça (pois sou leigo total), consegui fazer o filtro funcionar. Graças a sua explicação. Entretanto, fiquei com uma dúvida: O nome do meu campo é "Nome do Aluno" e, pra poder fazer o filtro funcionar, tive que alterar o nome do campo para simplesmente "Nome". Pode me dizer porquê?
Outra coisa: Nem todas as vídeos-aulas estão disponíveis, não é?
Obrigado

Avelino Sampaio   16/10/2012 12:01:51

Pedro,

Vá na seção "Tutoriais" aqui do site e leia o artigo "Referenciar objetos Forms e Reports ..." que vc irá entender o problema com o nome do seu campo.

Sim, alguns vídeos não estão disponíveis ainda. Procure utilizar o Internet Explorer, pois o Firefox não consegue exibir alguns dos vídeos.

Avelino Joao   29/10/2012 08:00:51

Mestre Avelino bom dia obrigado mais uma vez por compartilha os teus conhecimentos com agente
é o seguinte fiz um teste no codigo que voce mostra aqui no site sobre filtro notei ao activar a combbox ele abre Base de dado e não chefe depois de desativar a combbox então fiz uma alteração no codigo não sei, se é a melhor forma de se trabalhar com combbox mais notei que ele fecha o Bse de dados depois desativar a combbox.
Aqui tens o codigo:
Private Sub cboClientes_GotFocus()
Dim strSql As String
Dim db As DAO.Database
Dim rst As DAO.Recordset
On Error Resume Next
strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='São Paulo';"
Me!cboClientes.RowSource = strSql
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
Me.cboClientes = ""
End Sub
Private Sub cboClientes_LostFocus()
Dim strSQL As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
On Error Resume Next
strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='São Paulo';"
Me!cboClientes.RowSource = strSql
Set rs = Nothing
db.Close
Set db = Nothing
Me.cboClientes = ""
End Sub

Carlos Santos   29/10/2012 10:33:16

Senhores, bom dia!
Estou com uma duvida e gostaria da ajuda de todos.
Tenho uma tabela com varios campos.
Gostaria de fazer uma formulario com uma COMBOBOX para selecionar meus itens e criar um relatório com todos os campos da tabela a partir de 3 seleções somente.
alguem pode me ajudar???
sou leigo no assunto e preciso de ajuda.

Avelino Joao   29/10/2012 11:27:50

Bom Dia Santos ola veja na area de download vais encontrar exemplo sobre isso.

Otavio   07/11/2012 09:55:32

Avelino não manjo absolutamente nada de programação
Criei um formulário e com o exemplo mencionado aqui consegui criar uma listbox alimentada pelo vba
Porem na hora que crio um campo no formulário para filtrar essa listbox ele simplesmente não filtra

Veja o que eu tentei
a primeira parte da certo o resto que é para filtrar não vai de jeito nenhum
texto2 é a caixa de texto que criei para o formulário
list0 foi minha listbox alimentada pela consulta

Valeo


Option Compare Database

Private Sub Form_Open(Cancel As Integer)
Dim strSql As String
strSql = "Select * from total"
Me!Lista0.RowSource = strSql

End Sub

Private Sub Texto2_Change()
Dim filtro As String
If Len(Me!Texto2.Text & "") = 0 Then
'Se não há nada digitado, remove o filtro
Me!Lista0.Filter = ""
Me!Lista0.FilterOn = False
Exit Sub
End If
filtro = "[texto2] like '*" & Me!Texto2.Text & "*'"
Me!Lista0.Filter = filtro
Me!Lista0.FilterOn = True
End Sub

Marcelo dos Santos   07/11/2012 22:53:38

Boa Noite Avelino

Estou tentando filtrar um dia e mês em um relatório de aniversariantes
DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "[Day(NASC)]>=[Forms]![FrmRelNiver]![Day(Datainicio)] and [Month(nasc)]>=[Forms]![FrmRelNiver]![Month(Datainicio)] and [day(nasc)]<=[Forms]![FrmRelNiver]![day(Datafim)] and [Month(nasc)]<=[Forms]![FrmRelNiver]![Month(Datafim)]"

só q retorna vazio não esta filtrando de acordo com o critério acima

Atencipo agradecimentos

Avelino Sampaio   08/11/2012 07:39:47

Otávio,

observe esta sua linha:

filtro = "[texto2] like '*" & Me!Texto2.Text & "*'"

[texto2] é o nome do campo lá na sua tabela ? Tem que colocar o nome do campo como esta na sua tabela.

filtro = "[NomeDoCampoDaSuaTabela] like '*" & Me!Texto2.Text & "*'"

Sucesso!

Avelino Sampaio   08/11/2012 07:58:24

Marcelo dos Santos,

tente desta forma:

DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "format([NASC],'mmdd') Between " & format(Forms!FrmRelNiver!Datainicio,"mmdd" & " and " & format(Forms!FrmRelNiver!Datafim,"mmdd")

Se este botão que chama pelo relatório estiver no próprio formulário FrmRelNiver, vc pode reduzir a sintaxe para:

DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "format([NASC],'mmdd') Between " & format(me!Datainicio,"mmdd" & " and " & format(me!Datafim,"mmdd")

Sucesso!

Otavio   08/11/2012 17:16:04

Então
texto2 foi apenas uma caixa de texto que criei no formulário sem vínculo com a tabela
Vou arrumar isso
mas na hora de rodar o macro não é nele que da o problema
e no Me!Lista0.Filter (em todas as tentativas de fazer referencia ao listbox)
Não sei nomear na macro a listbox ele da erro toda vez que tenta filtrar ou na tentativa de tirar o filtro
Como ficaria pois no seu exemplo ele filtra um subformulario no que eu preciso é uma listbox alimentada pelo vba

Acho que agora ficou mais preciso a informação

Muito obrigado

Otavio   11/11/2012 03:34:08

Avelino Conseguiiii

Show de bola muito obrigado

Desculpe pelos milhares de email

Valeo

Avelino Sampaio   12/11/2012 03:26:50

Otavio,

obrigado pelo feedback e sucesso!

Otavio   13/11/2012 00:26:21

Avelino Teria como eu alimentar uma caixa de texto com um determinada consulta?
Eu estou criando um campo de validação segue o macro que eu fiz não sei como colocar o respectivo valor no campo texto essa consulta leva em conta os próprios campos do formulário
Na parte do me!validação que eu coloco a variável ao invés de realizar a consulta ele escreve a consulta inteira na minha tabela validação

Muito obrigado pela ajuda

Private Sub Validação_GotFocus()
Dim val As String
val = "Select iif(Status='Fechada','Recusar Material',iif(ordem is null,'Recusar Material',iif(Produto is null,'Recusar Material','Aceita'))) as Validação"
val = val & " From Pedidos inner join tabela on (pedidos.ordem1=Tabela.Ordem)and(pedidos.Material=Tabela.Produto)"
Me!Validação = val

End Sub

Avelino Sampaio   13/11/2012 13:41:32

Otavio,

Monte esta sua consulta no modo gráfica
use a função Dlookup() para preencher o campo, chamando pela consulta.

exemplo:

me!vadidação = Dlookup("Validação","NomeDaSuaConsulta")

Sucesso!

Otavio   13/11/2012 20:50:12

Avelino sensacional consegui colocar no campo e chamar a consulta
só não estou entendendo o por que só retornar um valor
Fiz a consulta para se outro campo for um determinado valor ele trazer recusar
se estiver tudo certo ele trazer aceitar na consulta fica tudo certo
No formulário ele só fica aceita
lol
É a ultima vez que peço sua ajuda prometo não perguntar mais nada ahahahah

muito obrigado


Dim vay As String

vay = DLookup("Validação", "Valida")

Me!Validação = vay

Joao   21/11/2012 11:31:28

Caro Avelino, como faço para que uma consulta de passagem do access 2010 (SQL) execute um intervalo de datas obedecendo o que é digitado em um formulário.
Obrigado!

Avelino Sampaio   21/11/2012 13:27:30

João,

copie e cole o link abaixo no seu navegador e veja se consegue encontrar algo que deseja.

http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=consulta+de+passagem

Sucesso!

Tico   22/11/2012 11:19:24

Avelino,

Aproveitando a necessidade do João que também é a minha e vi que ele também ainda não respondeu; eu vasculhei o link enviado; porém não consegui encontrar algo parecido.

O que preciso é o seguinte: tenho uma consulta de passagem no Access com o código abaixo, porém a mesma não consegue ler o formulário. Caro mestre onde estou errando?

Tenho um programa no Access que abrirá um formulário(MENU) VIA MACRO autoexec;

No formulário têm os campos DATA_INI e DATA_FIM (valores inseridos manualmente) ex:

01/11/2012
05/11/2012

Na consulta de passagem tenho :

SELECT

A.PRODUTO,
A.DATA

FROM

CADASTRO_DE_PRODUTOS A


WHERE

A.DATA >= FORM!MENU!DATA_INI AND
A.DATA <= FORM!MENU!DATA_FIM

ORDER BY
A.PRODUTO

Tico   22/11/2012 11:19:27

Avelino,

Aproveitando a necessidade do João que também é a minha e vi que ele também ainda não respondeu; eu vasculhei o link enviado; porém não consegui encontrar algo parecido.

O que preciso é o seguinte: tenho uma consulta de passagem no Access com o código abaixo, porém a mesma não consegue ler o formulário. Caro mestre onde estou errando?

Tenho um programa no Access que abrirá um formulário(MENU) VIA MACRO autoexec;

No formulário têm os campos DATA_INI e DATA_FIM (valores inseridos manualmente) ex:

01/11/2012
05/11/2012

Na consulta de passagem tenho :

SELECT

A.PRODUTO,
A.DATA

FROM

CADASTRO_DE_PRODUTOS A


WHERE

A.DATA >= FORM!MENU!DATA_INI AND
A.DATA <= FORM!MENU!DATA_FIM

ORDER BY
A.PRODUTO

Celso Santos   22/11/2012 12:27:30

Boa tarde Avelino,
Poderia me ajudar na seguinte questão:

Tenho uma relação de CNPJ e preciso criar uma consulta que "desconsidere" os 6 últimos dígitos.
O detalhe, é que nem todos os CNPJs possuem 14 digitos que é o padrão, então neste caso teria que primeiramente acrescentar "zeros" a esquerda para deixar todos com 14 dígiots, e posteriormente excluir os 6 últimos.

Como posso fazer isso?

Desde já agradeço,

Avelino Sampaio   23/11/2012 07:06:33

Celso,

neste caso não seria melhor extrair os 8 primeiros.

ParteCNPJ: left([nomeCampoCnpj];8)

Sucesso!

Avelino Sampaio   23/11/2012 07:08:44

Tico,

troque o comando FORM por FORMS

...
A.DATA >= FORMS!MENU!DATA_INI AND
A.DATA <= FORMS!MENU!DATA_FIM


Sucesso!

Tico   23/11/2012 09:58:40

Avelino!!

desde já agradeço a antenção prestada;

quando fiz a sua dica o programa apresentou a seguinte mensagem:
command not properly ended "COMANDO NÃO TERMINOU CORRETAMENTE"
tem como corrigir isto? Desde já obrigado.

Avelino Sampaio   26/11/2012 07:28:35

Tico,

Não havia prestado bem atenção na sua consulta. Está faltando a clausula AS para renomear o nome da tabela, dentro da consulta.

DE:

...
FROM
CADASTRO_DE_PRODUTOS A
...

PARA:

...
FROM
CADASTRO_DE_PRODUTOS AS A
..

Sucesso!

Celso   26/11/2012 16:50:30

Obrigado pela dica Avelino. O motivo de não ser possível extrair os 8 primeiros dígitos é pq nem todos os CNPJs possuem o total de 14 dígitos, então foi necessário incluir zeros a esquerda para padronizar todos os CNPJs e em seguida, extrair os 8 primeiros.
Consegui fazer com o seguinte código:

Mid(Format([tbl_cnpj_inicial.CNPJ],"00000000000000"),1,8) AS CNPJ

Talvez ajude alguém...

Camilo Salomão   17/12/2012 16:44:39

Boa tarde Avelino. Estou elaborando um banco de dados para calcular a variação cambial entre os mais diferentes contratos. Por exemplo: Efetuei o cadastro "A" no dia 01/01/2012, e a cotação da moeda estrangeira era de R$ 2,00. No dia 02/01/2012, efetuei o cadastro de um contrato "B", cuja cotação era de R$ 3,00. Até o momento não tivemos cálculo de variação, pois são dois contratos distintos. Porém, no dia 05/05/2012 a cotação da moeda estrangeira para o contrato "A", passou para R$5,00. Problema: como eu faço para saber a diferença da variação, do contrato A, em um campo denominado diferença?

Como impedir a adição de um novo registro sob as condições abaixo?   28/12/2012 18:06:30

Caro Avelino, boa tarde.

Numa consulta "qryPacientes" possuo os campos Pront (numérico), Paciente (Texto), DtaInternação (Data/Hora) e DtaSaída (Data/Hora)
Possuo, tambem, um formulário com um subformulário vinculado à esta consulta.
O que pretendo é:
Ao inserir a data de Internação, "DtaInternação" num novo registro, o sistema procure na consulta "qryPacientes" pelo Prontuário do Paciente "Pront" e se verificar que a data da internação "DtaInternação" se encontre entre o período anteriormente inserido exiba uma mensagem de impropriedade e impeça de continuar.

Abraços, a todos e desejo-lhe um Ano Novo repleto de realizações.

Daniela Silva   28/12/2012 21:02:19

Prezado Avelino

Tenho em uma planilha coluna com "NomeCompleto", "Cargo", "Aniversário" (este último no formato dd/mm/aaaa), dentre outras informações.
Estou tentando trazer essas primeiras 3 colunas em uma listBox quando a Data de Aniversario da pessoa for igual ao mês atual.

Na minha macro estou usando o código abaixo, entretanto ele não está capturando o "month(Aniversário). Como posso fazer isso?
sql = "SELECT NomeCompleto, Cargo, Aniversário FROM [BD Cadastro$] WHERE month(Aniversário)=month(Date)"

Abraços a todos e Feliz 2013

Avelino Sampaio   02/01/2013 10:59:37

Daniela,

experimente usando o Colchete:

sql = "SELECT NomeCompleto, Cargo, Aniversário FROM [BD Cadastro$] WHERE month([Aniversário])=month(Date)"

Sucesso!

Avelino Sampaio   02/01/2013 11:04:53

Wagner,

para impedir adição de registro sob certas condições, veja o artigo "Como saber se o cliente foi cadastrado" na seção dicas aqui do site.

Bom estudo!




Como impedir a adição de um novo registro sob as condições abaixo?   02/01/2013 19:04:01

Olá Avelino, boa tarde.

Amigão, não se trata de impedir um novo registro caso o paciente já tenha sido cadastrado e sim que a data da internação não esteja entre as datas de uma possível internação numa outra unidade de internação.

Assim, utilizei o seguinte código:

No evento antes de atualizar do campo Internação (tipo Data/Hura):

Private Sub Internação_BeforeUpdate(Cancel As Integer)
On Error GoTo TrataErro

Dim DB As DAO.Database, RST As DAO.Recordset
Dim SQL As String, X, Reg As Integer

Set DB = CurrentDb()
SQL = "Select * From qryPacientes where Pront =" & Forms!frmMovimento!frmPacientes!Pront ' Por tratar-se de um subform do Form_frmPacientes
Set RST = DB.OpenRecordset(SQL)

Reg = Me.RecordsetClone.RecordCount() 'Total de registros
RST.MoveFirst ' Vou para o primeiro registro
For X = 1 To Reg
With RST
If Not .EOF Then
If Me.Internação >= RST!Internação And Me.Internação < RST!Saída Then
MsgBox "Atenção:" & Chr(13) & "O prontuário nº " & Format(Me.Pront, "000,000") & " de " & Me.Paciente & " já consta como internado na Unidade " & Chr(13) & RST!Unidades & " no período entre " & RST!Internação & " e " & RST!Saída & ". ", vbCritical, " InfoBasic Smart System"
Me.Undo ' Desfaz o registro
End If
.MoveNext
End If
End With
Next X
RST.Close
DB.Close

TrataErro:
'MsgBox "Form_frmPacientes - Internação_BeforeUpdate" & vbCrLf & err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(err.Number)
#If DESENV Then
Stop
Resume
#End If

End Sub

Abraços, WSenna

Mauiricio   08/01/2013 13:06:30

Avelino, bom dia

Tenho uma tabela que tem um campo de nome DATA e necessito criar a query select capturando o intervalo de datas deste campo
Uso um form de uma tabela DataPeriodo e tem duas caixas de Texto destes campos Data Inicial (name DataInicial) e Data Final (name DataFinal) mas não consigo vincular

Usei este código abaixo no form mas acho que nao estou associando a criação da query com o resultado


abs

Private Sub cmdPesq_Click()
Dim strSql As String
Dim filtro As Variant
DoCmd.OpenTable "01-Movimento-diario"
filtro = "Between #" & Format(Me!DataInicial, "dd/mm/yyyy") & "# AND #" & Format(Me!DataFinal, "dd/mm/yyyy")
strSql = "SELECT * FROM 01-Movimento-diario WHERE DATA " & filtro & "#;"

End Sub

Tico   09/01/2013 10:13:39

Caro Avelino....
Tenho em um formulario uma caixa de texto "quantidade" e outra valor_individual (este formulário é de tabela origem "TB_dados" .

no formulário em consigo "displayar" a multiplicação da quantidade pelo valor_individual, ambos geram um valor_total.

Agora que são elas!!! Como faço para que este valor_total seja armazenado na TB_dados ou se for o caso em outra tabela.

desde já obrigado.

Pedro Trindade   15/01/2013 09:55:33

Avelino, Bom dia
Criei um filtro conforme exemplo:

Private Sub cboConsulta_AfterUpdate()
DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0)
Me!cli_Nome.SetFocus
Me!cboConsulta = Null
End Sub

Ele funciona bem. Entretant, ele está filtrando, também os subformulários dos registros. Está retornando os subformularios vazios, como se não houvesse registros nos subformularios.
Tem solução?
Obrigado

Camilo   17/01/2013 15:29:51

Boa tarde Avelino. Tenho uma dúvida: tenho um formulário que apresenta uma caixa de listagem e um subformulário (contínuo). Na caixa de listagem, tenho uma relação de mercadorias onde eu gostaria de selecionar quais que realmente preciso. Após gostaria que ela filtrasse meu subformulário contínuo, selecionando apenas os registros em destaque na caixa de listagem. Isso é possível?

Avelino Sampaio   18/01/2013 08:29:53

Pedro Trindade,

tem como me eniviar um exemplo (zipado) para que possa analisar este seu caso.

meu email: avelino(arroba)usandoaccess(ponto)com(ponto)br

Aguardo

Avelino Sampaio   18/01/2013 08:37:19

Camilo,

é possível sim! Tem um exemplo no Maestro que seleciona itens de uma listaBox e usa o operador IN() na filtragem. É este operador que vc deve usar. Investigue no exemplo como montar o filtro.

O resultado do código para filtragem deve ter uma semelhança com estas linhas abaixo:

me!NomeDoControleSubformulário.form.Filter = "idMercadoria in(1,7,208,67)"
me!NomeDoControleSubformulário.form.FilterOn = true

Sucesso!

Jordão Filho   05/02/2013 10:01:38

É possível criar uma Macro que não permita que o usuário edite uma determinada linha da planilha após ele digitar "Ok" em uma célula ?

Augusto   22/02/2013 09:22:10

Olá Avelino..
Mais uma vez recorro ao seu conhecimento..
Estou tentando adaptar um filtro com seleções múltiplas de uma caixa de listagem para gerar um relatório do seu Maestro. No seu exemplo o relatório é baseado numa tabela. No meu caso o meu relatório é baseado numa consulta e existem 2 critérios: o período e o cod colaborador (o que vou buscar na caixa de listagem). Tentei várias vezes mas sempre que executo o relatório ele me pede o código do colaborador. Acho que não estou conseguindo passar o que seleciono na caixa de listagem para o critério da consulta. Como faço isso? Tem como ajudar ?

sergio   22/02/2013 16:13:29

Olá Avelino... Gostaria que me ajudasse:
Tenho um formulário, tipo contínuo, e dois campos para data (data_inicial) e data (final), preciso criar um botão que, ao clicar, liste no próprio formulário contínuo, o período entre as datas que preenchi nos campos (data_inicial) e (data_final)

Aguardo seu tempo e atenção.
Abraços

Avelino Sampaio   23/02/2013 06:43:46

Augusto,

tire os critérios da consulta e use as filtragens direto no comando de chamada do relatório.

Algo assim:

filtro= "(periodo between #" & format(me!DataInicio,"mm/dd/yyyy") & "# AND #" & format(me!DataFinal,"mm/dd/yyyy") "
filtro = filtro & "#) AND (Cod IN(" & me!SeqCod & "))"

docmd.OpenReport "NomeRelatório",acViewPreview , , filtro

Sucesso!

Avelino Sampaio   23/02/2013 06:50:08

Sérgio,

baixe o aplicativo Maestro oferecido no artigo. O BD tem exemplos que atende a sua dúvida.

Use o Between para selecionar um periodo

Algo assim:

me.filter = "Datapagamento between #" & format(me!DataInicial,"mm/dd/yyyy") & "# AND #" & format(me!DataFinal,"mm/dd/yyyy") & "#)"
me.filteron = true

Bom estudo!

Augusto   25/02/2013 23:47:06

Olá AVelino..
A expressão que vc passou dá erro em tempo de execução...(Operador faltando)
Minha dúvida é que ainda não sei de que modo o filtro do cod do colaborador(que está num listbox) e do intervalo de datas é transferido para a consulta que é a base do relatório... Quando clico no botão nada é executado ...
Estou tentando há algum tempo e não consigo.. Tem como ajudar ??? Desde já agradeço ..

Augusto   27/02/2013 10:19:24

Olá Avelino ..
Consegui resolver a situação ...
Utilizei o seu código do Maestro para filtrar o CodColaborador... Mas deixei o filtro das datas direto na consulta.. Parece estar funcionando bem... Obrigado pela ajuda... Suas dicas fazem a gente pensar e recorrer a outras maneiras de solucionar o problema .. Estou no aguardo do seu curso de VBA..
Venho sempre no site recorrer a seus tutoriais e dicas..
Mais uma vez obrigado e parabéns ..

Avelino Sampaio   28/02/2013 08:32:11

Augusto,

obrigado pelo feedback e sucesso com o projeto!


Gabriel Barbosa   11/03/2013 11:12:35

Avelino, gostei muito de sua materia, e pelo que aprendi e pude implantar no meu sistema, construi o seguinte codigo para procurar um registro atraves de um criterio digitado em uma caixa de texto

Private Sub btn_procurar_Click()

Dim StrSQL As String
StrSQL = "SELECT * FROM tb_motorista WHERE Nome=" & Me!txt_localizar_nome & ";"
Me!frm_cadastro_avaliacao.RecordSource = StrSQL

End Sub

Mas o access me retorna um erro dizendo que o campo "frm_cadastro_avaliacao" nao pode ser localizado, sendo que este "campo" na verdade é um formulario.
Poderia me ajudar?? Agradeço desde já.

Avelino Sampaio   11/03/2013 11:37:06

Gabriel,

acrescente os apóstrofes na seguinte linha e veja se irá funcionar:

StrSQL = "SELECT * FROM tb_motorista WHERE Nome='" & Me!txt_localizar_nome & "';"

Sucesso!

Gabriel Barbosa   11/03/2013 11:41:50

Avelino, o access me retorna o mesmo erro, e destaca em amarelo a linha:

Me!frm_cadastro_avaliacao.RecordSource = StrSQL

Ele afirma que nao pode localizar o campo "frm_cadastro_avaliacao"

Avelino Sampaio   11/03/2013 13:12:50

Gabriel,

tente assim:

forms!frm_cadastro_avaliacao.RecordSource = StrSQL

ou assim:

Me.RecordSource = StrSQL


Sucesso!

Gabriel Barbosa   11/03/2013 18:38:23

Incrivelmente, nenhuma das duas opçoes funcionaram =/
Ambas me retornam o mesmo erro abaixo:

Erro de sintaxe (operador faltando) na expressao de consulta 'Nome=Ronaldo Dias Ferreira'.

Gabriel Barbosa   12/03/2013 08:56:03

Venho informar que a primeira opção funcionou aqui no trabalho por algum motivo desconhecido ^^

Mas enfim, ela só funcionou no botao de procurar pelo Nome, mas pela matricula nao funcionou, creio que seja pelo tipo de dados, ou estou errado?

Sendo a matricula composta totalmente por numeros, basta tirar o apostrofo ('), correto?

Agradeço pela sua ajuda, e sucesso pra vc tambem.

Moreschi   03/04/2013 15:12:23

Olá Avelino, como vai?
Um pequeno problema

Dim cr As Recordset
Dim SQL As String

Dim P1, P2, P3, P4, P5 As Double
Dim i As Integer
Dim SOMA As Double


SQL = "SELECT Dados.Codigo, Dados.Descricao, Dados.Peso1, Dados.Peso2, Dados.Peso3, Dados.Peso4, Dados.Peso5 FROM Dados"
Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta

P1 = cr("peso1")
P2 = cr("peso2")
P3 = cr("peso3")
P4 = cr("peso4")
P5 = cr("peso5")
MsgBox P5

For i = 1 To 5
SOMA = SOMA + ("P" & i)
Next i
MsgBox SOMA

está dando erro na linha SOMA = SOMA + ("P" & i)

Avelino Sampaio   03/04/2013 17:12:24

Moreschi ,

tente assim:

Dim cr As Recordset
Dim SQL As String
Dim i As Integer
Dim SOMA As Double


SQL = "SELECT Dados.Codigo, Dados.Descricao, Dados.Peso1, Dados.Peso2, Dados.Peso3, Dados.Peso4, Dados.Peso5 FROM Dados"
Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta
soma =0
For i = 1 To 5
SOMA = SOMA + nz(cr("peso" & i),0)
Next i
MsgBox SOMA


Sucesso!

Moreschi   04/04/2013 08:27:18

Bom dia Avelino!
Funcionou perfeitamente.
Abraços e muito obrigado.

Marcos Sacurae   10/04/2013 11:57:30

Bom dia Avelino,
Parabéns pelo seu trabalho, várias vezes entrei no site para tirar minhas dúvidas, mas desta vez preciso de uma ajuda.
Tenho um programa que fiz no Access 2007 para controle de compra de peças, tive que fazer uma gambi que não estava nos planos e acabei por encontrar um "erro" que não conseguí entender.
O BD tem uma tabela de produtos que tem um campo de categoria, até então não tinha ocorrido o erro por que este campo sempre estava preenchido, mas por causa da gambi e da urgência acabei usando a tabela em uma exportação para planilha do Excel.
Bem esta rotina de exportação usa a tabela com um filtro "WHERE categoria <> 'FUNDIDOS'", como a pressa mandou, 70 itens de um total de 372 este campo de categoria estava em branco, resumindo, a exportação só mandou 302 itens e não havia nenhum com categoria FUNDIDOS e sim em branco.
Tem alguma idéia do possa ter ocorrido e o que posso estar fazendo para contornar isso?

EIDE   23/04/2013 17:43:36

OLA AVELINO

O SEU CURSO DE VBA,VAI SER BEM EXPLICADO POR QUE O QUE VEJO POR AI AS EXPLICAÇÕES SÃO MUITO VAGA,TAIS COMO ME! O QUE SIGNIFICA,ME!FRM DUVIDAS SIMPLES COMO ONDE SE ENCAIXA E NOME DO CAMPO OU DO FORMULARIO OU SEJA UM ABAC DO VBA ETC, ABRAÇO SUCESSO.

Fábio Santana   06/05/2013 16:09:40

Boa tarde Avelino,

Primeiro, parabéns pela aula e explicações! Difícil ter um programador tão didático! Estou com um problema e não consigo resolvê-lo. Tenho duas caixas de combinação em cascata: Cargo e ÁreaDeAtividade. Quero gerar um relatório proveniente do filtro nas duas caixas, mas o relatório gerado apresenta todas as opções que tenho! Copiei o código de outro exemplo, mas como sou leigo no VB não vi onde estava o erro. O código é o seguinte:

Private Sub cmdExibir_click()

Dim strFiltro As String
strFiltro = ""
If Len(cboCargo & "") > 0 Then strFiltro = " and Cargo = '" & cboCargo & "'"
If Len(cboAreaDeAtividade & "") > 0 Then strFiltro = strFiltro & " and ÁreaDeAtividade = '" & cboAreaDeAtividade & "'"
If Len(strFiltro) > 0 Then strFiltro = Mid(strFiltro, 16)
DoCmd.OpenReport "RelCargo", acViewPreview

End Sub

O relatório deveria me apresentar somente o cargo e área de atividade que desejo, mas não funfa!
De antemão agradeço!

Avelino Sampaio   08/05/2013 08:24:51

Fabio,

experimente assim:

Dim filtro As String
filtro = ""
If Not IsNull(me!cboCargo) Then filtro = filtro & "Cargo LIKE '*" & me!cboCargo & "*'"
If Not IsNull(me!cboAreaDeAtividade) Then filtro = filtro & " AND ÁreaDeAtividad LIKE '*" & Me!cboAreaDeAtividade & "*'"
If InStr(filtro, "AND") = 2 Then filtro = Mid(filtro, 6)

DoCmd.OpenReport "RelCargo", acViewPreview, , FILTRO

Sucesso!

Fábio Santana   08/05/2013 18:16:18

Mestre Avelino, você é o cara!
Deu certinho. Juntamente com seu código percebi um erro de nome de parâmetro. Alterei a tabela matriz ÁreaDeAtividade e não alterei a outra tabela que era alimentada por esta, que deveria ter o mesmo nome. Por isso o relatório não encontrava o campo. Mas suas proposições foram providenciais! Obrigado pela ajuda e continue sempre ajudando os outros pois tudo isso volta pra vc!

Fábio   20/05/2013 10:27:31

Gostaria de saber como abrir o formulário que me apresente somento o menor valor de um conjunto de registros

Avelino Sampaio   21/05/2013 07:09:11

Fábio,

Seu formulário e acoplado ou desacoplado dos registros ?

Se for acoplado, pode utilizar no evento "ao abrir" a propriedade FILTER. Exemplo:

me.filter = "NomeDoCampo =" & Dmin("NomeDocampo","NomeDatabela")
me.filterOn = True

Sucesso!

Elvis Correia   22/06/2013 10:50:30

Bom dia Avelino, eu estou aprendendo os comandos que voce deixou para copiar, mas nao consegui resolver um problema no meu projeto.

eu preciso localizar um lançamento pelo código do romaneio de cadastro, mas nao quero usar o combolist quero usar um campo onde digita o código e localizo as informações digitadas.

Nome do Campo = idRomaneio
Tabela de Dados = cadRomaneio
Tabela Consulta = conRomaneio
Formulario de lançamento = lanRomaneio

desde ja agradeço e pretendo comprar seu kit para estudar em breve!!!

Rodrigo Cruvinel   02/07/2013 14:42:07

Boa Tarde Avelino,
Primeiramente eu gostaria de te agradecer pelas aulas e pelas explicações. Mas estou aprendendo ainda e não conseguir realizar no meu projeto o filtro dinâmico em list box.
Bom, eu possuo uma Tabela com o nome de Clientes onde tem o campos: IdClientes, Nome, Sexo, Data de Nascimento, CPF... e possuo um formulário onde eu cadastro o cliente e preencho todos esses campos, e se chama NovoCliente.
Só que, antes de eu cadastrar o cliente, abre-se um outro formulário para visualizar se o cliente já existe, chamado de PesquisaCliente. Esse formulário é o início desse processo. Possui uma caixa de texto onde eu escrevo o nome do cliente (chamado de Texto3), dois botões cujo um deles limpa esse campo (Texto3) e o outro copia esse campo (Texto3) para o campo "Nome" do Próximo formulário (NovoCliente) que se abrirá automaticamente para continuar o cadastro.
Certo, Essa é a vizualização do formulário PesquisaCliente. Mas a parte importante é que embaixo dos botões e da caixa de texto criei uma Caixa de listagem que eu gostaria que filtrasse os valores que eu escrevesse no Campo "Texto3", e após filtrar e achasse o cadastro que eu queria, eu clicar duas vezes no resultado da filtragem e abrisse o Formulário "NovoCliente" para visualizar todo o cadastro dele.
É apenas isso, o senhor já demonstrou mas não consegui fazer.
Lhe agradeço desde já.

Rodrigo Cruvinel   02/07/2013 14:54:08

Hahaha' Consegui filtrar, só falta clicar duas vezes. Obrigado, baixei seu arquivo e ele me auxiliou.

Rodrigo Cruvinel   02/07/2013 14:59:33

Private Sub Lista8_DblClick(Cancel As Integer)
DoCmd.OpenForm "NovoCliente"
Forms!NovoCliente.filter = "Nome = " & Me!Lista8.Column(0)
Forms!NovoCliente.FilterOn = True
Forms!NovoCliente!Nome.SetFocus
DoCmd.Close acForm, "CadastrodoCliente"
End Sub

Está dando erro! Como faço?

Rodrigo Cruvinel   02/07/2013 15:26:43

Consegui, tive que fazer umas mudanças no outro Formulário.
Obrigado

Josney Góis   04/07/2013 22:03:13

Boa Noite Avelino,

Quando eu faço um filtro para abrir um relatório por um campo string e outro por data o compilador acusa tipos incompatíveis. Vc pode me ajudar?

código:

Private Sub verapas_Click()
DoCmd.OpenReport "RelatorioAPA", acViewReport, , "[AutApa] like'" & Me.cbrdele.Column(0) & "'" 'And "[dtinst] between #" & Format(Me.dataini, "mm/dd/yyyy") & "# AND #" & Format(Me.datafinal, "mm/dd/yyyy") & "#"
DoCmd.Maximize
End Sub

End Sub

Avelino Sampaio   05/07/2013 08:03:44

Josney,

o campo [AutApa] é do tipo string ou número ?

se for do tipo string, utilize:

Private Sub verapas_Click()
dim filtro as string
filtro="[AutApa] = '" & Me.cbrdele.Column(0) & "' And ([dtinst] between #" & Format(Me!dataini, "mm/dd/yyyy") & "# AND #" & Format(Me!datafinal, "mm/dd/yyyy") & "#)"
DoCmd.OpenReport "RelatorioAPA", acViewReport, , filtro
DoCmd.Maximize
End Sub


Se for do tipo número:

Private Sub verapas_Click()
dim filtro as string
filtro="[AutApa] = " & Me!cbrdele.Column(0) & " And ([dtinst] between #" & Format(Me!dataini, "mm/dd/yyyy") & "# AND #" & Format(Me!datafinal, "mm/dd/yyyy") & "#)"
DoCmd.OpenReport "RelatorioAPA", acViewReport, , filtro
DoCmd.Maximize
End Sub

Sucesso!

Josney Góis   09/07/2013 22:13:32

Boa Noite Avelino,

Com sua resposta conseguir resolver o problema. O campo e do tipo String.

Obrigado,

DEUS TE ABENÇOE


Moreschi   12/07/2013 10:36:29

Olá Avelino, como vai?
Como faço para saber os nomes dos campos de uma tabela usando VBA?
Abraços e obrigado

Josney Góis   18/07/2013 20:00:37

Ola, Avelino, Boa Noite.
Não consigo jogar os valores de um testbox dentro de um listbox com apenas uma coluna

Private Sub testa_Click()
Dim testando As String
testando = "josney"
Me!testelista.RowSource = testando
End Sub

Não aparece nada dentro da listbox

Avelino Sampaio   19/07/2013 08:07:06

Josney,

a propriedades "Tipo de Origem da Linha" tem que estar setada para "Lista de valores". Pode ser setado pelo VBA. Exemplo:

Me!TesteLista.RowSourceType = "Lista de valores"
Me!TesteLista.AddItem "Josney"

Sucesso!

Luan Pignata   19/07/2013 10:16:27

Iae mano, gostei muito do seu tutorial, andei procurando em vários lugares e os seus ajudam bastante, mas to precisando de uma ajuda, eu fiz um controle de estoque, onde tem cadastro de clientes, fornecedor, e tem a data de entrada e de saida, e queria colocar para quando eu fosse imprimir um relatorio, eu escolhesse o mes e o ano, soh eles dois da data de entrada, para poder imprimir soh aquelas caixas que entraram no mes que eu quero, se puder pf, me ajuda, ou entao me de algumas dicas.

katia fernandes   19/07/2013 11:12:26

Bom dia Avelino
Estou com um pq problema, veja se pode me ajudar.
Tenho um relatório como notas de candidatos ordenados da maior para a menor nota, e gostaria de colocar um campo classificando (1°, 2º, 3º) e não sei como fazer, você pode me dar alguma dica?

Josney Góis   19/07/2013 21:25:46

Estou com dúvidas com listas. Como faço para salvar os valores da lista e como vinculá-los ao "id" de uma tabela? Na realidade, quero criar um controle de movimentação dos registros, jogar na lista o login do usuário e os campos que este usuário alterou ou incluiu, "movimentou". Vc pode me ajudar a criar esta lista? Já sei como jogar os valores na lista, mas como salvá-la e vincular a um "id" não sei como fazer.

fico agradecido pela ajuda anterior.


Avelino Sampaio   20/07/2013 07:26:12

Katia,

Veja o meu tutorial "Somar, contar e NUMERAR em relatórios" e aprende como numerar.

Sucesso!

Avelino Sampaio   20/07/2013 07:41:09

Luan,

use a função format() para realizar a filtragem desejada. Exemplo:

docmd.OpenReport "NomeRelatório", acViewPreview , ,"format(DataEntrada,'yyyymm') =" & year(date()) & me!campoMês)

Sucesso!

katia fernandes   22/07/2013 13:56:25

Obrigada Avelino, coloquei a ordem no relatório e tudo funcionou.
Tenho como guardar em algum campo esta ordem?


Moreschi   29/07/2013 14:27:39

Olá Luan Pignata ,
crie dois campo no formulário, dti e dtf (data inicial, data final).
Na sua consulta, na linha de critério, coloque: >=forms!nomeDoSeuFormulário.dti e <=forms!nomeDoSeuFormulário.dtf
Abraços

Benedito Soares   07/08/2013 14:51:24

Boa Tarde!
Prezado Avelino, estou trabalhando com subformulários vinculados ao principal. Saberia, por favor dizer o porque ao sair do subform, exatamento o campo de vinculo do form principal apaga a informação contida nele. Meu campo de vinculo chama-se trimestre.

Grato.

Estevam Marinho   23/08/2013 10:26:10

Avelino
Criar consultas pelo Sql em vez de pelo modo gráfico torna o sistema mais rápido - com melhor desempenho em redes?

Usar "procedimento do evento" com a escrita dos códigos em vez de macros torna o sistema mais rápido - com melhor desempenho em redes?
Estevam

Antonio Ozael   01/09/2013 18:35:48

Caro Avelino,
Obrigado pelas dicas. Gostaria de saber como faço para comparar e sincronizar tabelas de dois bancos de dados diferentes (de clientes diferentes) para atualizar as tabelas.
Preciso atualizar apenas alguns campos novos das tabelas, sem alterar os dados cadastrados dos clientes.
Atualmente uso um programa para comparar os bancos e verificar quais as tabelas que estão diferentes. Depois disso copio os campos da tabela mais nova e colo na mais antiga do outro banco.
Tem algum comando no qual poderia verificar o que há de diferente nessas tabelas e copiar esses novos campos automaticamente(comparar as tabelas dos dois bancos, encontrar as diferenças na estrutura e sincronizá-las)?

Tiago Martins   05/09/2013 17:20:47

Avelino, obrigado por todas as dicas. Estou iniciando nesta aventura de programação e estou achando muito interessante, porém tenho apanhado muito....

Estou criando um banco de dados onde em um formulário gostaria que na caixa de texto não acoplada, apareça o somatório dos valores de um campo especifico de uma caixa de listagem que está sendo filtada dentro do formulário.

Tentei gerar uma função publica onde soma os itens da coluna desta caixa de listagem e como valor padrão da caixa de texto coloquei a função publica. Porém tem dando erro na função, acredito que estou escrevendo errado a função. Pode me dar um auxilio de como fazer a soma de um item da caixa de listagem que está sendo filtrada?

'Public Function fnctotal() As Long
'fnctotal = Soma(Me![Lista].[Column](8))
'End Function

Mais uma vez agradeço pela ajuda.

Avelino Sampaio   07/09/2013 09:44:39

Tiago,

em um novo módulo, copie a seguinte função:

Function fncSomaListBox(strRowSource As String, Coluna As Byte) As Currency
dim rs as dao.recordset
Set rs = CurrentDb.OpenRecordset(strRowSource)
While Not rs.EOF
fncSomaListBox = fncSomaListBox + rs.Fields(Coluna)
rs.MoveNext
Wend
Set rs = Nothing
End Function

Como "Origem do controle" da caixa de texto que receberá a somatória, digite:
=fncSomaListBox(SuaListBox.RowSource;8)

Caso você tenha problemas em virtude da incompatibilidade de SQL provocada pela utilização do filtro, poderá utilizar a função abaixo:

Function fncSomaListBox(ListBox As Control, Coluna As Byte) As Currency
Dim ctl As Control
Set ctl = ListBox
ctl.BoundColumn = Coluna
For i = 0 To ctl.ListCount - 1
fncSomaListBox = fncSomaListBox + ctl.ItemData(i)
Next
Set ctl = Nothing
End Function

Neste caso, você deverá utilizar a seguinte expressão na TextBox:
=fncSomaListBox(SuaListBox;8)

Ambas funções poderão ser utilizadas para somar qualquer coluna, bastando alterar tal argumento.
Saliento a necessidade de se chamar o Recalc após alterar a data para filtragem da ListBox.

Sucesso!

Alexandre Alves Pereira   11/09/2013 13:51:10

Tenho uma tabela de filiais denominada "OM" com os campos: "sigla", "nome", "endereço", "Bairro", etc.
Tenho uma segunda tabela denominada "rol" onde meus clientes estão relacionados.

Tenho em ambas as tabelas campos com o mesmo nome:
Sigla OM, Nome OM, Endereço OM, Nº OM, Complemento OM, Bairro OM, Cidade OM, UF OM, CEP OM, País OM,

Minha intenção é de que no formulário de entrada da tabela Rol, quando inserido a "sigla OM", ele comparasse esse campo com o campo "sigla OM" da tabela "OM" e preenchesse automaticamente os demais.

Como fazer isso? E onde inserir o comando no formulário do ACCESS? Onde colocar o evento?

Sou iniciante no ACCESS. Podem ajudar-me?

Avelino Sampaio   12/09/2013 05:52:08

Alexandre, crie uma combobox com origem na tabela OM e acrescente todos os campos necessários nesta combo. Assim que selecionar um item da combo vc terá todos os valores correspondentes nas colunas e que devem ser passados para os campos no formulário. Use o assistente para montar a combo.

Copie e cole no seu navegar o endereço abaixo, aonde ofereço um exemplo de combobox.

http://www.usandoaccess.com.br/dicas/dica32.asp?id=1#inicio

Sucesso!

Carlos Oliveira   16/09/2013 19:53:23

Prezado Avelino,

Quero agradecer pela orientação prestada no fórum.

Agora, gostaria de "dificultar" um pouco:

A ideia é fazer que uma caixa de mensagens, denominada DATA INICIAL, apareça já com uma data, que no caso seria a do dia corrente.

Reproduzo a orientação que você me forneceu:

SELECT PAGAMENTOS.DataPagamento, PAGAMENTOS.ValorPagamento, PAGAMENTOS.Despesa
FROM PAGAMENTOS
WHERE (((PAGAMENTOS.DataPagamento) Between date() And [DATA FINAL]));

Grato, mais uma vez!

Alexandre Lopes   10/10/2013 07:13:10

Essas aulas de videos sao otimas,mas estou com problemas, fazer uma junçao data de nascimento e idade,isso num bd access 2007,e outra tenho uma coluna que contem varios itens com duplicaçoes com valores e meses destintos,como faço para calcular esses itensque possa me dar um total por itens.

Kelson   30/10/2013 15:54:17

Estou usando vba excel associado ao access e tentando fazer algumas consulta SQL:

Dim bd As Database
Dim rs As Recordset
Dim SQLPeriodo As String

Set bd = OpenDatabase(ActiveWorkbook.Path & "\BDFrota.mdb")
Set rs = bd.OpenRecordset("SQLPeriodo")

'Por Nome e Periodo
SELECT Tabela1.[Código], Tabela1.[Nome], Tabela1.[Data], Tabela1.[Cidade], Tabela1.[Estado]
FROM Tabela1
WHERE (((Tabela1.[Nome])="Teste1") AND ((Tabela1.[Data]) Between #1/1/2013# And #12/31/2013#));


Só que não estou conseguindo extrair essa consulta na Planilha.

acsanches   30/10/2013 20:12:32

Boa noite Avelino,
Estou usando as funções abaixo no access 2.0. Estou fazendo o mesmo projeto no access 2007, mas, não está dando certo, vc teria como me ajudar.

Att.

Sanches

----------------------------------------------------------------------------------------------------------------
' Cria uma cláusula WHERE usando critérios de procura inseridos pelo usuário e
' define a propriedade OrigemDoRegistro do Sub_Form_Cheque_Pagamento_Banco.

Dim MySQL As String, MyCriteria As String, MyRecordSource As String
Dim ArgCount As Integer
Dim Tmp As Variant

' Inicializa a contagem de argumentos.
ArgCount = 0

' Inicializa instrução SELECT.
MySQL = "SELECT * FROM [TAB_CADASTRO subformulário] WHERE "
MyCriteria = ""

' Usa valores inseridos nas caixas de texto do cabeçalho do formulário para criar critérios para a cláusula WHERE.

AdicionarAWhere [Ficha Cliente], "[FichaCliente]", MyCriteria, ArgCount
AdicionarAWhere [Nome Cadastro], "[NomeCadastro]", MyCriteria, ArgCount
AdicionarAWhere [Endereço Cadastro], "[EndereçoCadastro]", MyCriteria, ArgCount
'AdicionarAWhere [Classe Atendimento], "[ClasseAtendimento]", MyCriteria, ArgCount
'AdicionarAWhere [Ficha], "[Ficha_Cliente]", MyCriteria, ArgCount
'AdicionarAWhere [Telefone Residencial], "[TelefoneResCadastro]", MyCriteria, ArgCount
'AdicionarAWhere [Telefone Celular], "[TelefoneCelularCadastro]", MyCriteria, ArgCount
'AdicionarAWhere [Telefone Comercial], "[TelefoneComercialCadastro]", MyCriteria, ArgCount

' Se não há critério especificado, retorna todos os registros.
If MyCriteria = "" Then
MyCriteria = "True"
End If

' Cria instrução SELECT.
MyRecordSource = MySQL & MyCriteria

' Define a propriedade OrigemDoRegistro de Sub_Form.
Me![TAB_CADASTRO subformulário].Form.RecordSource = MyRecordSource

' Se nenhum registro corresponder ao critério, exibe mensagem.
' Move o foco para o botão Limpar.
If Me![TAB_CADASTRO subformulário].Form.RecordsetClone.RecordCount = 0 Then
MsgBox "Nenhum Registro Cadastrado corresponde ao critério que você inseriu.", 48, "Nenhum registro encontrado"
Me!Limpar.SetFocus
Else
' Ativa controle na seção detalhe.
'Tmp = AtivarControles("Detail", True)
' Move o ponto de inserção para o Sub_Form.
Me![TAB_CADASTRO subformulário].SetFocus
End If


Giorgio   21/01/2014 11:10:47

Avelino
Gostei muito da sua Didática, sua explicações são excelentes.
Tenho um caso em Access, que preciso usar aquela pesquisa por caracter que você mostrou no vídeo. Vou tentar fazer com as suas aulas disponíveis aqui!
Estou com dúvida de como selecionar/pegar umas das linhas pesquisadas e mostrar o registro no formulário atual?
Qualquer dúvida, foi pedir sua ajuda MESTRE!!!

Dorival de Oliveira   22/01/2014 16:55:54

Avelino, boa tarde!

Por favor preciso de sua ajuda. Tenho um cadastro de membros da igreja, onde criei um combo para mostrar todos relatório criados. Então preciso que ao selecionar um dos relatórios o mesmo seja visualizado para impressão. Me ajude por favor.

Meu contato: dorival_de_oliveira2050@yahoo.com.br

Avelino Sampaio   22/01/2014 17:13:55

Dorival,

baixe o aplicativo exemplo Maestro da seção downloads do meu site
Entre no modo estrutura do Maestro, mantendo pressionada a tecla SHIFT na inicialização.
Estude o formulário frmListaRelatórios

Bom estudo!

Manoel   28/01/2014 11:58:24

Avelino... Boa tarde!!!

Adquiri material do Usando Access, por sinal, bem didático, ótimos exemplos onde procuro aperfeiçoamento no uso desta ferramenta. Apesar do esforço encontrei uma dificuldade em extrair dados através da Consulta, a qual peço o vosso apoio.

BD
Doc Data Valor
390722 25/02/2013 R$ 369.515,59
390722 25/03/2013 R$ 366.391,85
390722 25/04/2013 R$ 363.928,47
390722 25/05/2013 R$ 337.620,68
390722 25/06/2013 R$ 322.889,82
390722 25/07/2013 R$ 343.000,13
390722 04/08/2013 R$ 116.289,98
399183 25/05/2013 R$ 6.499,61
399183 25/06/2013 R$ 13.682,13
399183 25/07/2013 R$ 187.687,70
399183 25/08/2013 R$ 316.650,24
399183 25/09/2013 R$ 147.712,05
399183 28/11/2013 R$ 195.642,91
399308 25/05/2013 R$ 15.107,84
399308 25/06/2013 R$ 14.002,08
399308 25/07/2013 R$ 13.463,52
399308 25/08/2013 R$ 15.302,80
399308 25/09/2013 R$ 12.579,92
399924 25/07/2013 R$ 88.941,55
399924 25/08/2013 R$ 85.063,95
399924 25/09/2013 R$ 85.063,95
399924 25/10/2013 R$ 85.063,95
399924 25/11/2013 R$ 85.063,95
399924 25/12/2013 R$ 85.063,95

Destes dados preciso extrair a média dos valores das três maiores datas de cada documento.

e-mail: mrabade@uol.com.br

Giorgio   29/01/2014 09:12:04

Avelino bom dia!
Você tem a vídeo-aula que ensina como fazer aquela pesquisa que filtra por caracteres, mostrando os resultados no quadro abaixo?
Estou usando o Access 2010, tentei fazer varias vezes mas nada deu certo.
Este tipo de pesquisa que você mostrou, no minha experiência, é a melhor pesquisa para uso em aplicativos de uso rápido de acesso. Pesquisa nota 10.
Eu estou querendo usar esta pesquisa em um aplicativo Access, com a possibilidade de pegar a linha selecionada abaixo, exibindo os dados no formulário.
Poderia me ajudar?

Ícaro Ferraz   03/02/2014 18:53:50

Avelino boa tarde!

Tenho em um form. uma caixa de listagem onde existe o campo "Data de Vencimento" e gostaria realizar um filtro entre datas, é possível? Poderia me ajudar?

Desde de já agradeço.

Giorgio   10/02/2014 18:21:21

Avelino tudo bem!
Poderia mostrar melhor a (Pesquisa que filtra por caracteres) em SQL usando o Access?

Moreschi   16/02/2014 19:23:29

Olá Avelino, como vai?

Estou usando o access 2007 e só aparece vazio ao receber o foco. (No access 2000 funciona bem)

Dim SQL As String
SQL = "SELECT Produtos.CodigoPD, Produtos.NomePD, Produtos.PrecoDeVendaPD, Produtos.UnidadeVPD"
SQL = SQL & " FROM Produtos"
SQL = SQL & " ORDER BY Produtos.CodigoPD;"
Me!ProdutoVe.RowSource = SQL


Onde estou errando?
Abraços

Avelino Sampaio   17/02/2014 05:26:42

Moreschi,

Troque o nome da variável de SQL para strSQL

Imagino que o controle ProdutoVe seja uma combobox ou um listbox. Reveja suas propriedade, como por exemplo o número de colunas e a propriedade "tipo da linha de origem" se está para TABELA/CONSULTA.

Sucesso!

Moreschi   20/02/2014 15:52:47

Olá Avelino, tudo bem?
Fiz o que você falou, mas não deu certo. O combobox só funciona se estiver ligado a uma consulta ou tabela.
Abraços

Moreschi   24/02/2014 08:39:50

Olá Avelino,
Achei a causa.
No access 2000, costumo, na criação de um novo programa, usar um modelo já existente deletar tudo e criar o meu programa em cima.
Ao fazer isto no access 2007 deu o problema.
Refiz o programa usando um banco de dados vazio e tudo funcionou. Só não entendo por que os eventos não funcionam quando se faz um programa em cima de um modelo no access 2007.

Abraços e obrigado.

Marco Aurelio   04/03/2014 20:51:24

Prezados,

Estou com um problema. Tenho uma caixa de combinaçao em um formulario que passa como parametro valores (nomes de municipios para ser mais exato). Ao selecionar um dos nomes dos municipios isso dispara uma macro que abre um relatorio com as informaçoes. Tudo funciona, mas quando seleciono um valor null na caixa de combinação as informaçoes nao aparecem. Resumindo, voces podem me ajudar a exibir o relatorio quando o parametro nessa caixa de combinação esta null:

Abs

Avelino Sampaio   05/03/2014 04:24:38

Marco,

precisa ter uma idéia de como está aplicando a filtragem. Bom, vc pode testar usando a função NZ() ou a função iif(). Exemplo:

nz(forms!NomeFormulário!NomeCombobox;Aqui coloca a filtragem para resultado nulo)

ou

iif(forms!NomeFormulário!NomeCombobox is null;Aqui coloca a filtragem para resultado nulo;forms!NomeFormulário!NomeCombobox)

Se tiver usando a filtragem na consulta origem do relatório, coloque assim:

forms!NomeFormulário!NomeCombobox OR forms!NomeFormulário!NomeCombobox is null

Sucesso!

Marco Aurelio   05/03/2014 12:09:51

Obrigado Avelino. Funcionou parcialmente. Quando seleciono o valor null na caixa de combinacao aparece as informacoes referentes ao null e de todos os demais.

Abs

Lucas Brioschi   21/03/2014 12:35:57

Olá Avelino
Criei um formulario que associa o cod ao usuario com o comando Nome =[Cod].[Column](1), e funciona bem, seleciona o codigo e ele tras o nome de acordo com a tabela "Codigo e nome"
Porem apenas o codigo aparece preenchido na minha tabela.

Existem um forma de eu vincular e ambos os campos sairem preenchidos na tabela?

EDUARDO ROCHA   24/04/2014 14:41:31

TENHO UM FORM A QUE TEM SUB FORM B QUEM LISTBOX CHAMADO fCDEQ(UMA LISTA DE EQUIPAMENTOS). DENTRO DO SUB EU TENHO UM BOTAO DE INCLUSAO QUE ABRE UM FORM C PARA INCLUIR UM NOVO EQUIPAMENTO;
NÃO ESTOU CONS2GUINDO ATUALIZAR A LISTBOX AUTOMATICAMENTE APOS INCLUSÃO. TENHO QUE TECLAR F9

Avelino Sampaio   24/04/2014 17:25:47

Eduardo,

Experimente utilizar o método requery

Me!fcdeq.requery

Sucesso!

EDUARDO ROCHA   24/04/2014 17:54:08

LEMBRE-SE QUE ESTOU FORA DO FORMULARIO.
ISSO QUE É O PROBLEMA. JA FIZ TODAS AS FORMAS DE REFERENCIAS.

Avelino Sampaio   24/04/2014 17:58:12

Eduardo

tente assim:

forms("nome do formulário")!fcdeq.requery

Sucesso!

RMateus   27/04/2014 20:21:58

Excelente trabalho.
Necessitava da vossa ajuda para conseguir filtrar um relatório tendo por base os dados de duas Listas ou mais listas diferentes, por favor. Já fiz várias tentativas sem sucesso:

Dim filtro As String
Dim Sel As Variant
Dim j As Boolean

filtro = "in("
For Each Sel In Me!Lista.ItemsSelected
filtro = filtro & Me!Lista.Column(0, Sel) & ","
j = True
Next
filtro = Mid(filtro, 1, (Len(filtro) - 1)) & ")"
filtro = "idfruta " & filtro

If j = False Then
MsgBox "Selecione uma ou mais frutas...", vbInformation, "Aviso"
Me!Lista.SetFocus
Me!Lista = 0
Else
DoCmd.OpenReport "rltFrutas", acViewPreview, , filtro
End If


Muito obrigado.

Marcio Melo   09/06/2014 14:45:43

Retornando para deixar meu Depoimento, toda vez que assito aos seus vídeos amplia o meu conhecimento e consigo absorver novos detalhes, já assite a todos mais de duas vezes.
Uma empresa que fiz um programa em 2011... época que conheci o usandoaccess e adquiri todo conteúdo e o monta Ribbons me pediu essa semana 08/06/2014 para fazer algo ainda maior, vai ser uma nova empreitada e dessa vez vou montar tudo baseado no conhecimento que adquiri ao longo desses anos. O seu conteúdo esta excepcional e hiper organizado nem precisava vir até o site; sem contar que os vídeos são completos... tenho alguns livros de VBA... nenhum deles se compara com o que você tem de forma tão didática, elaborada em exemplos e com utilitários de extrema importância para um pontapé inicial; mas uma vez pesso permissão para utilizar todo esse conteúdo...

Forte abraço!

Sou mais Brasil!

Luiz Roberto   30/06/2014 11:13:15

Estou estudando por conta própria e comecei a montar um BD em Access 2010. Montei um formulário para cadastrar empresas e nela há duas caixas de combinação. Uma que contém os Estados brasileiros, origem na tabela TBL_UF, com sigla e nome de cada Estado e a outra, origem na tabela TBL_CIDADES, que contém as siglas dos Estados e os nomes dos Municípios..
Quero que, ao escolher um Estado, na caixa seguinte só apareçam os nomes dos municípios referentes ao Estado escolhido.
Como faço isso?

Moreschi   07/07/2014 15:29:21

Olá Avelino, como vai?
Como faço para contar a quantidade de diretórios e subdiretórios?
Na verdade eu quero listar os arquivos que estão dentro destes diretórios (pastas).
Abraços

Moreschi   07/07/2014 15:33:22

Olá Luiz Roberto,
Esta eu sei.
Na consulta da cidade e no campo UF, digite: forms!seuFormulario.nomeDoCampo_UF
Ao escolher o estado, só vai aparecer as cidades deste.
Abraços

Avelino Sampaio   08/07/2014 08:59:38

Moreschi,

copie e cole o endereço abaixo no seu navegador.

http://maximoaccess.maisforum.com/t17780-resolvidoproblemas-em-colocar-todos-os-arquivos-numa-listbox

Deverá se inscrever no fórum para ter acesso aos códigos.

Sucesso!

Moreschi   27/07/2014 07:31:10

Olá Avelino, como vai?
Como faço para ler a porta serial Com1 em access?
Estou querendo ler o peso de uma balança do caixa de supermercado.
Abraços e obrigado

Avelino Sampaio   28/07/2014 09:31:02

Moreschi,

copie e cole o endereço abaixo no seu navegador:

http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=porta+serial+com

Boa pesquisa!

Moreschi   30/07/2014 10:50:40

Avelino, obrigado pelo Link.
Esta declaração funciona em 32 bits, mas não em 64. Você sabe como transformá-la?
Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long

Abraços

Avelino Sampaio   30/07/2014 10:58:29

Moreschi,

leia o meu turorial "64 bits - Seus aplicativos no futuro do presente" para saber como adptar a API para os 64 bits

Bom estudo!

Lucas Gimenes   29/08/2014 11:35:07

Avelino, bom dia.

Estou com duas dúvidas:

1° - Tenho 3 ComboBox onde cada uma faz uma filtragem diferente. O que eu preciso é: filtro a ComboBox 1 - Ordem de Serviço (existe O.S com mesma numeração)
Com essa O.S eu filtraria na ComboBox 2 a Disciplina. E por fim na ComboBox3 eu filtraria o Colaborador.

Todo esses filtros eu consigo enxergar numa ListView e estou utilizando SQL pra filtragem de uma tabela do Excel+Access.

2° - Como atualizar uma ListView? Gostaria de mudar por exemplo um nome do Cliente e toda a minha ListView onde estiver com o nome do Cliente irá atualizar.

DESDE JÁ AGRADEÇO PELA AJUDA!!!

Att,

Lucas Gimenes

Moreschi   24/09/2014 10:45:39

Bom dia Avelino, como vai?
Este código abaixo é para um formulário ler uma consulta de referência cruzada. Como faço para um relatório? É que eu gostaria de imprimir. Abraços e obrigado

Private Sub Form_Open(Cancel As Integer)
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox "Não há registros a exibir." & vbCrLf _
& "Cancelando o Formulário...", _
vbInformation, "Sem Registros"
Cancel = True
End If
End Sub

Private Sub Form_Load()
On Error GoTo Trata_Erro:
Dim rs As Recordset, I As Integer
Set rs = Me.RecordsetClone ' Define o recordset.
With rs
For I = 0 To .Fields.Count - 1
Me("c" & I).ControlSource = .Fields(I).Name
Select Case I
Case 0, 1
Me("t" & I).Caption = .Fields(I).Name
Case 2
Me("t" & I).Caption = "JAN"
Case 3
Me("t" & I).Caption = "FEV"
Case 4
Me("t" & I).Caption = "MAR"
Case 5
Me("t" & I).Caption = "ABR"
Case 6
Me("t" & I).Caption = "MAI"
Case 7
Me("t" & I).Caption = "JUN"
Case 8
Me("t" & I).Caption = "JUL"
Case 9
Me("t" & I).Caption = "AGO"
Case 10
Me("t" & I).Caption = "SET"
Case 11
Me("t" & I).Caption = "OUT"
Case 12
Me("t" & I).Caption = "NOV"
Case 13
Me("t" & I).Caption = "DEZ"
End Select

Me("c" & I).Visible = True
Me("t" & I).Visible = True
Next I
End With
rs.Close
Set rs = Nothing ' Libera memória
Exit Sub

Trata_Erro:
Call InformaErro 'Função do módulo basUtilitarios.

End Sub

ZAck   28/09/2014 18:36:57

Montei um filtro, sendo que os resultados deste filtro preciso abrir as paginas já montadas em Html. Alguem pode me ajudar ?


Vanderlei   18/11/2014 08:24:15

Listar em um formulário somente os dados que tenha o campo DataRecebimento em branco. Nos critérios da consulta eu consigo,l mas via código em se tratando de data eu me atrapalho.
Com isso evito a repetição de consultas

Grato

Avelino Sampaio   18/11/2014 09:11:55

Vanderlei,

veja um exemplo de filtragem para o formulário

Me.Filter = "dataRecebimento is null"
Me.FilterOn = True

Sucesso!

tarso   25/12/2014 18:24:34

Tenho um banco de dados de hospedagem eu queria que o meu formulario de calendário por apto fizesse a leitura das reservas colocando o número da reserva na respectiva data daquela reserva (data inicial e data termino)

Raquel Keles   07/01/2015 15:35:50

Parabéns, suas colocações são maravilhosas.

Preciso fazer uma consulta que seja atualizada automaticamente, conforme os dados são inseridos no banco de dados e que exclua os valores de data superior a 61 dias.
Como posso fazer?

André   14/01/2015 15:11:28

Muito bom Avelino! Parabéns!!!

Você conhece de alguma maneira de preencher os campos de um Form dando dois cliques em uma linha do SubForm??? ou atualizar os campos do Form ao selecionar a linha do SubForm? é possível fazer isso?

Avelino Sampaio   15/01/2015 07:48:14

André,

aqui mesmo na seção "tutorias" leia o artigo "Referenciar objetos Forms e Reports e às suas propriedades"

Bom estudo!

Limitar a quantidade da lista da caixa de combinação   15/01/2015 14:17:19

Senhores, boa tarde. Gostaria de uma ajuda por favor.
Como eu faço para limitar a lista da caixa de combinação? Por exemplo, eu tenho uma caixa de combinação de mês e ano eu quero que na lista aparece somente 5 meses/ano após o mês corrente.

Obrigado.

Avelino Sampaio   17/01/2015 10:07:24

Olá

Pode utilizar a função dateAdd(). Exemplo da filtragem:

...WHERE DataPedido Between format(date(),'mm/yyyy') AND Format(dateadd('m', 5, date()),'mm/yyyy')

Sucesso!

Jonatan Barbosa   29/01/2015 17:33:10

Olá, Avelino.

Estou tentando usar a função DSoma para somar o campo 'Quantidade' combinando dois critérios, mas algo não funciona.

Expr1: DSoma("Quantidade";"Balanço";"AtualizarComo='Entrada'" E "CódigoProduto= & CódigoProduto")

Com um critério funciona, com dois não.


Desde já, grato pela ajuda.


Avelino Sampaio   29/01/2015 18:13:42

Jonatan,

experimente assim:

Expr1: DSoma("Quantidade";"Balanço";"AtualizarComo='Entrada' E CódigoProduto= " & [CódigoProduto])

Sucesso!

Jonatan Barbosa   29/01/2015 18:29:00

Obrigado, Avelino pela ajuda, mas não funcionou.

Erro de sintaxe (operador faltando) na expressão de consulta 'AtualizarComo='Entrada' E CódigoProduto=14'.

Alguma ideia, amigo?

Avelino Sampaio   29/01/2015 18:37:11

Jonatan,

''AtualizarComo='Entrada' AND CódigoProduto=14'


Jonatan Barbosa   29/01/2015 18:42:09

Amigo, agradeço a ajuda, mas não funcionou.

Avelino Sampaio   30/01/2015 07:15:09

Jonatan

Informe o seu email pela seção contato aqui do site, que eu te passo mais algumas dicas.

No aguardo

Misael Furtado   19/02/2015 11:28:38

Avelino, muito bom esse método de filtragem e tenho aprendido bastante com o seu Kit Usando o Access e Revistas. Só uma dúvida, é possível criar o filtro com agrupamentos, soma e usando o "INNER JOIN"?
Estou tentando como mostra abaixo mas, não carrega os dados na lista.

strsql = "qryPrincipal.ID_SOP, qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, Count(qryPrincipal.Zone_Name) AS Qtde"
strsql = strsql & " FROM tblZonas INNER JOIN qryPrincipal ON tblZonas.ID_Zona = qryPrincipal.ID_Zona GROUP BY qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, tblZonas.ID_Zona WHERE " & filtro
strsql = strsql & " ORDER BY tblZonas.ID_Zona;"
Me!Lista.RowSource = strsql
filtroLista = filtro

Avelino Sampaio   19/02/2015 11:59:38

Misael, sem o uso da filtragem (WHERE) a listabox carrega direitinho ?

No aguardo

Misael Furtado   20/02/2015 10:10:15

Obrigado Avelino pelo retorno.

Como ficaria esse código acima? Eu tirei o (WHERE) mas, a listbox não carregou. Eu testei tirando o FiltroLista = filtro mas também não carregou.

strsql = "qryPrincipal.ID_SOP, qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, Count(qryPrincipal.Zone_Name) AS Qtde"
strsql = strsql & " FROM tblZonas INNER JOIN qryPrincipal ON tblZonas.ID_Zona = qryPrincipal.ID_Zona GROUP BY qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, tblZonas.ID_Zona" ' WHERE " & filtro
strsql = strsql & " ORDER BY tblZonas.ID_Zona;"
Me!Lista.RowSource = strsql
'filtroLista = filtro

jair madeira   28/03/2015 19:14:00

Criar uma combo para quando eu seliecionar o codigo da Extensao, abro o relatorio relativo com os registros relativo aquela extensao.
A combo esta em um tabela diferente dos dados dados que relatorio extrai extar as informacoes ou seja as informacoes do relatorio e traves de um consulta de um atabela diferte.
ja tentei:
Docmd.openreport"Relatrio", coloquei no formulario da combo tambem [Forms]![RelRegional]![cboExet].
mas nao da certo, fica pedindo para entrar com o codigo da Regional. sendo que o codigo da regional esta na combo.
Poderia me ajudar
agradeço

jair madeira   31/03/2015 13:21:48

Avelino,
tentei várias vezes e não consegui.
Sempre com a mensagem de erro 451.
obrigado

SANTOS   27/04/2015 16:13:49

ALGUEM PODE ME AJUDAR: O operador Like no meu pc não está dando certo, quando eu dou um enter fica Alike

Avelino Sampaio   27/04/2015 16:57:53

Santos,

vá em "opções" do Access > Designers de Objetos > Desmarque "Sintaxe compatível com o SQL Server (ANSI 92).

Sucesso!

Ricardo   14/05/2015 12:38:13

Olá Galera,
Como fazer uma consulta com vários parâmetros, neste caso quero criar a consulta no formulário, nela acrescentarei três combo que serão caixas de combinação que serão na sequencia abaixo, sendo que cada combo retornará os dados selecionado de cada combo tipo, a combo "Razão_Cliente" retornará os cliente relacionadas a combo Minha_Lista e a combo "Tipo_Abordagem" retornará as informações ligadas a combo "Razão_Cliente" mediante a isso quero criar um botão "executar consulta" que me retorne só o que escolhi nas combos abaixo.

Combo 1 = Minha_Lista
Combo 2 = Razão_Cliente
Combo 3 = Tipo_Abordagem

usei esse exemplo:
Private Sub Minha_Lista_Change()
Razão_Cli.Requery
Razão_Cli.SetFocus
Razão_Cli.Dropdown
End Sub

Private Sub Razão_Cli_Change()
Tipo_Abordagem.Requery
Tipo_Abordagem.SetFocus
Tipo_Abordagem.Dropdown
End Sub

Como faço para ativar esse seleção? Rolling Eyes

Ricardo   14/05/2015 12:44:49

Outra duvida,
Tenho uma formulário principal e esse formulário está com todos campos inativos exceto os botões de navegação que criei e dois de pesquisa. quero saber se neste caso consigo inserir um botão no campo e-mail que abra a pagina de e-mails do MS Outlook para que eu envie um e-mail sem que eu precise habilitar os campos e se também é possível criar um formulário de e-mail padrão que se altere a cada e-mail selecionado?

Carlos Bezerra   01/07/2015 04:04:58

Muito bom o tutorial ! Aprendi bastante.

Obrigado

marcos   07/07/2015 19:49:24

se tiver alguem que desenvolve programa em access pagando favor me enviar email.
marcos.moureira@yahoo.com.br

Odete Nogueira   02/09/2015 07:11:13

Segui as indicações para filtrar os sinistros por concluir, ou seja dataconc=sem preencher:

Private Sub Form_Open(Cancel As Integer)
Dim strsql As Integer
strsql = "select ID1, data, local, viatura, matricula, motorista, orçamento from tblsinistros where dataconc =' ';"
Me.RecordSource = strsql
End Sub

Abre o formulário mas aparece o erro Run-time error '13'

Alguma dica do que estou a fazer errado

Fabricia Lima   01/11/2015 01:13:21

Tive o seguinte problema ao usar o código abaixo em uma combobox:

TxtDP.RowSource = "SELECT Turma, ID, Nome FROM FiltroFunc WHERE Turma Like '*" & Me.TxtGrupo.Column(0) & "*' Order By Turma;"

Ele realmente filtra de acordo com meu criterio, mas não permite que eu selecione além do primeiro item da lista.

Você pode me ajudar?


Messias Gomes   02/11/2015 09:17:30

Preciso filtrar dados de uma consulta ordem de venda para um formulário, nesse formulário que faz parte de uma tabela irei informar alguns dados, após pressionar o botão gravar os dados filtrado de uma consulta (+) mais os dados que eu crescente (digitei) será gravado em uma tabela, por favor, poderia me ajudar

wilson   16/11/2015 15:19:23

Preciso filtrar dados como consulta

Nilson Hirata   25/02/2016 08:54:48

Bom dia,

Utilizei o código do Maestro v 5.0 para montar um formulário de consulta com listBox e para carregar a listBox é utilizado o seguinte código:

strSql = "SELECT NúmeroDoPedido, CódigoDoCliente, DataDoPedido, CidadeDeDestino"
strSql = strSql & " FROM " & tblTemp & " WHERE " & filtro
strSql = strSql & " ORDER BY DataDopedido;"
Me!Lista.RowSource = strSql

É idêntico o do Maestro sem alteração nenhuma exceto os nomes dos campos...

O problema é o seguinte:
A listBox fica em branco e não carrega os dados... Porém se digito no tx1 ou tx2 que são os txtBox para pesquisa ele realiza a filtragem e aparece os dados... Somente quando os txtBox ficam em branco que utiliza na Variável "filtro" o código "Codigo_Material > 0" ou no Maestro "NúmeroDoPedido > 0" ele some com o conteúdo do listBox...

No Maestro esse código funciona... Mas em minha programação este código não funciona...

Poderia me ajudar?

Desde já agradeço pela atenção!


Nilson Hirata   25/02/2016 12:44:34

Boa tarde,

Entendi qual foi o problema em meu código... O código_material estava configurado como texto na tabela...

Mais uma vez agradeço pela atenção!

Grato

Avelino Sampaio   26/02/2016 06:11:26

Nilson,

obrigado pelo seu feedback.

Sucesso!

ANDRE LUIZ   14/03/2016 15:48:00

Boa Tarde!

Gostaria de uma luz, estou montando um sistema para controle de arquivo, trabalho com departamento pessoal, e todo mes tem que ter holerite do funcionario, gostaria de filtar para ver os meses de holerite ainda esta faltando (competencia), como devo proceder

Valter Rodrigues   13/04/2016 06:56:40

Avelino, precisso da sua ajuda. tenho uma base da dados com tabelas com nomes diferentes mais com estrutura iguais. como criar uma consulta em formulario baseado no nome da tabela que o nome o nome da tabela e variavel.

Carlos   24/05/2016 10:38:06

Bom dia avelino!
Primeiro quero parabenizar pelo seu grande talento e muita dedicação por todos nós.
Preciso de uma ajuda de todos vcs, tenho um formulário que eu filtro pela uma caixa de combinação e o mesmo me da o nome das pessoas que eu quero no formulário, por exemplo na caixa de combinação vai me aparecer os nomes das cidades " sao paulo; rio de janeiro; belo horizonte" e em cada cidade dessas tenho vários coordenadores e funcionários, quando eu selecionar por exemplo "são paulo" na caixa de combinação o mesmo vai me filtrar somente as pessoas que está locado em são paulo, porém na hora filtrar no fomulario, eu quero criar um botão que vai imprimir somente aquelas pessoas que foi filtrada pela cidade que eu selecionei na caixa de combinação.

Avelino Sampaio   24/05/2016 10:54:57

Carlos,

se inscreva no nosso fórum e tópico que for abrir anexe um BD exemplo.

http://www.redeaccess.com.br

Estarei te aguardo

Fabiano Alves   29/07/2016 14:42:28

Oi,
Como faço para selecionar os registros que possuem o caractere "Enter" numa determinada coluna?

Abs,
Fabiano Alves

Avelino Sampaio   30/07/2016 06:33:10

Fabiano,

abra um tópico no nosso fórum sobre esta sua dúvida, oferecendo mais detalhes.

http://www.redeaccess.com.br

Aguardamos

Tino   06/08/2016 17:22:47

Olá avelino
Como abrir um arquivo texto.txt e imprimir com o access VBA?

Agradeço.

Avelino Sampaio   08/08/2016 06:28:04

Tino,

para imprimir um arquivo via Access, podemos utilizar a API ShellExecute.

#If VBA7 Then

Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As LongPtr, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr

#Else

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

#End If

Public Sub fncImprimirDoc(strLocal$)
Call ShellExecute(0, "print", strLocal, vbNullString, vbNullString, 0&)
End Sub

Basta chamar a função indicando o local e o nome do arquivo. Exemplo:

call fncImprimirDoc("c:\SuaPasta\SeuArquivo.txt")

Passe a tirar suas dúvidas pelo nosso fórum:

http://www.redeaccess.com.br

Aguardamos

Giuseppe Carozzo   21/10/2016 18:12:29

Muito Obrigado! suas dicas são demais!

Darlan Sandro   10/12/2016 13:40:41

Olá Professor,

Estou criando um DCount que possui a função de verificar na tabela se determinado registro já foi cadastrado. O registro mencionado é do tipo data ou date. Na tabela do banco utilizei uma mascara 00/0000, mês e ano, respectivamente. Preciso inserir no momento em que o usuário realiza o login no sistema uma mensagem que identifique se ele já cadastrou os dados no sistema para uma tabela especifica. De forma simples toda vez que o mês e o ano mudar de status o aplicativo verificará se o usuário realizou o cadastro, caso a condição tenha sido negativa, o formulário de cadastro será aberto e ele procederá o cadastro. Abaixo estou postando o código.

Private Sub btnTestando_Click()

filtro = Format(Me!txtPeriodo, "mm/yyyy")

If DCount("*", "tblNotaFiscalDados", "periodo = '" & filtro & "'") > 0 Then
MsgBox "O Cliente " & Me!txtPeriodo & " já existe..."
Me.Undo
Cancel = True
End If

End Sub
Entranto todas as vezes que executo, o access apresenta o erro "Erro em Tempo de Execução 3464". Desde já agradeço qualquer ajuda.

Regina Cely Silva   03/02/2017 08:22:45

Oi Avelino,

Este comando funciona algumas vezes.
Não quero passagem de parâmetro:

[doc]![forms]![formulario]![doc]

Colocado na macro que abre o outro formulário.

Como disse: tenho varios forms que funcionam e abrem com os dados do primeiro.

Mas não estou conseguindo:
1º form
Grid com uma relacão de ações judiciais
o campo chave é o sipar
o 2 form são os dados da ação
com este comando acima funciona mas pede que eu insira um parametro nº sipar

o usuário quer que vá direto

Obrigada, não pude parar pra ver a aquisição me interessa sim

Regina

Regina Cely Silva   03/02/2017 08:53:02

A rotina é a seguinte, corrigindo:

doc=[formularios]![formulario]![doc]

Clausula while na macro para abrir formulário.

esta macro sendo chamada de um botão ok

Regina

Avelino Sampaio   08/02/2017 22:30:38

Regina,

se inscreva no nosso fórum e abra um tópico sobre o assunto.

http://www.redeaccess.com.br

Aguardo

Regina Cely Silva   10/02/2017 09:19:56

MESMO ASSIM O PARÂMETRO SOLICITA O CAMPO.

EU TENHO FORMULÁRIOS CHAMADOS COMO CALCULO DA VALIDADE.
O FORMULÁRIO QUE MOSTRA OS DADOS É UMA FOLHA DE DADOS E ESTÁ PARA SOMENTE LEITURA. E FUNCIONA, VAI DIRETO EXATAMENTE COM ESSE COMANDO E UM BOTÃO.
MAS O REGISTRO É ÚNICO ALI.

AGORA TENHO UM GRID COM MUITOS REGISTROS, FOLHA DE DADOS, QUE VAI CHAMAR DADOS ESPECÍFICO DE UM REGISTRO SELECIONADO.

EXEMPLO: GRID SELECIONO UM AUTOR E COM DUPLO CLIQUE ABRO O FORMULÁRIO COM DADOS DESSE REGISTRO. MAS PASSA PELA CHAMADA DE PARÂMETRO.
E ISSO O USUÁRIO NÃO QUER.
UM ABRAÇO,
REGINA

Jonatan   08/03/2017 16:19:16

Grande Avelino

Ótimo artigo, mas estou com um problema de filtragem não abordado aqui.

Estou tentando executar, sem êxito, o seguinte código: DoCmd.ApplyFilter , "InícioContrato=#" & DateDiff("m", InícioContrato, Date) >= 12 & "# And #" & DateDiff("m", InícioContrato, Date) <= 15 & "#"

Esse código como critério de consulta funciona perfeitamente: WHERE ((DateDiff("m",[InícioContrato],Date())>=12 And DateDiff("m",[InícioContrato],Date())<=15));
Já no VBA ocorre erro em tempo de execução '2427': Você inseriu uma expressão que não tem valor.

Poderia me ajudar? Grato.

Paulo Maia   13/04/2017 12:49:25

Mestre Avelino ;

Com base no seu ex.
ValorLuz = Dsum("ValConta","tblContasPagas","TipoConta='Luz' And Year(DataPagamento)=2011")


Estou criando um relatório e dentro dele coloquei este campo ( txtSomaJaneiro ) , e no evento ao abrir do relatório estou tentando inserir esta SOMA, do campo ( ccCrédito ) da tabela ( tbl_FluxoCaixa ).

Porem não estou conseguindo ajustar o critério -> pois preciso que ao abrir do relatório esse campo receba a Somatória de ccCrédito da tabela "( porem baseado no mês 01 do ano vigente )" , Com base no campo (cdData) da mesma tabela.

Private Sub Report_Load()

txtSomaJaneiro = DSum("ccCrédito", "tbl_FluxoCaixa", "And Year (cdData) = 01/yyyy")

End Sub


Ou seja se eu abrir o relatório esse ano ele soma o mês de janeiro referente a este ano.
... e ;
Se eu abrir o mesmo relatório, só que no ano que vem ele vai somar janeiro do ano que vem, 2018.

...........

Preciso colocar como Fonte de registro do relatório esta tabela ( tbl_FluxoCaixa ) ?
Setar o db , Set dbs = CurrentDb ?

Como montar ?

Dentro do evento ao abrir do form .


Envie seu comentário: