Category Archives: Exemplos

Caixas de combinação interativas

Neste exemplo pretendo demonstrar como fazer caixas de combinação interativas, ou seja, ao escolher um valor numa caixa de combinação na segunda apareça apenas os valores relacionados com a primeira escolha. Ou seja, temos uma tabela Carros em que temos dois campos: Marca e Modelo, e ao escolher a marca na 1ªcaixa vamos mostrar apenas os modelos dessa marca na 2ª caixa.

1- Criar a tabela carros com dois campos: Marca e Modelo ambos do tipo texto.

2- Criar o formulário carros, independente, colocar uma caixa de combinação e na origem de dados escolher o campo marca e agrupar os resultados: SELECT Carros.Marca FROM Carros GROUP BY Carros.Marca ORDER BY Carros.Marca;

3- Inserir uma nova caixa de combinação e nas propriedades inserir a seguinte instrução na origem da linha: SELECT Carros.Modelo FROM Carros WHERE (((Carros.Marca) Like forms!carros!marca));
Básicamente escolhemos os dois campos da tabela e mostramos apenas os modelos onde a marca é igual à que escolhemos na 1ª caixa de combinação.

4- Depois vamos dar a instrução para actualizar a 2ª caixa assim que actualizamos o valor da 1ª. Para isso vamos às propriedades da 1ª caixa e na propriedade depois de actualizar colocar o seguinte código: me!modelo.requery.
Para que ao mudar a marca não fique o modelo que não corresponde à marca anterior selecionada colocamos também o seguinte código para o campo modelo ficar sem valor: Me!modelo = “”

5- Nas propriedades das duas caixas de combinação, a propriedade “Limitado à lista” escolhemos como “sim” para só aceitar valores que já estejam inseridos na tabela.

6- Testar

Download: Caixas de combinação

Função InputBox

Esta função mostra uma caixa de diálogo para o utilizador introduzir texto e retorna uma string com o conteúdo introduzido.
Sintaxe: InputBox (aviso, título, padrão, posx, posy, arquivodeajuda, contexto)

Aviso – Obrigatório. É o texto que aparece na caixa de diálogo. O comprimento máximo é de aproximadamente 1024 caracteres, dependendo da largura dos caracteres utilizados. Se o aviso consistir em mais de uma linha, você poderá separar as linhas utilizando um caractere (Chr(13)), um caractere de nova linha (Chr(10)) ou uma combinação dos dois(Chr(13) e Chr(10)) entre cada linha.
Título – Opcional. É o texto que é exibido na barra de título da caixa de diálogo. Sendo opcional se não colocar nada o nome do aplicativo será colocado na barra de título.
Padrão – Opcional. É o texto que é exibido na caixa de texto como a resposta padrão se nenhuma outra entrada for fornecida. Se você omitir o padrão, a caixa de texto será exibida vazia.
Posx – Opcional. Especifica, em pontos, a distância horizontal da borda esquerda da caixa de diálogo a partir da borda esquerda da tela. Quando omitido, a caixa de diálogo será centralizada horizontalmente.
Posy – Opcional. Especifica, em pontos, a distância vertical da borda superior da caixa de diálogo a partir da parte superior da tela. Quando omitido, a caixa de diálogo será posicionada verticalmente, aproximadamente em um terço da tela.
Arquivodeajuda – Opcional. Identifica o arquivo de ajuda a ser usado. Se o arquivodeajuda for fornecido, o contexto também o deverá ser.
Contexto – Opcional. A expressão numérica que é o número de contexto da ajuda atribuído ao tópico de ajuda apropriado pelo autor da ajuda. Se contexto for fornecido, o arquivodeajuda também o deverá ser.

Exemplo: InputBox(“Qual o seu nome?”, “Digite a sua opção”, “José”)
Este exemplo produz a seguinte caixa de diálogo: Inputbox photo Inputbox.jpg

No exemplo abaixo podemos ver o seu funcionamento: Access2003 | Access2010

Trabalhar com imagens em formulários e relatórios

Neste exemplo pretendo demonstrar como trabalhar com imagens em forumários e relatórios.
Para tal criei uma tabela para registo de vendedores, onde constam vários campos para identificação de cada vendedor e um campo para inserir a fotografia.
Para colocar uma nova imagem clicamos em adicionar foto e escolhemos uma imagem à escolha no nosso computador. Esta imagem fica ligada à base de dados e não incorporada, pelo que caso se mude a base de dados de localização as imagens deixam de estar disponíveis.
Para adicionar a imagem utilizei o seguinte código:

Dim strCaminho As String, strPastaInicial As String
strPastaInicial = “C:Meus Documentos”
strCaminho = Buscar(Me.hwnd, “Inserir foto”, strPastaInicial, _
“Arquivos gráficos (*.bmp; *.gif; *.jpg)” & vbNullChar & “*.bmp; *.gif; *.jpg”)
If Len(strCaminho) > 0 Then
Me.Localfoto = strCaminho
Me.FOTO.Picture = Me.Localfoto
Me.FOTO.Visible = True
End If

O código acima serve para carregar a imagem, mais própriamente colocar o caminho (localização) num campo de texto. Através dessa localização é mostrada a imagem correspondente.
Depois, necessitamos de actualizar a imagem à medida que vamos mudar de registo, para isso usei o seguinte código:

msgerro.Visible = False ‘Esconde a mensagem de erro, que só aparece caso não encontre a imagem na localização especificada

On Error GoTo Err_mostraimagem

If IsNull(Me.Localfoto) = False Then
Me.FOTO.Picture = Me.Localfoto
FOTO.Visible = True
SEMFOTO.Visible = False
Else
Me.FOTO.Picture = “”
SEMFOTO.Visible = True
FOTO.Visible = False

End If

Exit_mostraimagem:
Exit Sub

Err_mostraimagem:
Select Case Err.Number
Case 2220 ‘ Não encontra a imagem
FOTO.Visible = False
SEMFOTO.Visible = True
msgerro.Visible = True
Resume Exit_mostraimagem:
Case Else ‘ Outro Erro.
MsgBox Err.Number & ” ” & Err.Description
Resume Exit_mostraimagem:
End Select

Download: Fotos

Actualização do sistema de vendas

Após algum tempo sem actualizar o Blogue, finalmente consegui algum tempo para actualizar o sistema de vendas. Muitos leitores não conseguiam entrar devido ao sistema de login que pedia password. Assim sendo, removi o sistema de login para facilitar o acesso.
Além desta alteração fiz as seguintes alterações:

V 0.5.0 (2010-08-19)
– Removi o login e utilizadores.
– Acrescentei campos (família, iva e unidade) na tabela produtos.
– Criei a tabela de IVA.
– Alteração do formulário Produtos. (novos campos, aspecto, nova forma de localizar registos).
– Criei a tabela família (de produtos).
– alterei o formulário de compras: só se inseria um produto de cada vez. Coloquei no formulário de compras um subformulário onde se pode inserir vários produtos comprados num determinado fornecedor.

Download: Vendas 2010

Agradeço comentários para numa nova actualização corrigir ou acrescentar funcionalidades.

De futuro estou a pensar em mudar o local de onde se fazem os downloads dos arquivos, uma vez que se não houver actividade num arquivo durante algum tempo, o arquivo é removido. Assim sendo vou procurar uma alternativa ao easy-share para que isso não aconteça.

No próximo post irei colocar uma versão de como calcular prestações similar ao que aqui já tem neste post, mas que em vez de ter apenas prestações mensais podemos escolher o números de dias que decorrem entre cada prestação. Esse exemplo servirá também para responder a uma questão de um leitor (Marcelo).

Como evitar que um formulário abra se não houver registos para mostrar?

Por vezes torna-se necessário evitar que um formulário abra se não houver registos para mostrar, por exemplo quando fazemos uma consulta e não se encontra nenhum registo pretendido, não precisamos de estar a abrir o formulário uma vez que não temos dados para mostrar. Então o que temos que verificar é se existem registos a mostrar e caso não haja nenhum mostramos uma mensagem e impedimos o formulário de abrir. Como?

É fácil basta colocarmos o código abaixo nas propriedades do formulário no evento ‘ao abrir’:

If Form.RecordsetClone.RecordCount = 0 Then
MsgBox “Não encontrei registos.”, vbExclamation, “Erro!!!”
DoCmd.Close acForm, “localizar dados”
Exit Sub
End If

Para ver um exemplo faça o download: Impedir Formulário de Abrir

Como atribuir acções a teclas?

1- Criar um formulário na vista estrutura e no evento ‘Ao carregar’ nas propriedades do formulário introduzir o seguinte: me.keypreview=true
Ou seja isto vai fazer com que os eventos de teclado sejam recebidos primeiro no formulário.

2- Nas propriedades do formulário, no evento ‘com a tecla em baixo’ colocar o seguinte código:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF2
DoCmd.OpenForm “formulario1”
Case vbKeyF3
DoCmd.OpenForm “formulario2”
Case vbKeyF4
DoCmd.OpenForm “formulario3”
Case vbKeyF5
Dim Calculadora As Double
Calculadora = Shell(“calc.exe”, vbNormalFocus)
Case vbKeyF6
DoCmd.Close
Case Else
End Select
End Sub

O que este código faz é o seguinte:
– Ao pressionar a tecla F2 abre o formulário1
– Ao pressionar a tecla F3 abre o formulário2
– Ao pressionar a tecla F4 abre o formulário3
– Ao pressionar a tecla F5 abre a calculadora do Windows
– Ao pressionar a tecla F6 fecha o formulário

Além das tecla de funções F1, F2…etc, também podemos utilizar qualquer outra tecla para executar funções, mas tendo em atenção que se estivermos num formulário para introduzir dados não convêm utilizar teclas que são usadas para escrever os dados nos campos.
Outra coisa é o facto de só funciona no formulário onde colocarem os códigos acima mencionados.

Download: Teclas
Exemplo teclas de atalho

Menu Personalizado

Este é um tipo de menu que nos permite economizar tempo, linhas de código e uma melhor arrumação em termos de formulários abertos, uma vez que com este menu apenas precisamos de um formulário aberto. Além de diminuir o número de formulários abertos também diminui o número de botões num menu para abrir cada formulario.
Este tipo de menu, certamente que já existe há algum tempo e já é utilizado por muitos utilizadores do Access.
Então em que consiste este menu?
Vamos criar o menu utilizando uma caixa de combinação que contenha todos os formulários que pretendemos abrir através dele. Ao selecionar uma das opções da caixa de combinação o respectivo formulário é exibido dentro de subformulário. Então vamos começar a fazer o menu passo a passo.

1- Vamos criar uma tabela onde vamos guardar o nome que queremos dar a cada um dos formulários e o nome do formulario que vamos abrir. No exemplo criei a tabela ‘tblmenu’ com os seguintes campos:
Campo        Tipo
Nomedomenu    texto -> Nome que vai ser visto no menu (caixa de combinação)
formulario    texto -> Nome do formulário que vai abrir

Depois introduzimos os dados que no exemplo são os seguintes:

NomedoMenu    Formulario

Contas        formulario1
Depósitos    formulario2
Movimentos    formulario3
Conta-Caixa    formulario4
Conta-Conta    formulario5
Extracto    formulario6

2- Depois vamos criar uma consulta da tabela anterior:
Escolhemos a tabela tblmenu e depois escolhemos os dois campos em que escolhemos a ordenação  ascendente para o nomedomenu para ser mais fácil de encontrar o menu que queremos quando tempos bastantes formulários para abrir. A esta consulta dei o nome de ‘CsMenu’.

3- Vamos criar o formulário ‘Menu’, ou seja escolhemos novo formulário em vista de estrutura. Depois vamos criar uma caixa de combinação e modificar as seguintes propriedades:
– Nº de colunas: 2
– LArgura das colunas: 1cm;0cm;
– origem da linha: csmenu ( que é o nome da consulta criada no ponto anterior )

4- No mesmo formulário vamos criar um subformulário desvinculado do formulário principal(No exemplo dei o nome de menuquadro). É neste formulário que vai ser aberto cada um dos formulários que escolher no menu (caixa de combinação).

5- Agora vamos criar o módulo que nos vai permitir abrir o menu que é selecionado na caixa de combinação no subformulário.
Criamos um módulo (ao qual eu chamei de ‘abrirmenu’) e colamos o seguinte código:

Public Function AtivarMenu(Combmenu As ComboBox, subabrir As SubForm)
Dim abrirform As String
abrirform = Combmenu.Column(1)
subabrir.SourceObject = abrirform
subabrir.LinkChildFields = “”
subabrir.LinkMasterFields = “”
End Function

Depois vamos às propriedades da caixa de combinação no formulário Menu e no evento Depois de Actualizar colocamos a função criada: =ativarmenu([Menu];[menuquadro]) em que ‘Menu’ é o nome da caixa de combinação e ‘menuquadro’ o nome do subformulário.

E finalmente o menu está pronto a utilizar. É só testar e usar. Espero que tenham gostado desta dica.
Download: Menu

Abaixo uma imagem do menu.

Menu Personalizado

Menu Personalizado

Medir o tempo que um operador gasta a inserir um registo

Esta era uma dúvida do leitor Elton Rueb e que ele mesmo conseguiu resolver antes de eu ajudar. O que o leitor pretendia era medir o tempo que um utilizador demora a inserir um registo e para isso tem 3 campos: 1 para a hora de inicio altura em que abre o formulário, 1 para a hora de fim que é inserida quando se clica no botão de gravar e 1 campo para calcular a diferença. Este é um exemplo simples mas que pode fazer falta a quem pretenda calcular diferença entre dois tempos. Por isso o Elton Rueb (Rio de Janeiro – RJ – Brasil) disponibilizou o exemplo para que pudesse ajudar mais alguém.

Download: Teste Hora

Resposta a dúvida: Formatar data

O leitor Jacinto pôs uma questão aqui sobre como proceder para alterar o formato de uma data de 2008-06-12 para 2 0 0 8 0 6 1 2, a resposta tal como expliquei nos comentários é simples, basta uma caixa de texto com a seguinte expressão:

=formatar([o nome do campo data];”yyyy mm dd”)

e nas propriedades do campo pôr a seguinte expressão na máscara de introdução: 0 0 0 0 0 0 0 0 0

Bastante simples e fácil. Segue o exemplo para download: Formatar data

Exemplo de gestão de prestações

Este exemplo mostra como fazer um sistema de gestão de prestações de pagamentos.

O que este exemplo mostra e faz é criar automaticamente, com um clique num só botão, as prestações de um contrato de venda mediante os dados inseridos. Ou seja, introduzimos o nome do cliente a data de inicio do contrato e o valor total a pagar. Depois basta clicar no botão “calcular prestações” que ele gera automaticamente o número de prestações indicadas e divide o valor por cada uma delas e calcula a data de cada prestação( uma por cada mês). Este também é um exemplo que demonstra como acrescentar vários registos de uma só vez, porque ao clicar no botão ele acrescenta um registo para cada uma das prestações.

Download: Inserir Vários Registos