bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Veja as novidades da versão 4 do aplicativo Maestro

Veja as novidades da versão 5 do aplicativo Maestro

Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

O sistema de vinculação de tabelas foi totalmente remodelado.

- Agora, todos os vínculos são excluídos e refeitos, na medida em que houver alterações de caminho e/ou de senha da Base de Dados (back-end).

- Após você excluir, alterar ou criar novas tabelas na Base de Dados ( Maestro_v5_be.accdb ), rode o Maestro, abra o grupo Manutenção da ribbon e clique em Refazer Vínculos.

Usando Access - Ribbon Refazer Vínculos

- Quando houver alteração de senha da Base de Dados ( maestro_v5_be.accdb ), o Maestro irá carregar uma tela na inicialização, solicitando a nova senha para refazer os vínculos.

Usando Access - Senha back-end

 

Nova função para formulários que possuem vários campos de filtragens combinados.

- Veja esta nova e poderosa função em ação, nos formulários exemplos frmFiltraFormContinuo e frmFiltraListBox:

Usando Access - Campos de filtragens combinados

 

Atente para os comentários na função fncFiltrar.

Public Sub fncFiltrar(NomeCampoFoco As String)
Dim x As String, filtro As String, strSplit As String
Dim f(4) As String, cp(4) As Variant
Dim k As Variant, p As Byte
Dim booPos As Boolean

'------------------------------------------------------------------
' Variável x recebe o valor digitado na caixa de texto de filtragem 
'-------------------------------------------------------------------
x = Me(NomeCampoFoco).Text: p = 0

'--------------------------------------------------------------------------------------
'Passam para a matriz Cp() todos os valores digitados nas caixas de texto de filtragem
'--------------------------------------------------------------------------------------
For p = 0 To 3
   cp(p) = IIf(InStr(NomeCampoFoco, "tx" & p + 1) > 0, x, Me("tx" & p + 1))
Next

'--------------------------------------------------------------------------------
' Passa para a matriz f() a sintaxe de filtragens, com os respectivos valores 
' digitados nas caixas de texto
'--------------------------------------------------------------------------------
f(0) = "DataDopedido Like '*" & cp(0) & "*'"
f(1) = IIf(cp(1) = Chr(32), "cidadeDeDestino is null", "CidadeDeDestino Like '*" & cp(1) & "*'")
f(2) = IIf(cp(2) = Chr(32), "RegiãoDeDestino is null", "RegiãoDeDestino Like '*" & cp(2) & "*'")
f(3) = "PaísDeDestino Like '*" & cp(3) & "*'"

'------------------------------------------------------------------------------------------
'Passa para a Variável strSplit, o comprimento do texto referente a cada caixa de filtragem
'Comprimento zero(0) significa que a caixa de texto de filtragem se encontra vazia
'Exemplo de resultado: strSplit = 2|0|1|0
'Significa que os campos 2 e 4 não receberam valores para serem filtrados
'------------------------------------------------------------------------------------------
strSplit = Len(cp(0) & "") & "|" & Len(cp(1) & "") & "|" & Len(cp(2) & "") & "|" & Len(cp(3) & "")
k = Split(strSplit, "|")

'-----------------------------------------------------------------------------------------
'Filtro assumirá todos os valores de registros, caso todos os campos de filtragens 
'estejam limpos
'-----------------------------------------------------------------------------------------
filtro = "NúmeroDoPedido > 0": p = 0

'-----------------------------------------------------------------------------------------
'Monta a variável filtro com todos os campos de filtragens que possuírem valores digitados
'-----------------------------------------------------------------------------------------
For p = 0 To UBound(k)
   If Val(k(p)) > 0 Then
      If booPos = False Then
         filtro = f(p): booPos = True
      Else
         filtro = filtro & " AND " & f(p)
      End If
   End If
Next p

'--------------------------------------------
'Carrega o listbox com os registros filtrados
'--------------------------------------------
Call fncCarregalista(filtro)
End Sub

Foi acrescentado um exemplo de Formulário Desvinculado.

- Formulário desvinculado significa que a sua propriedade Fonte de Registro não está associada a qualquer tabela ou consulta existentes.   Neste exemplo foi utilizada a tabela tblClientes, acessada via código, para alimentar os campos do formulário.

Usando Access - Formulário Desvinculado

 

- O acesso à Base de Dados (back-end) é feito através do comando OpenDatabase que se encontra no módulo mod_conexao.   Isso proporciona acesso às tabelas, sem o uso de vínculos.

Public Function fncAbreConexao(Optional chave As Long = 0)
On Error GoTo trataerro
If chave <> 102030 Then Exit Function
Set bd = OpenDatabase(DLookup("path_0", "tblCaminhoBe"), False, False, _
 ";PWD=" & fncCrip(DLookup("senha", "tblCaminhoBe"), 102030))
sair:
Exit Function
trataerro:
Select Case Err.Number
Case 94
MsgBox "Informe o caminho do back-end na tabela tblCaminhoBe...", vbInformation, "Aviso"
Case Else
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", _ 
 Err.HelpFile, Err.HelpContext
End Select
Resume sair:
End Function

- Veja abaixo, a função para limpar os campos:

Private Sub fncLimpaCampos()
Dim ctl As control
'------------------------------------------------
'Irá percorrer todos os controles do formulário
'------------------------------------------------
For Each ctl In Controls
   '------------------------------------------
   'Irá limpar apenas o que for caixa de texto
   '------------------------------------------
   If ctl.ControlType = acTextBox Then ctl = ""
Next
End Sub

- Veja abaixo, a função para alterar a cor dos caracteres.  Usei a cor para o usuário identificar que o registro corrente sofreu alterações e que precisa ser salvo.   A cor também foi utilizada para as várias tomadas de decisões nos códigos.

Private Sub fncPinta(cor As Long)
Dim ctl As control
'------------------------------------------------
'Irá percorrer todos os controles do formulário
'------------------------------------------------
For Each ctl In Controls
   '--------------------------------------------------------
   'Altera, somente, a cor dos caracteres das caixas de texto
   '--------------------------------------------------------
   If ctl.ControlType = acTextBox Then ctl.ForeColor = cor
Next
End Sub

Obs. Eu só trabalho com formulários desvinculados quando percebo que terei ganhos significativos em relação ao desempenho do aplicativo em REDE.  Você pode observar neste formulário exemplo, a quantidade de códigos necessários para se trabalhar com o projeto desvinculado. Certamente, isso provoca perda de produtividade, o que deve ser levado em consideração na formação de preço e prazo.  Prefiro trabalhar com os vínculos e com as tabelas temporárias, geradas em tempo de execução.

Clique aqui e veja as 9 dicas para melhorar o desempenho de um aplicativo Access, em rede.

- Observe que empreguei a técnica para criação de tabela, em tempo de execução, com o objetivo de carregar o combobox de filtragem.  Veja o evento "Ao receber foco" do Combobox.

Private Sub cboConsulta_GotFocus()
Dim strsql As String
On Error Resume Next
Dim tblTemp As String
Static j As Byte
'-------------------------------------------------------------------------------
'Salva o registro atual, caso tenha havido alguma alteração no registro carregado
'-------------------------------------------------------------------------------
If Me!idCliente.ForeColor = 255 Then btSalvar_Click

'---------------------------------------------------------------------------------------
' Se não houver alteração no registro corrente, não atualiza a tabela temporária
' Isso evita realizar viagens desnecessárias à Base de Dados (back-end).
' Acima de 5 consultas, atualiza a tabela temporária para o caso de uso em rede
'----------------------------------------------------------------------------------------
If booAtualizaCombo = False And j < 5 Then
   j = j + 1
   Exit Sub
End If

j = 0
'----------------------------------------
'Desacopla combobox da tabela temporária
'----------------------------------------
Me!cboConsulta.RowSource = ""
'-------------------------------
'Dá um nome à tabela temporária
'-------------------------------
tblTemp = "tmp_" & Me!cboConsulta.Name
'------------------------------------------------------
'Consulta do Combobox, acrescentando a cláusula INTO
'para gravar a tabela temporária no front-end
'-------------------------------------------------------
strsql = "Select cli_nome INTO " & tblTemp & " FROM tblClientes ORDER BY cli_nome;"
'----------------------------
'Abre conexão com o back-end
'----------------------------
Call fncAbreConexao(102030)
'---------------------------------------------------
'Cria a tabela temporária para carregar o Combobox
'---------------------------------------------------
If fncCriarTabela(strsql, tblTemp, 102030) Then
   '------------------------------------------------------
   'Carrega o Combobox com os valores da tabela temporária
   '------------------------------------------------------
   Me!cboConsulta.RowSource = tblTemp
End If
booAtualizaCombo = False
End Sub

- Em sistemas desvinculados, você perde as funções de Domínio (Dlookup, Dcount, Dsum,...).  No entanto foi acrescentado o módulo mod_Funcoes_D para você continuar usufruindo destas funções, em sistemas desvinculados.   Para isso, basta acrescentar o X no final das funções conhecidas. Tem um exemplo do DcountX() sendo utilizado neste formulário.

Foi acrescentado o formulário de filtragem frmFiltraListBox_desvinculado.

Aqui, demonstro a aplicação da técnica de geração de tabela temporária, em tempo de execução, para alimentar um ListBox de pesquisa.  O objetivo principal desta técnica é o de realizar as buscas sobre a tabela local e não sobre a tabela de origem.  Isso contribui valiosamente para um melhor desempenho em REDE.

Usando Access - Tabela temporária

 

Segue o código que carrega o listBox com a tabela temporária.  Observe bem, os comentários.

Private Sub fncCarregalista(Optional filtro As String, Optional ordem As String)
Dim strsql As String
Dim tblTemp As String
'-------------------------------
' Dá um nome à tabela temporária
'--------------------------------
tblTemp = "tmp_" & Me.Name
'------------------------------------------------------------------------
' com t = verdadeiro dispara a função para criar a tabela temporária
' A lista só é atualizada com os dados do back-end depois de 2 minutos ou 
' quando clicar no botão "remover Filtro"
'------------------------------------------------------------------------
If t Then
   '--------------------------------------------
   'Abre conexão com a Base de Dados (back-end)
   '--------------------------------------------
   Call fncAbreConexao(102030)
   '------------------------------------------
   'Desconecta ListBox da tabela temporária
   '------------------------------------------
   Me!Lista.RowSource = ""
   '-----------------------------------------------------------
   'Monta a consulta de ação que irá criar a tabela temporária
   '-----------------------------------------------------------
   strsql = "SELECT NúmeroDoPedido, CódigoDoCliente, DataDoPedido, CidadeDeDestino"
   strsql = strsql & " INTO " & tblTemp & " FROM tblPedidos ORDER BY DataDopedido;"
   '-----------------------------------------------
   ' Dispara a função que gera a tabela temporária
   '-----------------------------------------------
   If fncCriarTabela(strsql, tblTemp, 102030) Then
      ' -------------------------------------------------------------------------
      ' Ativa o timer do formulário para quando passar de 2 minutos, o Listbox 
      ' ser informado de que deverá atualizar a tabela temporária, caso haja
      ' nova consulta
      '--------------------------------------------------------------------------
      t = False
      Me.TimerInterval = 120000 '2 minutos
   End If
   '--------------------------------------------
   'Fecha conexão com a Base de Dados (back-end)
   '--------------------------------------------
   Call fncFechaConexao
End If

'--------------------------------------------------------------
'Passa o filtro para variável global filtroLista do formulário.
'Variável utilizada no botão Imprimir
'--------------------------------------------------------------
filtroLista = filtro

'--------------------------------------------------------------------------------
'Monta a consulta seleção filtrada e com a sua origem na tabela temporária local
'O acesso a tabela local, no procedimento de filtragem, contribui para redução 
'substancial de acessos à Base de Dados (back-end)
'Este procedimento é fundamental para o bom desempenho do aplicativo em REDE
'--------------------------------------------------------------------------------
strsql = "SELECT NúmeroDoPedido, CódigoDoCliente, DataDoPedido, CidadeDeDestino"
strsql = strsql & " FROM " & tblTemp & " WHERE " & filtro
strsql = strsql & " ORDER BY DataDopedido;"
Me!Lista.RowSource = strsql
End Sub

Veja, abaixo, a função fncCriarTabela que gera as tabelas temporárias e que se encontra no módulo mod_conexao.

Public Function fncCriarTabela(strsql As String, nomeTbl As String, _ 
Optional chave As Long = 0) As Boolean

On Error Resume Next
Dim tbd As DAO.TableDef, booPresente As Boolean
If chave <> 102030 Then Exit Function
'-------------
'Deleta tabela
'--------------
DoCmd.DeleteObject acTable, nomeTbl
If Err Then Err.Clear: On Error GoTo trataerro
'--------------------------------------------
'Dispara a consulta ação para criar a tabela
'--------------------------------------------
Application.CurrentDb.Execute strsql
'-------------------------------------------------
'Use o valor 1 para esconder a tabela, se desejar.
'--------------------------------------------------
CurrentDb.TableDefs(nomeTbl).Attributes = 0
DoCmd.RunCommand acCmdSave
fncCriarTabela = True
sair:
Exit Function
trataerro:
   fncCriarTabela = False
   MsgBox Err.Description & " | Erro: " & Err.Number
   Resume sair
End Function

O Maestro v.5

Para entrar no modo estrutura, segure a tecla shift ao carregá-lo.

Senha do usuário admin  > admin
Senha do usuário Avelino > 1234

Bom estudo!


 

 


22 comentário(s)

Glauco   24/05/2023 12:57:17

Boa tarde,

Não estou conseguindo fazer essa vinculação, no Private Sub btok_Click(), dá o seguinte erro:

Erro de copilação, Nome repetido encontrado:

fncCrip

Dorival    18/04/2022 11:59:02

Olá Avelino.
Estou adaptando alguns recursos do maestro em outro aplicativo, como por exemplo a tela de login e permissões do usuário, mas não estou conseguindo suprimir alguns botões em função do usuário logado. Tem alguma ideia de aonde posso estar errando. A ribbon está pronta, só está faltando isso para eu concluir.
Obrigado...

Alberto   14/04/2022 23:12:45

Avelino, parabéns pelos ensinamentos.
Usei a função Public Function fncFiltrar(NomeCampoFoco As String) em um formulário continuo que possui como fonte de registro uma consulta com várias tabelas, impossibilitando entradas de dados. Está filtrando ok, mas se não retornar registro no filtro dá erro na função e trava. Ou seja, só consegui usar a função em formulário com entradas de dados.

João Ricardo   06/11/2021 10:51:37

Valeu Avelino.
Como disse o Edson, estou ansioso pelas aulas de VBA.
Será que se promovermos uma campanha para estas aulas elas saem do papel?
Brincadeira Avelino. Sabemos do seu compromisso com o repasse de conhecimento e o qto vc se esforça para nos ajudar.
Parabéns!!

Gilson   06/11/2021 01:53:02

Excelente!!!

Rodrigo   05/11/2021 22:15:30

Parabéns, mais uma vez surpreendendo...
Poderia colocar um exemplo da utilização da troca de ribbons na hora da impressão para access 2010? Utilizo em access 2007 e tudo vai bem, mas quando utilizo o 2010 a ribbon não aparece... acredito eu ser alguma imagem que o 2007 tenha e que o 2010 não suporte. Ainda não consegui fazer esta operação...

Parabéns por colaborar conosco seus conhecimentos.
Fique na Paz.

Edson Junho   05/11/2021 15:07:05

Fantástico!!!

Avelino Sampaio   05/11/2021 13:52:02

Gilson,

para entrar na estrutura do Maestro (maestro_v4.accdb) basta manter pressionada a techa SHIFT na inicialização.

Já para entra na Base de Dados (Maestro_v4_be.accdb) a senha é: a1234

Sucesso!

Gilson Fontanella   05/11/2021 13:46:11

Não consigo entrar na estrutura do banco de dados com as senhas indicadas

Avelino Joao   05/11/2021 12:58:04

Gostei do método que usa para se conectar banco de dado desvinculado ao gravar os dados praticamente não se nota abertura do banco de dado.



MARCIO MELO - RJ   05/11/2021 12:17:26

Fiquei super feliz com mais essas novidades, com o seu Monta Ribbos e o maestro tenho usado sempre como pontapé inicial, o lance da senha eu tinha adaptado no meu, vou analisar as diferenças sempre aprendo muito com suas táticas, tenho um form interessante p lhe enviar sobre filtros de relatórios e outro de criar um form continuo com filtros acredito que possa melhorar cada vez mais o maestro de maneira interagir com os códigos já existentes. Parabéns e estou sempre aqui torcendo por seu sucesso, obrigado!

Sou mais Brasil!

Isaias Carvalho   05/11/2021 12:09:40

Avelino,

Parabéns pelo excelente artigo!!!

São realmente dicas muito valiosas para melhorar significativamente o desempenho em rede.
Valiosa dica como criar tabelas temporárias, geradas em tempo de execução... Perfeito!! (sei o que é ter problemas com aplicativo lento em uso na rede).
Já estava a estudar as valiosas dicas que tem nos passado na vidoe-alua PROTEC, no quesito desempenho em rede, agora posso aprofundar ainda mais os estudos com base no Maestro_v4.

Tudo o que estava precisando.

Parabéns!!

Edson C Almeida   05/11/2021 11:50:11

Oi Avelino. Parabéns mais uma vez pelo brilhante trabalho. Aproveito a oportunidade de te relembrar das video aulas de vba. Abraço.

Samuel Lima Neto   05/11/2021 10:13:20

Grande Avelino!

Mais uma vez somos premiados logo cedo com essas dicas preciosas. Parabéns!

Avelino Sampaio   08/06/2021 11:26:59

Emerson

a1234


Avelino Sampaio   01/06/2021 12:08:46

William,

tenho respondido a todos os seus e-mails. Já mandei vários comunicados, de que seu yahoo está sendo seletivo com as minhas mensagens. Portanto, o senhor deve verificar a sua caixa de SPAM. Resolvi mandar as mensagens através de um outro servidor de e-mail. Verifique se o senhor recebeu novas mensagens agora.

William Ferreira   01/06/2021 09:18:30

As senhas de acesso a estrutura não funcionam. Este site não tira dúvidas e nem responde emails e tem deixado os usuários às moscas!

Espedito Alves Leal   13/03/2021 05:21:25

Bom dia Mestre Avelino?
Posso usar o Maestro para fazer vínculos com outro banco de dados como o MySQL, Postgres?
É que tenho uma aplicação multiusuários e está acontecendo que o a base de dados access_be.accdb está corrompendo frequentemente.
Já fiz várias analise do porque isso está ocorrendo, porém, sem sucesso. Resta agora troca a base de dados.

Regis da Silva   18/02/2021 10:04:36

Avelino eu importei os devidos objetos do Maestro para usar no meu projeto, no caso os objetos para vinculação de tabela, inclusive o AutoExec, mas não está funcionando, será que falta eu ativar mais alguma coisa?

NAJAN MARCELO JORGE   22/06/2020 07:13:08

Prezado Avelino

Muito bom seu artigo, mas tenho uma dúvida, como posso utilizar o seu gerenciador de vínculos com dois ou mais bancos de dados diferentes. Tenho um aplicativo que usa um banco de dados com informações gerais, utilizadas por vários outros aplicativos e cada um destes outros aplicativos tem seu próprio banco de dados com informações específicas. Como posso utilizar o seu gerenciador para fazer e manter estes vínculos atualizados?

Valdir Silva   04/06/2020 16:54:57

Boa noite Avelino,

Meu projeto está pronto, só não consegui implementar a rotina de backup e de vinculação das tabelas com barra de progresso. Por favor, mandei no seu email de suporte o projeto pra você me ajudar com essas duas. Te peço encarecidamente a sua ajuda de sempre.

Mandei no email avelino@usandoaccess

Por hora obrigado mais uma vez pela atenção.

Valdir Pereira da   31/05/2020 10:47:01

Boa tarde Avelino,

Tentei implementar aqui no meu projeto, só que no seu Maestro está com tabela de ribbons vinculada a ele, e não usa o UsysRibbon então estou tendo problemas com a função que carrega a ribbon e algumas outras funções, tipo fnccrip que está no frmlogin.

Queria muito essa barra de progresso de vinculação no meu projeto, só que não achei ela separada do Maestro igual no seu exemplo do vídeo.


Envie seu comentário: