Você está na página 1de 8

07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.

txt

ALGUMAS DICAS ÚTEIS PARA O MS ACCESS

1 - ALTERNATIVA PARA O TIPO AUTO-NUMERAÇÃO COM A FUNÇÃO DMAX

Como o Campo do tipo autonumeração que vem com o Access é muito útil

mas tem seusinconvenientes, veja aqui uma alternativa para ele.

Esta alternativa somente funciona em formulários únicos no

Formulário principal.

- Abra o formulário no modo estrutura

- Selecione o campo chave primária da tabela em que o form se baseia

- Abra a janela de propriedades.

- Agora vá até a propriedade Valor padrão (aba Dados) e digite:

Nz(DMax("[Código do Cliente]", "Cliente")) + 1

O Nz previne valores nulos. [Código do Cliente] é o nome do Campo Chave.

Clientes é o nome da Tabela.

Para um controle mais sofisticado use a função abaixo no evento No atual

do Formulário:

Private Sub Form_Current()

If Me.NewRecord Then

On Error Resume Next 'Apenas por segurança...

Me![Código do Cliente].DefaultValue = Nz(DMax("[Código do Cliente]", "Cliente"), 0) + 1


End If

End Sub

2 - TORNANDO O PRIMEIRO (OU OUTRO) ITEM DE UMA COMBO BOX COMO DEFAULT

As combo box no Access ao serem exibidam, por default, não exibem nenhum

registro. Caso desejemos que ao abrir o form uma combo exiba um determinado

registro, podemos usar a seguinte sintaxe:

Na propriedade Valor padrão da combo digitamos:

[UF].[ItemData](5)

No caso UF é o nome da combo box e 5 indica que desejo exibir como default

o sexto registro, no caso Ceará.

ALERTA.: tenha muito cuidado ao exibir campos como padrão, pois podem induzir

o usuário a errar, já que ele poderá passar sem cadastrar este Campo.

3 - EVITE UTILIZAR COMO NOME DE CONTROLES ALGUMA PALAVRA RESERVADA DO

ACCESS

Uma destas que me tem causado problemas é a palavra reservada "VALOR", prin-

cipalmente quando vamos utilizar em operações.

4 - DESFAZER NO ACCESS

Coloque no evento desejado:

DoCmd.RunCommand acCmdUndo

5 - EVITANDO A MENSAGEM DE ERRO PADRÃO DE COMBOBOX

Digitar no evento que trata a ComboBox:

Response = acDataErrContinue

6 - QUANDO OCORRE O EVENTO "NO ATUAL (CURRENT)"?

Ocorre durante a mudança de um registro para outro

www.psantos.org/ribafs/access/Algumasdicas1.txt 1/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

7 - CAIXA DE MENSAGEM QUE SOLICITA CONFIRMAÇÃO

Dim msg

msg = MsgBox("Aqui a mensagem!", vbYesNo, "Aqui o título")

If msg = vbYes Then

DoCmd.Close 'Apenas um exemplo

Else

MsgBox "Você clicou em NÃO!"

End If

Alternativa:

If MsgBox("Mensagem", vbYesNo + vbDefaultButton1, "Título") = vbYes Then

MsgBox "Você clicou em SIM!"

Else

MsgBox "Você clicou em NÃO!"

End If

8 - USO DA FUNÇÃO IIF (SeImed)

= SeImed([TotalPedido] > 100; "Atingiu"; "Tente novamente")

Sgnifica: Se TotalPedido for > 100 mostre Atingiu

Se TotalPedido for <= 100 mostre "Tente novamente"

Em módulos o SeImed transforma-se em IIF e o ponto e vírgula

muda para vírgula, o restante permanece igual.

Outra aplicação útil. Na Origem do Controle:

=Soma(SeImed([Pagamento] É Nulo;0;Nz([Valor da conta])+Nz([Valor do juro])))

Somente irá somar quando o Campo Pagamento estiver preenchido.

9 - EXPLORE AO MÁXIMO AS CONSULTAS DO ACCESS

Sempre que tiver um Formulário ou Relatório que tenha alguma

operação entre Campos/Controles, como Totalização, Soma, etc.

Não baseie seu Formulário ou Relatório diretamente na Tabela

para depois criar Campos calculados, prefira criar estes

Campos calculados em uma Consulta, pois fica mais consistente.

Tenho tido muita dificuldade de efetuar operações em Campos

calculados em Formulários e principalmente em Relatórios

já quando estes cálculos são feitos nas Consultas e baseando

o Formulário na Consulta a coisa anda realmente com mais

facilidade.

10 - REFERÊNCIA A CONTROLES DE OUTROS FORMULÁRIOS

- Referência a um Controle de um Subformulário. Estando num

Formulário, para fazer referênca a um Controle que esteja num

sub formulário deste Form:

[ItensDaObra].Formulário![Data]

- Referindo-so a um controle de outro Formulário:

Formulários![ContasPagar]![txtTotalPg]

- Fazendo referência a um Controle que está em um sub de outro form:

Formulários![FormPrincipal]![Subformulário].Formulário![controle]

- Para um subformulário aninhado, utilize a seguinte sintaxe:

Formulários![FormPrincipal]![SubForm].Formulários![SubFormAninhado]Formulário![controle]

OBSERVAÇÃO IMPORTANTE: As referências acima são apenas para ser utilizadas

em propriedades como Origem do Controle e outras, para usar estas

www.psantos.org/ribafs/access/Algumasdicas1.txt 2/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

referências em Módulos, mudar de:

- Formulários para Forms

- Formulário para Form

11 - FUNÇÃO QUE FORÇA O USUÁRIO A CONFIRMAR A DATA DO SISTEMA

Adaptada de uma função de martinelle@icmg.seut.org.br, do

site Access Brasil

Private Sub Form_Open(Cancel As Integer)

'Adaptada de uma função de martinelle@icmg.seut.org.br, no

'site Access Brasil

Dim DataAtual As Date

Dim msg

msg = MsgBox("A data atual é " & vbCrLf & Format(Date, "dddddd") & " Deseja atualizar?",
vbYesNo + vbDefaultButton2, "Atualização de Data")

Voltar:

If msg = vbYes Then

On Error Resume Next

DataAtual = Nz(InputBox("Digite a data no formato dd/mm/aaaa"))

If Not IsDate(DataAtual) Then

MsgBox "Formato inválido, OK para digitar novamente"

GoTo Voltar

Exit Sub

Else

Date = DataAtual

End If

End If

End Sub

12 - PROIBINDO A EXCLUSÃO DE REGISTROS

No Evento Ao excluir do Formulário:

Sub Form_Delete (Cancel As Integer)

MsgBox "Não é permitida a exclusão de registros!", 48, "Proibido Excluir"

DoCmd.CancelEvent

End Sub

13 - USANDO UMA BARRA DE ROLAGEM HORIZONTAL NO ACCESS

- Abrir o Formulário no modo estrutura

- Cricar no botão Mais controles da Caixa de Ferramentas

- Clicar em Microsoft Forms 2.0 ScrollBar (ou superior)

- Desenhe a barra de rolagem horizontal na posição desejada

- Mude o Nome da barra para HSBar na aba Outra da janela de propriedades

- Aproveite e altere também na mesma aba as propriedades seguintes:

Min = 0

Max = 1000

SmallChange = 10 'Valor para clique nas setas

LargeChange = 100 'Valor para o arrasto do retângulo central

Estas são as propriedades da Barra. Agora vamos criar um Rótulo para

acusar as alterações da Barra ao rolar. Crie um Rótulo e altere

as seguintes propriedades:

Nome = rotHSB

Legenda = 0

Evento para a Barra. Selecione a barra e construa a rotina abaixo no Evento

Ao atualizar:

www.psantos.org/ribafs/access/Algumasdicas1.txt 3/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

Private Sub HSBar_Updated(Code As Integer)

rotHSB.Caption = HSBar.Value

End Sub

14 - FUNÇÃO QUE FECHA O ACCESS AO CHEGAR UMA DATA

Esta dica rolou na lista de VB da Virtualand, ou será que foi na de Access, access-br?

Não lembro mais.

Private Sub Form_Open(Cancel As Integer)

If Date = #8/29/00# Then

MsgBox "Tempo de uso esgotou. Favor contactar o programador!"

Quit

End If

End Sub

15 - SELECIONAR TODO O CONTEÚDO DE CAIXA DE TEXTO AO COLOCAR O FOCO NA MESMA

No evento Ao receer o foco (GotFocus), escreva:

Text1.SelStart = 0

Text1.SelLength = Len(Text1)

Rolou na lista de VB da Virtualand

16 - COMBO BOX ABRINDO AO RECEBER O FOCO

No Evento Ao receber o Foco da Combo:

SendKeys "{F4}"

17 - COMO CRIPTOGRAFAR UM BANCO DE DADOS?

- Feche o Banco de Dados, caso esteja aberto

- Ferramentas - Segurança - Criptografar

18 - QUANDO USAR O . OU O ! EM REFERÊNCIAS?

Ex.: Forms!Form1.Visible = True

! - Usar à esquerda de algo que você criou (Formulário, Controle, etc)

. - Usar para algo definido pelo Access (Método, Propriedade, etc)

19 - FUNÇÃO COM DIAS DA SEMANA

Dim daynum, today As String

' Notice, first day of the week is vbSunday.

daynum = WeekDay(Now)

If daynum = 1 Then today = " domingo. "

If daynum = 2 Then today = " segunda-feira. "

If daynum = 3 Then today = " terça-feira. "

If daynum = 4 Then today = " quarta-feira. "

If daynum = 5 Then today = " quinta-feira. "

If daynum = 6 Then today = " sexta-feira. "

If daynum = 7 Then today = " sábado. "

MsgBox "Hoje é" & today

Do site www.camonet.com

Adaptação de Ribamar FS - ribafs@yahoo.com - 13/06/2000

20 - EXCLUIR REGISTRO

Public Function ExcluirRegistro()

DoCmd.SetWarnings False

DoCmd.RunCommand acCmdSelectRecord

www.psantos.org/ribafs/access/Algumasdicas1.txt 4/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

DoCmd.RunCommand acCmdDeleteRecord

DoCmd.SetWarnings True

End Function

21 - SALVAR REGISTRO

Public Function SalvarRegistro()

DoCmd.RunCommand acCmdSaveRecord

End Function

22 - PRÓXIMO REGISTRO

Public Function ProximoRegistro()

On Error GoTo Err_Proximo

DoCmd.GoToRecord , , acNext

Exit Function

Err_Proximo:

If Err.Number = 2105 Then

MsgBox "Você Encontrou o último registro", 16, "Atenção"

Else

MSG_ERRO

End If

End Function

23 - REGISTRO ALTERIOR

Public Function RegistroAnterior()


On Error GoTo Err_Anterior

DoCmd.GoToRecord , , acPrevious

Exit Function

Err_Anterior:

If Err.Number = 2105 Then

MsgBox "Você Encontrou o primeiro registro", 16, "Atenção"

Else

MSG_ERRO

End If

End Function

24 - NOVO REGISTRO

Public Function NovoRegistro()

DoCmd.GoToRecord , , acNewRec

End Function

25 - EXECUTAR UMA CONEXÃO DIAL-UP

Autoria de HELIO CANDIDO

Public Sub ExecutarDialUp(NomeDaDialUp As String)

Dim Executar

Executar = Shell("rundll32.exe rnaui.dll,RnaDial " & NomeDaDialUp, 0)

End Sub

26 - TRATANDO TEXTO COMO NÚMERO

Estas rotinas fora desenvolvidas para suprir deficiências do Access, VB e cia

no sentido de trabalhar com números decimais com mais de 6 dígitos decimais:

www.psantos.org/ribafs/access/Algumasdicas1.txt 5/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

Private Sub Quantidade_LostFocus()


Dim virgula As Long

Dim direita As String

'Como é um campo Requerido

If IsNull(Quantidade) Then 'O Campo Quantidade é do tipo texto

MsgBox "Preenchimento obrigatório!"

DoCmd.CancelEvent

SendKeys "{up}"

Else

'Guardar a posição onde estará a vírgula

virgula = InStr(1, Quantidade, ",", vbTextCompare)

direita = Right(Quantidade, Len(Quantidade) - virgula)

'Na definição do Campo Quantidade na Tabela ficou: Texto, Tamanho 17

'Prevenir que não se digite mais que 8 decimais

If direita > "99999999" Then

MsgBox "Somente até 8 decimais!)"

DoCmd.CancelEvent

SendKeys "{up}"

End If

End If

End Sub

Private Sub Quantidade_KeyPress(KeyAscii As Integer)

'Impedir entradas não numéricas

If KeyAscii = 8 Or KeyAscii = Asc(",") Then Exit Sub

If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0

'Alternativas:

'If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or KeyAscii = vbKeyBack or KeyAscii=44 Then
' Exit Sub

'Else

' KeyAscii = 0

'End If

'If KeyAscii = 8 Or KeyAscii = 44 Then Exit Sub

'If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0

End Sub

27 - CÓDIGOS DE TECLAS (KeyAscii)

De 0 - 9 (48 a 57)

De a - z (97 a 122)

De A - Z (65 a 90)

Vírgula = 44

Ponto Final = 46

28 - PERMITIR APENAS NÚMEROS EM CAIXA DE TEXTO

Colocar no Evento KeyPress (Ao pressionar tecla)

If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or KeyAscii = vbKeyBack Then

Exit Sub

Else

KeyAscii = 0

End If

29 - SELECIONAR QUANTIDADE DE CÓPIAS VIA CÓDIGO

Function NCopias()

Dim cópias As Integer

cópias = InputBox("Quantas cópias?")

www.psantos.org/ribafs/access/Algumasdicas1.txt 6/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

DoCmd.PrintOut , , , , cópias

End Function

30 - SAIR DO ACCESS COM CONFIRMAÇÃO

Function Sair()

If MsgBox("Você deseja sair do aplicativo?", vbYesNo + vbQuestion, _

"Confirmação") = vbYes Then

'Esconder a "Barra de Status"

'Application.SetOption "Mostrar Barra de Status", False

Application.Quit acPrompt

End

End If

End Function

31 - OBRIGAR PREECHIMENTO DE CAMPO

No Evento Ao perder o foco do Campo/Controle:

Private Sub NomeCliente_LostFocus()

If IsNull(NomeCliente) Then

MsgBox "Preenchimento obrigatório!"

DoCmd.CancelEvent

SendKeys "{UP}"

End If

End Sub

32 - REPETIR CONTEÚDO DO ÚLTIMO REGISTRO NO ATUAL

Dica de MARCIO DA SILVA VIEIRA CS39152@csn.com.br na lista Access-br.

1. Abra a estrutura de seu formulário ;

2. Selecione todos os campos que vc deseja que os dados se repitam ;

3. Abra a folha de propriedades através da barra de ferramentas ;

4. Clique no campo Marca da guia : Outra

5. Digite : Repetir

6. Crie um Procedimento de evento no seu formulário(Antes de Atualizar),

como segue :

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim ctlCampo As Control

Dim strAspas As String

For Each ctlCampo In Me

If ctlCampo.Tag = "Repetir" Then

If Not IsNumeric(ctlCampo) Then

strAspas = Chr(34)
Else

strAspas = ""

End If

ctlCampo.DefaultValue = strAspas & ctlCampo & strAspas

End If

Next ctlCampo

End Sub

7. Salve as alterações e experimente !

33 - CRIAR MODELO DE FORMULÁRIO/RELATÓRIO

Crie um formulário com todas as propriedades desejadas como padrão e salve

com nome Normal. Caso deseje Salvar com outro nome terá que informar esse

nome em Ferramentas - Opções - Formulários/Relatórios - Modelo de...

34 - SOLICITANDO PARÂMETROS EM CONSULTA SQL

SELECT * FROM Clientes WHERE NomeCli = [Qual o nome do Cliente?];

www.psantos.org/ribafs/access/Algumasdicas1.txt 7/8
07/07/2021 www.psantos.org/ribafs/access/Algumasdicas1.txt

Esta consulta solicita o Nome do Cliente e informa apenas os encontrados

com o nome solicitado.

35 - EXIBINDO A CAIXA CONTAS DE GRUPOS E USUÁRIOS

Public Function ExibirSegurança()

DoCmd.RunCommand acCmdUserAndGroupAccounts

End Function

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

Cantinho dos Amantes do Access

www.ribafs.hpg.com.br/access

www.psantos.org/ribafs/access/Algumasdicas1.txt 8/8

Você também pode gostar