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

Sistema de vendas sem login nem proteções

O exemplo do sistema de sistema de vendas, apesar de antigo, é um bom exemplo para estudo.
Como tenho recebido algumas mensagens de utilizadores que não conseguem entrar devido à proteção do login e do numero de série do HD, abaixo disponibilizo o exemplo sem essas proteções.

Sistema de vendas

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

Alteração do layout

Hoje foi alterado o layout devido a problemas de vários utilizadores ao entrarem ser negado o acesso.
Brevemente novos exemplos.

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

Pesquisa Avançada – Várias palavras

Neste exemplo vou mostrar como fazer uma pesquisa, por várias palavras, em determinado campo de um formulário.
O código utilizado neste exemplo é bastante útil para efectuar pesquisas mais avançadas.

1º Criar a tabela
– Criar a tabela “tbldados” com os seguintes campos: Id (numeração automática) / Dados (texto)
2º Criar o formulário “Form1”
– Criar o formulário através do assistente e escolher a tbldados como origem de dados, escolher “Tabela” para o esquema do formulário.
– Depois, ir à estrutura do formulário e criar um campo de texto independente, no rodapé do formulário, com o nome txtpesquisa.
– Criar um botão e na propriedade colocar o seguinte código:

‘**************************************************************
‘Elaborado por: José Martins
‘Site: www.accessexemplos.com
‘Data: 22-09-2011
‘NOTA: Não remover este cabeçalho. Respeite o autor do código.
‘***************************************************************
On Error GoTo Err_Comando8_Click
Dim palavras() As String
Dim x As Integer
Dim strSQL As String
Dim strWhere As String

palavras = Split(Me.txtpesquisa, ” “)

For x = 0 To UBound(palavras)

strWhere = strWhere & “dados Like ‘*” & palavras(x) & “*’ or ”
Next x
strWhere = Left$(strWhere, Len(strWhere) – 3)

strSQL = “SELECT * FROM tbldados where ” & strWhere & ” ORDER BY [dados] ”
Me.RecordSource = strSQL

Exit_Comando8_Click:
Exit Sub

Err_Comando8_Click:
MsgBox Err.Description
Resume Exit_Comando8_Click

O que o código faz, básicamente, é criar um array composto pelas palavras em txtpesquisa que são detectadas através dos espaços. Depois é criado um ciclo para pesquisar por todas as palavras digitadas em txtpesquisa.

3º Testar
– Introduzir dados e depois escrever a palavra ou palavras que vamos procurar na caixa de texto (txtpesquisa), clicar no botão e verficar os resultados.

Abaixo segue o link para fazer o dowenlod do exemplo: PESQUISAR VÁRIAS PALAVRAS

Google Plus

Hoje adicionei o botão +1 do Google Plus. Esta é mais uma forma de divulgar os posts. Caso ainda não tenha convite para o Google Plus deixe um comentário com o seu email que envio o convite.

Despesas

Esta é uma base de dados muito simples que serve para controlar as depesas do dia a dia.

Menu Principal
Na imagem 1 podemos ver o menu princípal bastante simples e funcional. No topo podemos ver o ano em que estamos a trabalhar.
Imagem 1

Ano de trabalho
Para alterar o ano de trabalho clicamos no botão escolher ano e abrimos o formulário (imagem 2) e digitamos o ano que queremos.
imagem 2

Despesas
No botão despesas abrimos o formulário (imagem 3) para introdução de dados. Ao lado da categoria temos um botão ‘+’ para adicionar categorias e ao lado da subcategoria temos um botão ‘+’ para adicionar as subcategorias (ao clicar no botão subcategorias caso ainda não tenha escolhido a cetegoria, dá erro e pede para selecionar a categoria. Caso tenha a categoria selecionada ele abre o formulário categorias, na categoria selecionada).
No campo fornecedor podemos escolher um da lista e caso não exista ele pergunta se deseja adicionar.
imagem 3

Categorias
Este formulário (imagem 4) serve para gerir (inserir / alterar / eliminar / pesquisar) as categorias e respectivas subcategorias.
imagem 4

Fornecedores
Neste formulário serve para gerir (inserir / alterar / eliminar / pesquisar) os nomes dos fornecedores.
fornecedores

Relatórios
Ao clicar neste botão abre o menu (imagem 5) dos relatórios onde podemos escolher 4 tipos de relatórios:
imagem 5

– despesas do ano actual (imagem 6): mostra um relatório com a categoria, subcategoria e valor total por mês, do ano com que estamos a trabalhar. Mostra também o total de despesas por mês e total por subcategoria.
Neste relatório incluí um gráfico por subcategoria que mostra a evolução mensal de cada subcategoria. Este gráfico não é da minha autoria, no módulo respectivo tem os dados do autor, nomeadamente:

‘Author : Philippe Bonnardel (based on an idea of Edward Tufte)

imagem 6

– despesas por ano (imagem 7): mostra um formulário com as depesas por categoria num determinado ano. Podemos escolher o ano das despesas, desde que exista registada uma despesa nesse ano e visualizar o respectivo gráfico. Ao fazer duplo clique na categoria abre o relatório anual das subcategorias que tem o mesmo formato. Ao fazer duplo clique na subcategoria abre o detalhe (imagem 8 ) das despesas efectuadas nessa subcategoria.

imagem 7

Detalhe
imagem 8

– despesas por mês: igual às despesas por ano mas aqui podemos escolher o ano e o mês que desejamos.

– despesas por fornecedor: mostra um formulário com as despesas por fornecedor em determinado ano, e o respectivo gráfico. Neste relatório apenas podemos escolher o ano que desejamos visualizar.

Comparação Anual
Mostra a evolução das despesas dos últimos 10 anos. Mostra os valores por ano e mostra um gráfico.
comparacao anual

Aguardo comentários desta base de dados, entretanto vou acrescentar funcionalidades ao exemplo, como a possibilidade de imprimir os relatórios.

Download do exemplo: DESPESAS

Sistema de vendas (actualização)

Neste actualização do sistema de vendas as alterações foram as seguintes:
Colocar a imagem da empresa no relatório, que não estava aparecer.
Reformulação do aspecto da impressão da venda e colocação do campo “produto” que não estava na impressão.
Colocação da tabela de IVa e totais.
Criação do formulário de listagem de vendas diárias, onde podemos ver todas as vendas efectuadas no dia e uma listagem por tipo de pagamento.
Alteração do código para introduzir a imagem do logotipo da empresa. Como a imagem esta ligada ao campo ‘localfoto’ que é o caminho no disco onde está a imagem, caso a imagem não se encontre no local dava erro e não abria o formulário “dados da empresa”. Assim sendo coloquei uma rotina que verifica se dá erro e caso isso aconteça esconde a imagem e sai da função para não dar erro. Basicamente volta ao estado inicial como se ainda não tivesse imagem.
Alterado no formulário e no relatório de impressão da venda.
Fornecedores – Foi criado o formulário de fornecedores. Sempre que inserir uma nova compra e o fornecedor não existir, pergunta se deseja adicionar. Em caso afirmativo abre o formulário “Fornecedores” para introduzir os dados.
Compras – Se o artigos não existir, pergunta se quer inserir.

Download: Sistema de Vendas

Agradeço que testem e comentem, para melhorar o sistema.

Actualização do código para inserir uma foto

No exemplo do abrigo animais e no exemplo sistema de vendas existe um formulário onde podemos colocar uma foto. Após utilização desse código verifiquei que como a imagem esta ligada ao campo ‘localfoto’ que é o caminho no disco onde está a imagem, caso a imagem não se encontre no local dava erro e não abria o formulário. Assim sendo coloquei uma rotina que verifica se dá erro e caso isso aconteça esconde a imagem e sai da função para não dar erro. Basicamente volta ao estado inicial como se ainda não tivesse imagem.

Na próxima mensagem vou colocar a próxima actualização do sistema de vendas onde poderemos ver o código em funcionamento. Entretanto podemos fazer um teste que é colocar o sistema de vendas numa pasta diferente e verificar o que acontece quando abrimos o formulário dos dados da empresa.

O código actualizado é o seguinte:

‘www.accessexemplos.com
‘José Martins
‘2011-02-28

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
Resume Exit_mostraimagem:
Case Else ‘ Outro Erro.
MsgBox Err.Number & ” ” & Err.Description
Resume Exit_mostraimagem:
End Select