Escolar Documentos
Profissional Documentos
Cultura Documentos
Lazarus Tutor Exerc DB Faq - v16 PDF
Lazarus Tutor Exerc DB Faq - v16 PDF
Introdução
A ferramenta “Lazarus” é uma ferramenta de programação potente e complexa, que vai
ser utilizada como ambiente de desenvolvimento integrado (IDE) para a linguagem Free
Pascal (FPC). A ferramenta em causa é totalmente “cross platform” e está instalada nas
máquinas do CICA, na FEUP nos Sistemas Operativos S.O. Windows e em Linux. Este
tutorial introdutório abordará apenas o IDE do Lazarus e a introdução à “Programação
Visual”, Programação Orientada a Eventos (POE).
Neste tutorial será apresentado o IDE e as principais ideias chave que permitirão ao
aluno posteriormente continuar a aprendizagem com autonomia superior.
Na leitura inicial deste tutorial, não salte passos nem se afaste demasiado dos passos
mencionados. O aluno pode e deve repetir o guião já depois de ter uma percepção mais
completa do funcionamento de conjunto de todos os elementos envolvidos e nessa fase
dedicar-se a uma exploração mais abrangente.
Não se esqueça de consultar sempre que necessário o capítulo final "Listagem de Teclas
e funcionalidades" , na pág. 50.
Bom Trabalho!
Armando Sousa
Índice
Introdução..............................................................................................1
Tutorial .................................................................................................2
Exercícios de Lazarus................................................................................35
Ligação do Lazarus à Base de Dados PGSQL .....................................................39
Alguns Comandos SQL (micro resumo)............................................................45
FAQ Lazarus Sistemas de informação.............................................................47
Listagem de Teclas e funcionalidades.............................................................50
O código que acaba de escrever fica guardado dentro de uma “unit” do FPC
1.8 - Escolha no menu File -> Save All e grave todos os ficheiros numa
directoria criada para o efeito numa qualquer localização no disco local (não
utilize drives em rede pois a criação do executável fica muito lenta). Aceite as
os nomes por omissão (default) em minúsculas.
1.9 - Execute o programa premindo a tecla F9 ou menu Run -> Run e observe
o desenrolar das mensagens na janela de mensagens: primeiro vêm a
mensagem da invocação do compilador do FPC; se não existirem erros, então
virá a mensagem “linking” assinalando o processo de construção do executável
e depois a mensagem de sucesso:
1.10 - O programa que acaba de ser criado é então executado pelo S.O. e
aparece a janela do primeiro programa sob Lazarus:
1.11 - Prima o botão com o rato e observe que o texto associado ao botão se
modificou para:
1.15 - Exercício Livre – Crie e teste uma nova aplicação que execute o
código ShowMessage('Olá Mundo!!!');
Name: CBAllowChange
Note que a Check Box é um controlo standard do S.O. mas a forma exacta da
Check Box e a forma exacta do “visto” ou da “cruz” que aparece para indicar
que esta opção está validada depende de configurações do S.O..
Name: EditMyText
Text: “FEUP”
4.10 - Faça duplo clique em cima da check box para criar e chamar o
procedimento CBAllowChangeChange; este procedimento será chamado
sempre que se clicar sobre a check box; escreva “edit” e prima CTRL+SPACE
para activar a funcionalidade de “Completion”, isto é, completar o código
automaticamente; esta opção abre uma caixa de selecção das possibilidades
de escrita; prima Enter para seleccionar a opção certa (EditMyText) e ver o
texto EditMyText aparecer sem ter de escrever mais do que as primeiras
letras!
4.18 - Faça duplo clique no botão e escreva tal como mostrado de seguida:
5.2 - Escolha File -> Save All e depois Run->Run para executar o projecto
Este código define um procedimento (uma função que não devolve nada) e que
recebe como parâmetro de entrada uma variável com o nome “StringIn” do
tipo string
6.2 - Faça duplo clique em cima da Edit e será conduzido ao código relativo
ao evento EditMyTextChange; escreva “actu” e prima CTRL+SPACE:
6.7 - Exercício Livre: Adicione mais outra Check Box com nome e caption
adequados; altere a aplicação para implementar a funcionalidade de a
actualização ser automática apenas quando a caixa de selecção estiver activa;
quando inactiva é necessário premir o botão para actualizar a form
6.8 - Exercício Livre: Modifique a aplicação de tal forma que a caption da
form seja o texto da edit repetido com um espaço de permeio; para ter
trabalho mínimo, onde deve inserir as modificações ???
7.4 - Com este clique, o cursor será levado até à parte superior da unidade
myunit, onde se define o tipo da Form1 chamado TForm1; é aqui que se lista
os componentes que estão dentro da form:
Este código refere que a Form1 inclui um TButton com nome CBAllowChange
7.5 - Depois do “end” que indica o final da declaração do tipo TForm,
aparece a instanciação da form propriamente dita com “Var Form1 : TForm1”
indicando que Form1 é da classe TForm1.
7.6 - Navegue com o cursor até à linha onde se declara um qualquer dos
procedimentos da form e prima CTRL + Shift + seta_para_baixo para ser
levado até à implementação desse procedimento ou função; prima CTRL +
Shift + seta_para_cima ou CTRL + H para ir de novo para a declaração;
exercite para perceber
Tal como pode ver, uma memo box é uma caixa de texto que permite
múltiplas linhas. A propriedade “Lines” é do tipo TStrings que permite conter
um texto com diversas linhas.
8.5 - Faça duplo clique no Radio Group, acrescente tal como mostrado de
seguida e depois prima CTRL+Shift+Space para ver as listas parâmetros que
esta função aceita:
8.9 - Faça com que o evento OnClick do Radio Group e o OnClick do botão
chamem a função DescribeRadioGroup que se mostra de seguida; note que
como a função é externa à Form1, é necessário acrescentar a noção de que
todos os controlos visuais que temos vindo a manipular estão dentro da Form1
e por isso é necessário indicar Form1.Memo1.Lines.Append:
9.10 - Faça duplo clique em cima do timer que acabou de colocar na form
para ser levado ao evento 'OnTimer' e preencha dentro do procedimento
Timer1Timer o seguinte código com a chamada:
Button1Click(Sender);
Este código será chamado periódicamente pelo timer e chama a rotina de
pressão do botão.
9.11 - Grave e execute - note que a numeração é incrementada todos os
segundos automaticamente e ainda sempre que se premir o botão; note que o
timer desaparece em run-time (mas as funcionalidades estão lá!)
9.12 - Altere agora a propriedade Timer1.interval para 2000
9.13 - Execute para ver que o número é incrementado a cada 2 segundos.
10 - Menu da aplicação
10.1 - Acrescente à aplicação anterior um TMainMenu do separador standard
10.2 - Faça duplo clique em cima dele para abrir o editor de menus:
10.4 - Em cima de File, clique com rato botão da direita e escolha create
sub menu:
10.5 - Clique em New Item2 e mude este caption para “E&xit!” e o nome
deste menu para “MenuFileExit”
10.15 - Nota: é boa prática o menus com acção imediata terem um “!” e os
que abrem caixas de confirmação ou diálogo terem “...”
10.16 - Execute e teste as funcionalidades da aplicação
13.5 - Durante este tempo de debugging, é possível ver o valor das variáveis
passando o cursor do rato por cima dos respectivos nomes das variáveis
13.6 - Prima F7 repetidamente para ver o programa a ser executado passo a
passo e pode inspeccionar as variáveis em causa
13.7 - Retire o break point e prima F9 para executar o resto to programa
normalmente
13.8 - Durante o debugging, não é possível ver a form da aplicação
13.9 - A tecla F7 faz step into e salta para dentro dos procedimentos que
forem sendo chamados
13.10 - A tecla F8 faz step over e entra e sai do procedimento passando para
a linha seguinte do procedimento actual
13.11 - A tecla F9 executa o resto do programa normalmente
13.12 - Consulte o Menu View->Debug Windows->
- fim do tutorial -
○ Altere o programa para que o resultado seja calculado sempre que houver
alterações em qualquer dos edits
○ Dicas:
- Utilize o evento Edit.OnChange
- Verifique que o programa pode gerar erros e mesmo assim continua a
funcionar depois da situação de erro ter sido corrigida
○ Altere o programa para que a conta seja calculada de 5 em 5 segundos
○ Dica: Utilize um TTimer (separador System)
○ Altere o programa para haver uma variável global “rotacao” que define o ângulo
de rotação do marcador; acrescente um botão que acrescenta PI/10 radianos
Dicas:
- As variáveis globais são definidas fora de qualquer função (na zona de
interface ou implementação) e são conhecidas daí para diante no código
- Tenha em atenção o sentido de rotação que se pretende obter e os eixos do
lazarus
- Utilize as funções sin e cos que recebem argumentos em radianos
- O lazarus conhece a constante PI
- Terá de utilizar round ou trunc para converter de real para inteiro
○ Comande a rotação com o teclado: por exemplo '+' e '-' fazem rodar o marcador
numa e noutra direcção
Dicas:
- Ponha a verdadeiro a propriedade Form.KeyPreview
- Utilize o evento Form.OnKeyPress
7 - Cálculo de somatório
fim
2
○ Projecte uma aplicação que calcula soma1= ∑ i em que ini e fim são
i=ini
valores inteiros provenientes de caixas de texto
○ Modifique a aplicação anterior para calcular ou a soma 1 ou a soma 2 (utilize um
fim
radio group) soma2= ∑ −i3
i=ini
- fim exercícios -
SQLQuery
Diferentes utilizações
○ Há 3 formas de aceder a bases de dados sob Lazarus
■ Utilizando um componente DBGrid – visualizações simples
■ Utilizando PQConnection.ExecuteDirect – modificar dados
■ Utilizando SQLQuery.Fields – recolha de dados pesquisados (resposta a
pergunta SQL)
Preparação
○ Abra o gnomo/phppgadmin no browser, altere a sua password para uma password
pouco importante
● Crie uma tabela de teste com dados
● Experimente uma pergunta (query) de teste na janela de SQL do gnomo
(exemplo: select * from anytable)
PQConnection SQLdb
SQLQuery SQLdb
SQLTransaction SQLdb
DataSource DataAccess
DBGrid DataControls
Servidor de BD
(ex.: Gnomo.fe.up.pt)
○ No SQLQuery preencher:
- Transacção - SQLTransaction
- Database - PQConnection
- SQL – preencher com código SQL, exemplo: select * from anytable
- (não preencher o campo DataSource)
Servidor de BD
SQLQuery. Fields
(ex.: Gnomo.fe.up.pt)
○ Para obter os campos e as linhas de resultado de uma pergunta SQL, utilize código
similar ao que se segue:
procedure TForm1.OpenQueryPrintAllFieldsClose;
var
ln, col : integer;
s : string;
begin
SQLQuery.SQL.Text := 'select * from anytable';
PQConnection.Open;
SQLQuery.Open;
for ln := 1 to SQLQuery.RecordCount do begin
SQLQuery.RecNo := ln;
s:='';
for col:=0 to SQLQuery.FieldCount-1 do begin
s:=s+SQLQuery.Fields[col].AsString+'; ';
end;
MemoLog.Append(s);
end;
SQLQuery.Close;
PQConnection.Close;
end;
Exercício Livre
● Este exercício livre compara uma aplicação baseada em Base de Dados com uma
outra que utiliza um ficheiro que é lido para memória
● Considere a empresa QuerLista, S.A. que deseja ver implementada uma lista
telefónica.
● Uma empresa chamada SóLazarus vai desenvolver uma aplicação que utiliza de
uma list-box de Lazarus para armazenar os dados que serão gravados em disco
através do componente TXMLPropStorage; adicionar ListBox.Items nas Session
Properties da Form; se o entender como útil, utilize o caracter especial # para
separar o nome do número de telefone guardando a informação na mesma linha
de uma única ListBox
● Uma outra empresa chamada LazGres vai desenvolver uma aplicação rival fazendo
uso de PostGreSQL e Lazarus
● Ambas as empresas vão utilizar uma listagem com apenas duas colunas: nome e
número de telefone: lista_telef(nome, número_telefone)
● Para cada uma das aplicações rivais, crie uma aplicação gráfica que permita
○ Inserir uma entrada nova
○ Apagar uma determinada entrada
○ Listar toda a lista telefónica
○ Pesquisar através de nome e número_telefone
○ Deve ser possível fazer perguntas de fragmentos de dados, exemplo listar
todos os nomes “Sousa” registados na base de dados
● Comece por projectar a interface gráfica que deve, na medida do possível ser o
mais comum possível a ambas as aplicações
● Compare ambas as aplicações e caracterize a possibilidade de crescimento de
cada uma das bases de dados incluindo para o caso de múltiplos acessos em
simultâneo em diversos computadores diferentes
Manipulação de Tabelas
● CREATE TABLE "table_name"
("column_1" "data_type_for_column_1",
"column_2" "data_type_for_column_2",
... )
■ tipos → varchar e int
■ obs: utilizar nomes de colunas em minúsculas
● DROP TABLE table_name
Manipulação de dados
● INSERT INTO Persons
VALUES('Hussein', 'Saddam', 'White House')
● INSERT INTO table_name
VALUES (value_1, value_2,....)
● INSERT INTO table_name (column1, column2,...)
VALUES (value_1, value_2,....)
● UPDATE table_name
SET column_name_1 = new_value_1, column_name_2 = new_value_2
WHERE column_name = some_value
● DELETE FROM table_name
WHERE column_name = some_value
1. Porquê Lazarus ?
O Lazarus é um programa em rápida evolução, leve e que funciona em diversos sistemas
operativos.
É mais rápido sob linux que sob windows.
Deriva do Pascal que tem mais verificações em run-time que o C e por isso
frequentemente o próprio Pascal assinala erros que doutra forma teriam causado maus
funcionamentos difíceis de explicar.
E é livre, utiliza a licença LGPL, ver http://www.freepascal.org/faq.html
O Lazarus é uma aplicação normal de FreePascal (FPC) que é uma implementação aberta
de uma linguagem próxima do Object Pascal proposto pelo Borland Delphi.
8. Passwords
• Utilizar a propriedade Edit.PasswordChar
9. Comando Strip
• Para reduzir o tamanho de um executável, utilizar o comando “strip”, tipicamente
no path do S.O. Linux; em windows, utilizar o executável, tipicamente em (adaptar
conforme a directoria de instalação e as versões específicas instaladas):
c:\lazarus\fpc\2.2.4\bin\i386-win32\strip.exe nome_do_exe_a_reduzir
- Fim do FAQ -