Capítulos Aposentados

     
    1. Formulários Gráficos
    (desactualizado)
    1. Macros
    (matéria retirada do programa)
     


  1. Formulários
    1. Formulários Gráficos
     

    Informação numérica de uma tabela (ou "query") pode ser apresentada graficamente. No mesmo gráfico podem ser mostrados vários campos, o tipo de gráfico escolhido permite evidenciar certas características dos valores escolhidos. O "FormWizards" tipo "Graph" proporciona os seguintes tipos de gráficos:

    A primeira linha refere gráficos bi-dimensionais e a segunda gráficos tri-dimensionais.

    Nos gráficos tipo "Área" salientam a contribuição de cada campo para o total desse campo. É possível representar vários campos, sendo cada representado por uma cor.

    Nos gráficos de "Barras" ou de "Colunas" são salientadas as diferenças entre valores dos diversos campos.

    Um gráfico de "Linhas" salienta as variações dentro dos valores de um campo.

    Os gráficos tipo "Circular" salientam também a contribuição das partes para o todo, mas só é possível mostrar um único campo.

    Exemplo: Análise gráfica das notas de um teste

    Num teste com quatro perguntas, as notas dos alunos (» 300) são guardadas na tabela:

    Representação de Médias das Notas por Turma

    É criada uma "Query" que agrupa os registos por turma (na linha "Total") e calcula a média de todas as perguntas, assim como da nota final:

    Em seguida pode construir um gráfico de linhas na base desta "query":

    Análise da distribuição das notas

    Pretende-se obter um gráfico que ilustre a distribuição das notas, por turma, no intervalo 0 a 20. Para esse efeito é construida uma "Select Query" com três campos: "turma", "nota" e "Classe".

    O campo "turma" é proveniente da tabela "Notas", enquanto os campos "nota" e "Classe", são campos calculados:

    nota: [ perg1] +[ perg2] +[ perg3] +[ perg4]

    Classe: Choose(1+Int([nota]/2); "[0-2]"; "[2-4]"; "[4-6]"; "[6-8]"; "[8-10]"; "[10-12]"; "[12-14]"; "[14-16]"; "[16-18]"; "[18-20]")

    A função Choose(N, Lista_de_valores) retorna o n-ésimo valor da lista. Com base nesta "Query" é criada uma "CrossTab Query" que obtém o número de notas (por turma) situadas nos intervalos definidos pelo campo "Classe":

    A "query" permite gerar o seguinte gráfico de barras:

  2. Macros
As macros permitem executar sequências de acções de maneira automática. As acções são pré-definidas, cabendo ao utilizador escolher as que pretende executar, assim como a ordem de execução.

Cada acção tem um conjunto de propriedades associadas que o utilizador pode adaptar aos seus objectivos. As macros estão associadas a eventos em formulários: quando o evento se dá, a macro é executada. Assim, a definição de uma macro envolve:

 

Situações típicas de utilização de macros permitem:

 
    1. Localizar Registos a partir de uma Caixa de Texto

      Vejamos agora como é possível utilizar macros para localizar registos que satisfazem certas condições.

      O formulário Notas mostra informação referente às notas de alunos a um teste. Pretende-se localizar o registo correspondente ao aluno cujo nome o utilizador deverá especificar (na secção Footer).

      Para atingir esse fim, são acrescentados dois controlos adicionais: a legenda ("Label"), e a caixa de texto ("Text Box").

      A legenda permite simplesmente colocar o texto "Digite Nome" no formulário. Este controlo tem a propriedade:

      Caption: "Digite Nome:"

      A caixa de texto tem as seguintes propriedades (entre outras):

      Name: "Nome_digitado"

      AfterUpdate: localiza

      A propriedade AfterUpdate determina que a macro localiza deve ser executada após o utilizador preencher o campo. Este controlo não pode estar ligado a nenhum campo da tabela alunos, nem a nenhuma expressão (isto é, este campo deverá ser Unbound).

      As macros são definidas na folha de macros. Vejamos a definição da macro localiza:

      A macro é constituída por duas acções. A primeira acção, GoToControl, tem como parâmetro o nome de um controlo. Neste caso, como se pretende localizar o nome do aluno, é indicado o controlo com o nome Nome.

      A segunda acção, FindRecord, encontra o registo que satisfaz as condições definidas nos parâmetros. No parâmetro Find What é especificado =[ Nome_digitado] . Esta acção vai procurar o 1º registo que satisfaz a condição (valor do campo Nome igual ao valor do controlo Nome_digitado).

      Desta forma, quando o utilizador digita um nome e carrega na tecla Enter, a macro é disparada. Se existir um aluno com o nome indicado, o registo correspondente passa a ser o registo corrente, caso contrário o registo actual mantém-se corrente.

    2. Forma Geral da Macros
Em geral as definições de macros incluem os seguintes tipos de informação:  

Para aceder a esta informação, pode-se utilizar:

Menu View: Toolbar: Menu:

 

Definição de Várias Macros numa Folha

É possível definir várias macros na mesma folha de macros. Cada macro é identificada por um nome (coluna Macro Name). Para referir uma macro de uma folha particular, pode-se utilizar o formato

<nome_da_folha> . <nome_da_macro>.

Por exemplo, Macro2.seguinte identifica a macro a macro seguinte da folha Macro2.

    1. Macros com Condições

      Ao executar uma macro, é avaliada a condição associada à primeira linha da macro. Se a condição resultar em TRUE é executada a acção associada e passa-se para a linha seguinte. Uma condição não definida, ou seja em branco, é avaliada como TRUE. A macro termina quando encontra uma linha em branco ou uma linha que pertence a outra macro.

      O seguinte exemplo, mostra a macro seek_bi, que inclui as acções CancelEvent e DoMenuItem. Cada acção é executada, só se a condição correspondente for verdadeira.

      A referência, numa macro, ao valor de um controlo de um formulário pode ser feita indicando apenas o nome do controlo, se a macro é disparada por um evento nesse formulário. Em todos outros casos é necessário utilizar a seguinte forma geral:

      Forms![ nome_de_formulário] ![ nome_de_controlo] .

      Vejamos um exemplo. A macro seek_bi inclue a acção CancelEvent que é condicionada por:

      IsNull (Forms![ requisicao] ![ bi] )

      Neste caso, pretende-se testar, utilizando a função IsNull(..), se o valor do controlo bi no formulário requisição é vazio.

      Notamos ainda que é possível associar várias acções a uma condição, utilizando o operador "..." (ellipsis).

    2. Localizar Registos a partir de Botões

      Um outro grupo de operações frequentes em formulários envolve posicionamento no registo desejado. Alguns exemplos destas macros são apresentadas na seguinte tabela:
       
      Macro Acção Parametros
      primeiro GoToRecord Object Type:  ObjectName: 

      Record: First 

      Offset:

      ultimo GoToRecord Record: Last
      anterior GoToRecord Record: Previous
      seguinte GoToRecord Record: Next
      novo GoToRecord Record: New
       

      As macros podem ser executadas a partir de botões de comando, disponíveis no formulário, que têm associado á propriedade OnClick (ou OnPush em Access 1) o nome da macro que efectua a operação desejada.

      As macros anterior, seguinte só podem ser executadas se houver se existir o registo pretendido. Isto é, se está no 1º registo, não existe registo anterior, o executar a macro anterior, nesta situação, dá origem a erro:
       
         

       

      Esta situação pode ser ultrapassada, utilizando funções definidas pelo utilizador (no objecto Module) que permitem detectar situações de erro.

    3. Eliminar Registos a partir de Botões
      Macro Acção Parametros
      Eliminar DoMenuItem    

        

      DoMenuItem

      MenuBar: Form  MenuName: Edit 

      Command: Select Record 

      MenuBar: Form 

      MenuName: Edit 

      Command: Delete

       
    4. Localizar Grupos de Registos a partir da "Combo Box"
Em algumas aplicações é associado um tipo à cada item. Por exemplo, posição ou departamento do trabalhador, turma do aluno etc. Nestas circunstâncias pretende-se muitas vezes localizar todos os dados de certo tipo. Vejamos um exemplo que envolve a localização de todos os alunos de uma turma.

No formulário seguinte está disponível uma ComboBox que mostra todas as turmas existentes na tabela e permite seleccionar uma turma.

Ao seleccionar uma turma, é disparada uma macro (Localiza) e o primeiro aluno dessa turma passa a ser o registo corrente. O botão Next dispara uma outra macro (seguinte) e assim, o utilizador pode ver os dados relativos ao aluno seguinte (mas da mesma turma).

A ComboBox pode ser construída de várias maneiras. Uma possibilidade é simplesmente enumerar os items. Assim, as propriedades da ComboBox deveriam ser:

 

Uma outra possibilidade é construir uma Query, agrupando os dados através o campo turma.

Neste caso, as propriedades da ComboBox deveriam ser:

 

A terceira possibilidade é utilizar um comando de SQL:

 

Este comando irá seleccionar as turmas da tabela eliminando as repetições. Mais detalhes sobre a linguagem de SQL estão apresentados na Secção 9.

A macro Localiza é disparada através da propriedade AfterUpdate da ComboBox. A seguinte tabela mostra a definição da macro.

A primeira acção determina que o sistema deveria analisar os dados do controlo turma.

A segunda acção determina que o valor neste campo deveria ser comparado com o da ComboBox cujo nome é turma_selecionada.

A terceira acção da macro garante que o botão Next esteja disponível. Inicialmente, este botão não está disponível (a propriedade Enabled deste botão está em No). A acção da macro SetValue .. permite inverter esta situação.

Macro Acção Parametros
Localiza GoToControl 

FindRecord 

SetValue

Object Type: "turma" 

=[turma_selecionada] 

Forms![alunos]![Next]!Enabled= 

Yes

seguinte GoToControl 

FindNext

Object Type: "turma" 

 

A macro seguinte é disparada através OnClick do controlo Next. Esta macro localiza o próximo registo que satisfaz a condição definida pela última instrução de tipo FindRecord.
    1. Abertura de um Outro Formulário
 
Macro Acção Parametros
abrir OpenForm FormName: <Formulário>
 

Consideramos um exemplo que mostra como se pode abrir um formulário junto com outro. No nosso caso temos um formulário principal que apresenta dados relativos a um aluno (alunos) e é tipo Single Form. O outro formulário (notas1) mostra as notas desse aluno e é tipo Tabular Form.


 
Para abrir o segundo formulário (notas1) a partir do formulário principal (alunos), deve utilizar uma macro (abrir_notas) e garantir que esta macro fosse disparada com o evento On Open do formulário principal: 

 

 

Hosted by www.Geocities.ws

1