Curso de dBASE II
Consulta à Tabela
Você está em: MarMSX >> Cursos >> dBASE II
Assim como no SQL, os comandos de consulta/pesquisa do dBASE II possuem algumas ferramentas que permitem, não só a listagem de registros, bem como filtrar, fazer cáculos etc.
Os comandos "display" e "list" são os responsáveis pela exibição de dados da tabela. A diferença entre um comando e outro é que o "list" lista os registros sem interrupção, enquanto que o "diplay" pára a cada 15 registros, aguardando uma tecla ser pressionada.
A sintaxe do comando "display" é a seguinte:
display [escopo] [for <condição>] [<campos>] [to print] [off]
Onde:
- escopo - indica quais os registros afetados. Pode ser: "record n", "next n", "all" ou nada.
- condição - um teste lógico de aceitação em cima de um ou mais campos (filtro).
- campos - lista de campos a serem exibidos, separados por vírgulas. Quando omitido, lista todos os campos.
- to print - envia dados à impressora.
- off - desabilita a exibição do número do registro.
Exemplos:
1) Lista todos os alunos da tabela alunos:
. use aluno
. display all
00001 8361 Pablo Goncalves 11 M 5
00002 4321 Ana Maria Silva 11 F 5
00003 5543 Waldir Moraes 12 M 6
00004 8437 Alvaro Schwarz 12 M 5
00005 7193 Beatriz Saraiva 13 F 6
00006 3398 Mauro Pontes 11 M 5
00007 9001 Pedro Tavares 13 M 6
00008 6567 Suely Albuquerque 12 F 6
00009 6201 Pedro Borges 11 M 5
00010 7766 Paula Tavares 13 F 6
2) Lista todos os meninos da tabela alunos:
. display for sexo="M"
00001 8361 Pablo Goncalves 11 M 5
00003 5543 Waldir Moraes 12 M 6
00004 8437 Alvaro Schwarz 12 M 5
00006 3398 Mauro Pontes 11 M 5
00007 9001 Pedro Tavares 13 M 6
00009 6201 Pedro Borges 11 M 5
3) Lista o nome e a idade de todas as meninas da tabela alunos, sem o número do registro.
. display nome,idade for sexo="F" off
Ana Maria Silva 11
Beatriz Saraiva 13
Suely Albuquerque 12
Paula Tavares 13
Obs: tanto faz a posição dos campos vir antes ou depois do "for".
4) Lista os próximos 2 registros, a partir do atual:
. go 4
. display next 2;
00004 8437 Alvaro Schwarz 12 M 5
00005 7193 Beatriz Saraiva 13 F 6
Operadores do dBASE II
São os seguintes operadores dos dBASEII:
Operador |
Tipo |
Descrição |
+ |
Matemático |
Adição |
- |
Matemático |
Subtração |
* |
Matemático |
Multiplicação |
/ |
Matemático |
Divisão |
() |
Matemático |
Precedência |
< |
Relacional |
Menor que |
> |
Relacional |
Maior que |
= |
Relacional |
Igual |
<> |
Relacional |
Diferente |
<= |
Relacional |
Menor ou igual |
>= |
Relacional |
Maior ou igual |
.and. |
Lógico |
E |
.or. |
Lógico |
Ou |
.not. |
Lógico |
Não |
+ |
Concatenação |
Junta duas strings |
- |
Concatenação |
Junta duas strings, eliminando espaço em branco ao final de cada |
$ |
Concatenação |
Compara strings |
Ordem de precedência:
- Operador matemático
- Operador relacional
- Operador lógico
Pesquisa por textos
Alguns cuidados devem ser tomados quando se realiza pesquisa baseada em textos. Por exemplo, quando utilizamos a cláusula "for" para filtrar alunos do sexo feminino, caso utilizemos a expressão "f" em minúsculo, nada é retornado.
. display for sexo="f"
.
O mesmo acontece, quando buscamos por "pedro borges".
. display for nome="pedro borges"
.
Entretanto, temos:
. display for nome="Pedro Borges"
00009 6201 Pedro Borges 11 M 5
Para resolver esse problema, vamos utilizar a função "!", que converte todos os caracteres de uma expressão ou campo em maíusculo. Ex:
. ? !("abc")
ABC
Assim, resolvemos o problema da seguinte maneira:
. display for !(nome)="PEDRO BORGES"
00009 6201 Pedro Borges 11 M 5
Não importa como estão configurados os nomes dos alunos !
Pesquisa exata ou parecida (like)
O comando "set exact on/off" ativa ou desativa o modo exato de busca. Por exemplo:
. set exact off
. display for !(nome) = "PEDRO"
00007 9001 Pedro Tavares 13 M 6
00009 6201 Pedro Borges 11 M 5
Corresponde ao comando SQL:
SELECT * FROM alunos WHERE upper(nome) like "%PEDRO%";
Enquanto que:
. set exact on
. display for !(nome) = "PEDRO"
.
Corresponde ao comando SQL:
SELECT * FROM alunos WHERE upper(nome) = "PEDRO";
Retorno de substring através da função "$". Sintaxe:
$(<string>, inicio, comprimento);
Exemplo:
. display record 1 $(nome, 1, 3)
00001 Pab
Pesquisa por numeros
Vamos listar os alunos da 6a. série:
. display for serie=6
00003 5543 Waldir Moraes 12 M 6
00005 7193 Beatriz Saraiva 13 F 6
00007 9001 Pedro Tavares 13 M 6
00008 6567 Suely Albuquerque 12 F 6
00010 7766 Paula Tavares 13 F 6
Vamos listar somente os alunos da 6a. série e com 13 anos ou mais:
. display for serie=6 .and. idade>12
00005 7193 Beatriz Saraiva 13 F 6
00007 9001 Pedro Tavares 13 M 6
00010 7766 Paula Tavares 13 F 6
Variáveis do dBASE II
Antes de dar prosseguimento às pesquisas, é necessário sabermos como criar, alterar e apagar variáveis da memória no dBASE II.
Resumo das funções:
Função |
Descrição |
Exemplos |
store |
Cria / altera variáveis |
store 1 to A, store "Rita" to nome |
release |
Apaga variáveis |
release A, release all like A*, release all except nome |
clear |
Apaga todas as variáveis |
clear |
save |
Salva variáveis em disco |
save to "myvars", save to "myvars" all like nom* |
restore |
Recupera variáveis do disco |
restore from "myvars" additive |
display / list memory |
Apresenta as variáveis |
display memory |
Operações em pesquisas
Podemos também realizar operações sobre os campos de uma pesquisa. Por exemplo, desejo saber quantos anos tem as meninas hoje e terão daqui a 15 anos:
. display nome,idade,idade+15 for sexo="F" off
Ana Maria Silva 11 26
Beatriz Saraiva 13 28
Suely Albuquerque 12 27
Paula Tavares 13 28
Função de contagem "count". Sintaxe:
count [escopo] [for <condição>] [to <variavel>]
O seguinte comando irá contar o número de meninas na turma.
. count for sexo="F"
Contagem =00004
Se utilizarmos a opção to "variável", iremos copiar o resultado para uma variável. Ex:
. count for sexo="F" to meninas
Contagem =00004
. ? meninas
4
Função de soma "sum". Sintaxe:
sum [escopo] <campos> [for <condição>] [to <variavel>]
O seguinte comando irá somar a idade dos alunos da turma.
. sum idade
119
O seguinte comando irá somar a idade das meninas da turma.
. sum idade for sexo="F"
49
Calculando a idade média da turma:
. sum idade to idades
. count all to total
. ? idades / total
11
O comando locate
o comando locate realiza buscas (assim como o display e list), retornando o número do registro em vez de imprimí-lo. Além disso, seta o ponteiro de registro para o registro encontrado. Ex:
. locate for nome="Pedro Borges"
Registro :00009