Criação de Banco de Dados
Detalhes do Trabalho Os 8 comandos SELECT Um Form-Exemplo Criação do Menu
Detalhes do Trabalho
O trabalho deve ser em grupo de 3 pessoas (no máximo) e contará de 2 partes que, no
final, resultará em um Projeto em Visual FoxPro com um banco de dados e Formulários de
Consulta utilizando o comando SELECT do SQL.
Banco de Dados
O banco de dados deverá ser composto de, no mínimo, 5 tabelas. Haverá tabelas de
Cadastro comum (cidades, clientes, funcionarios, livros, pacientes, animais, imoveis, mó-
veis, fitas, etc) e obrigatoriamente duas tabelas com ligação 1 para n de movimentação
(notas fiscais, alugueis, fichas de despesas, duplicatas, pagamentos, etc).
O Banco de Dados deve ser entregue, OBRIGATORIAMENTE, até o dia 16/11.
Formulários
Serão criados 15 formulários de consulta, cada um utilizando um comando SELECT do
SQL. Alguns formulários deverão possuir objetos de edição para criarem condições do WHERE
ou alterarem a ordenação no ORDER BY. No final, teremos mais um formulário para executar
os formulários de consulta.
Início da Página
Os 8 comandos SELECT
1 - Uma tabela com muitos registros (clientes, fitas, veiculos, funcionarios), com a
existência do campo NOME (por exemplo), utilizando a clásula WHERE ... LIKE
. Campo de Edição: o valor que está no LIKE
2 - A mesma tabela do Número 1 utilizando a cláusula IN ou BETWEEN.
. Option Group com 2 ordens de exibição (cláusula ORDER BY)
. Dois campos de edição definindo os valores para BETWEEN ou para IN
3 - Seleção utilizando mais de uma tabela com 2 funções do SQL (avg, count, min, max
ou sum)
. Option Group com 3 combinações de 2 funções a serem exibidas. Exemplo:
opção 1: avg e count
opção 2: min e max
opção 3: sum e count
4 - Seleção com mais de uma tabela utilizando a cláusula GROUP BY com uma das fun-
ções do SQL
. Na verdade serão dois comandos SELECT. Um Option Group escolherá um entre
dois campos de exibição. Exemplo:
Tabela Clientes com group by do campo CIDADE ou campo CLASSE
5 - Seleção em uma tabela utilizando Sub-Query (que pode ter mais de uma tabela). O
primeiro select deve retornar mais de uma linha.
. Campo de Edição: uma condição no segundo select
6 - Comando SELECT utilizando FULL JOIN
. Option Group com 2 ordens de exibição (cláusula ORDER BY)
7 - Comando SELECT com mais de uma tabela utilizando a cláusula TOP.
. Option Group com 2 ordens de exibição (cláusula ORDER BY)
. Campo de Edição: número de linhas que o TOP deve retornar
8 - Comando SELECT relacionando mais de DUAS tabelas, utilizando DUAS colunas cal-
culando valores (Operadores).
Início da Página
Um Form-Exemplo
Aqui estão os passos para criar um Formulário de Consulta da tabela de Funcionários de
uma empresa. Teremos campos do tipo caracter e numérico.
Primeiro Passo
Dentro de um projeto criado, deve haver a tabela FUNCIONS adicionada em um banco de
dados. A partir deste projeto criaremos o formulário de Consulta.
No Gerenciador de Projetos, escolha Documentos / Formulários / Novo / Novo Formulário.
Segundo Passo
Alterar algumas propriedades do Formulário:
. Caption - Consulta de Funcionários
. AutoCenter - Verdadeiro
. Width - 500
. Height - 380
. Movable - Falso
. BorderStyle- 1
Inserir um objeto Label no topo do form:
. Caption - Cadastro de Funcionários
. FontBold - Verdadeiro
. FontSize - 14
. Alignment - 2 Center
. BackColor - uma cor clara
. ForeColor - uma cor escura
. BorderStyle - 1 Fixed Single
Inserir um objeto Grid abaixo do label:
. DeleteMark para FALSO (não exclui registros na exibição da grade);
. RecordMark para FALSO (não exibe coluna de seleção da linha);
. ReadOnly para VERDADEIRO (não pode alterar os dados na grade);
. ScrollBars para 2 - VERTICAL;
. RecordSourceType - 4 SQL Statement
Inserir um objeto Edit Box abaixo do Grid:
. ReadOnly - Verdadeiro
. FontBold - Verdadeiro
. Se quiser, altere o BackColor e ForeColor
No Método INIT do Formulário, vamos definir o comando SELECT que será executado:
Public vsql
vsql = "select funcionar, nome, salario from funcions "+;
"into cursor consulta"
thisform.grid1.recordsource = vsql
thisform.edit1.value = vsql
Tecle <ctrl> + W para gravar o fonte do método.
Qual é a ordem que queremos o comando SELECT?
Inserir um Option Group abaixo do Edit:
. Na janela Propriedades, selecione Option1 e altere a Caption para "Alfabética"
. Da mesma forma, selecione Option2 e altere a Caption para "Salario"
. Se precisar, altere a largura das bordas através do mouse ou através da propriedade
Width (para OptionGroup1, Option1 e Option2)
. Vamos tentar padronizar o máximo possível para que o código fonte fique no evento
INIT do formulário. Para isso, quando o usuário alterar a ordem de exibição, o
evento CLICK do OptionGroup1 será ativado; e então executaremos o INIT:
Thisform.init
. Agora devemos alterar o init, complementando-o (com a parte em vermelho):
Public vsql
vsql = "select funcionar, nome, salario from funcions "+;
"into cursor consulta"
if thisform.optiongroup1.value = 1
vordem = " order by nome"
else
vordem = " order by salario"
endif
vsql = vsql + vordem
thisform.grid1.recordsource = vsql
thisform.edit1.value = vsql
Quais são os nomes que queremos filtrar no comando SELECT?
Inserir um objeto Label para exibir o tipo de edit que devemos usar:
. Caption - Nome Parcial:
Inserir um Text Box para acessarmos o nome do funcionário:
. Format - !
. Evento InteractiveChange - Thisform.Init
. Alteração no INIT (com a parte em vermelho):
Public vsql
vsql = "select funcionar, nome, salario from funcions "+;
"into cursor consulta"
if thisform.optiongroup1.value = 1
vordem = " order by nome"
else
vordem = " order by salario"
endif
vsql = vsql + vordem
vlike = " "
if .not. empty(thisform.text1.value)
vlike = " where nome like '"+trim(thisform.text1.value)+"%' "
endif
vsql = vsql + vlike
thisform.grid1.recordsource = vsql
thisform.edit1.value = vsql
Para encerrar o form, inserir um objeto do tipo botão (command button):
. Caption - \<Retorna
. Evento Click - Thisform.release
Qual é a faixa de salários que queremos utilizar no BETWEEN?
Inserir um label:
. Caption - Salario de:
Inserir outro label:
. Caption - até
Inserir um Text Box com as seguintes propriedades:
. Format - K
. InputMask - 999.99
. Value - 0
. ToolTipText- 1º valor deve ser menor/igual ao 2º valor
. Evento INIT- Thisform.init
Inserir outro Text Box com as mesmas propriedades acima citadas (observe a estética no
exemplo do form no início deste link. ATENÇÃO: Para que a propriedade TOOLTIPTEXT funcione,
altere a propriedade SHOWTIPS do FORM para VERDADEIRO.
. Alteração no INIT (com a parte em vermelho):
Public vsql
vsql = "select funcionar, nome, salario from funcions "+;
"into cursor consulta"
if thisform.optiongroup1.value = 1
vordem = " order by nome"
else
vordem = " order by salario"
endif
vsql = vsql + vordem
vlike = " "
if .not. empty(thisform.text1.value)
vlike = " where nome like '"+trim(thisform.text1.value)+"%' "
endif
vsql = vsql + vlike
vbetween=" "
if thisform.text2.value + thisform.text3.value > 0
vbetween = " salario between "+str(thisform.text2.value)+;
" and "+str(thisform.text3.value)
if vlike == " "
vsql = vsql + " where " + vbetween
else
vsql = vsql + " and " + vbetween
endif
endif
thisform.grid1.recordsource = vsql
thisform.edit1.value = vsql
Início da Página
Criação do Menu
Após os oito formulários, cada um com um comando SELECT de consulta, estiverem prontos
criaremos um formulário para executar os formulários de consulta. Será nosso Form de Menu.
Primeiro Passo - Criação do Menu
Com o projeto aberto, escolha no Gerenciador de Projetos a opção OUTROS / MENUS / NOVO
MENU. Aparecerá o Criador de Menus.
Nas opções do criador de menus, colocaremos duas opções de menu:
. 1º aviso : \<Consultas
Resultado: SubMenu
Editar : Clique no botão e digite no:
1º aviso - Nome da primeira consulta
Resultado - Comando
No comando- comando para executar o formulário: DO FORM NOME_FORM
2º aviso - Nome da segunda consulta
Resultado - Comando
No comando- comando para executar o formulário: DO FORM NOME_FORM
... e assim por diante. Quando terminar as 8 opções, clique na opção
Nível do Menu e escolha Barra de Menus. Digite o segundo aviso:
. 2º aviso : \<Sair
Resultado : Comando
No comando: comando para encerrar o menu: Nome_do_Formulario_Principal.RELEASE
OBSERVAÇÃO: Se, entre uma opção e outra dentro de um sub-menu, você precisar de colocar
um separador, digite \- no Aviso.
Para testar o menu, clique no botão Visualizar.
Com o Criador de Menu ainda aberto, devemos definir que o menu será executado dentro do
formulário principal. Para isso escolha, na Barra de Menu, EXIBIR / OPÇõES GERAIS / e ative
a opção Formulário de Nível Máximo / OK.
Voltando ao Criador de Menu, devemos gerar o código fonte do menu. Para isso, escolha
na Barra de menu a opção MENU / GERAR / GERAR. Agora podemos encerrar o Criador de Menu.
Criando um Formulário Principal de Menu
O menu está criado e configurado para ser utilizado dentro de um Formulário. Agora cri-
aremos este formulário escolhendo, no Gerenciador de Projetos a opção DOCUMENTOS / FORMULÁ-
RIOS / NOVO / NOVO FORMULÁRIO. Altere as seguintes propriedades:
. Caption - Trabalho de LTP - Consultas SQL
. WindowState - 2 Maximizado
. ShowWindow - 2 Como Formulário de nível superior
. Evento INIT - DO nome_do_seu_menu.MPR WITH THIS, .T.
Grave com <ctrl> + W e execute o formulário (!)
OBSERVAÇÃO: Para que os outros formulários (os de consulta) sejam executados na janela
do formulário principal, é preciso alterar a propriedade SHOWWINDOWS para 1 - Em Formulário
de Nível Superior.
Início da Página