1 delphi 7 001 109 -...

110
Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 1 Delphi 7.0 Module 1

Upload: others

Post on 05-Apr-2020

35 views

Category:

Documents


0 download

TRANSCRIPT

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 1

Delphi 7.0

Module 1

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 2

O obejtivo deste material é ensinar a programar

com Delphi 7.0 de forma fácil de prática.

Visão Geral

Desde que a primeira versão do Delphi foi lançada, em 1995, esta ferramenta tem se mostrado como a melhor escolha no desenvolvimento para Windows. Numa relação com outros ambientes de programação, podemos dizer que o Delphi tem o poder do C++, e a facilidade do Visual Basic. A principal vantagem do Delphi está na linguagem usada, Object Pascal, que é uma evolução do Pascal padrão. O Pascal surgiu no final dos anos 60 e, até hoje, é usada como uma das primeiras linguagens de programação para estudantes de computação. Em 1984, a Borland lançou o Turbo Pascal, que se firmou como o melhor compilador de Pascal do mercado e, a partir de então, passou a incluir novos recursos nesta linguagem, como Units e Objetos, até a ascensão do Windows, quando foi lançado o Turbo Pascal for Windows e, depois, o Borland Pascal, cuja linguagem é considerada a primeira versão da Object Pascal. Na sua atual versão, usada pelo Delphi, a Object Pascal é uma linguagem poderosa, sólida e respeitada, sem perder sua peculiar facilidade. No Delphi, a criação de aplicativos começa com a montagem de componentes em janelas, como se fosse um programa gráfico, o usuário também pode utilizar componentes desenvolvidos por terceiros ou criar seus próprios componentes. O Delphi vem com todas as ferramentas necessárias para a criação de bancos de dados dBase e Paradox, além de uma versão do Interbase, permitindo a criação de aplicativos com banco de dados sem a necessidade de aquisição de outro programa. O Delphi também tem acesso a bases de dados como Foxpro, Access, InFormix, SYBASE, Oracle, SQL Server e DB2, além de qualquer outro banco de dados para Windows compatível com ODBC.

Baixe o Delphi 7 no link abaixo ( [email protected] ) https://drive.google.com/file/d/0B0nurABfiWpcblJlX2NqNjlrcEE/view

“ A imaginação é mais importante que o conhecimento – Albert Einstein “

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 2

“ INFORMAÇÕES BÁSICAS NECESSÁRIAS “

É difícil programar ? Todos podemos, porém precisamos “querer”. Nem todas as pessoas possuem a tendência e serem programadores, contudo programar com Delphi é super fácil e você também conseguirá. ☺

O que é um programa ? São ordens em forma de código da linguagem Delphi dadas ao computador para que ele realize de forma estruturada e lógica o que lhe for pedido. Ex: Você trabalha, certo ? , ganha um salário “x” , paga seus fornecedores ( supermercado, restaurante etc ) , se não pagá-los não terá o que comer... Um programa tornará suas “rotinas” de trabalho mais práticas. O programador “ordenará” ao programa fazer determinadas tarefas em determinada seqüência lógica. É uma definição sintetizada.

O que é um programador de computador ? Programador de computador é a pessoa que possui conhecimentos de uma linguagem, neste caso Dlephi, de lógica, análize e estruturamento - basicamente. Todos somos “programadores”, todos os dias temos rotinas que devem ser cumpridas com uma determinada seqüência lógica. O programador de computador “digita linhas de código” para criar um programa. Ex: Cadastrar clientes, transportadoras etc

O que é um programa fonte ? Programa é o código fonte digitado/criado pelo programador. O código fonte fica sempre em poder do seu criador “o programador”. Não é comum vender o programa fonte ( o segredo do seu negócio ) para seu cliente - cada caso é um caso ☺ Ex: Programa de Cadastro de Clientes, programa de Cadastro de Fornecedores ( programa ou módulo ).

Quando meu programa está pronto, o que venderei ? No caso do Delphi, quando o programa estiver pronto basta copiar o programa com a terminação “.exe”, as “tabelas” que contem os dados e instalar o BDE na máquina do seu cliente..

O que é um sistema ? Um sistema é composto de vários programas ou arquivos. Minha empresa possui um sistema para “folha de pagamento”. Neste sistema existem vários outros módulos ( programas ) que interagem entre si e as vezes são transparentes para o usuário. Ex: Uma empresa tem um “diretor” ( programa_mestre.exe ), e este possui “vários funcionários” ( módulos, programas ) que trabalham para esta empresa. “ A religião sem a ciência é cega, a ciência sem a religião é inútil – Albert Einstein “

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 3

���� Como criar um programa ou sistema em Delphi? � Digite o código do programador que é composto por ordens escritas com a linguagem Delphi

juntamente com uma determinada lógica dizendo para o programa fazer alguma determinada tarefa.

� Compile ( Ctrl F9 ). O processo de compilação é deve ser realizado para converter o código

fonte ( seu segredo de programador ) de forma que o computador possa interpretá-lo e carregá-lo na memória ram ( mostrar na tela ). O usuário não será capaz de ver o código fonte ( ver o segredo ) do programa, somente usar o programa.

Veja a interpretação de um programa: Você já fez alguma casa, ou não ? Se já, também teve que fazer “um projeto” para esta, também “programou” detalhadamente custos do projeto etc... Isso também pode ser considerado “um programa” ( se usar material de qualidade inferior poderá ter problemas, se usar material de ótima qualidade ... se ... se... lógica ). Tudo dentro de uma seqüência lógica e criteriosa. “Programar” está em nosso meio todos os dias, assim sendo, podemos “todos” nos considerar desenvolvedores, pois, pensamos e analizamos tudo dentro de uma ordem lógica.

���� Origem do nome Delphi = Delfos De acordo com fontes obtidas na Internet... Na antiga Grécia, Delfos foi uma cidade sagrada localizada nas encostas do Monte Parnasso, onde Apolo possuía um templo e ditava oráculos pela boca de Pitia. Escavações realizadas, desde o final do século passado, levaram à descoberta dos templos de Apolo e de Atena, tesouros, obras de arte e estátuas que fazem de Delfos um dos mais ricos da Grécia. Em inglês a palavra Delfos é escrita Delphi. ☺ "Faça as coisas o mais simples que puder, porém não se restrinja às mais simples."

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 4

���� Tela padrão do Delphi

Após ter aberto o Delphi será mostrado um

Formulário padrão, object inspector, aba das

propriedades e eventos.

Para alternar entre o editor de código fonte, pressione F12, para voltar para o

formulário pressione F12. Para alternar para as propriedades e eventos

pressione F11.

Form1 é o nome do formulário

padrão atribuído pelo Delphi.

Aba/paleta de

propriedades.

Paleta de eventos.

Componentes.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 5

���� Tela padrão do Delphi

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 6

���� Introdução ao Delphi 7 Vamos criar um formulário, por um botão e ao clicar neste botão mostar uma mensagem. � Abra o Delphi, será mostrada a tela abaixo. ( File – New – Application ). É padrão ser aberto um formulário com nome Form1.

� Insira um componente Button

no formulário ( Form1 ). O botão que

esta na aba Standard.

� Após inserido botão do tipo ( Button ), dê um clique duplo sobre Button1, será aberta uma tela para definir o evento ( clique ) deste botão, ou seja, ao clicar

no botão será mostrada a mensagem

Meu primeiro - Olá

O que é um Evento ? É uma ação que será executada. Neste exemplo, ao clicar no botão OK ( no evento OnClick ) será mostrada uma mensagem.

Form1 é o nome padrão do Formulário, pode ser mudado na propriedade Name.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 7

� Pressione F9 para “ rodar / executar “ o programa e ver seu resultado.

� Selecione o formulário, clique no Object Inspector (no drop down ), veja o gráfico abaixo, clique em Form1.

" Existem duas coisas infinitas: o Universo e a tolice dos homens – Albert Einstein "

O que é um EVENTO ?

Agora definiremos o evento OnClick do botão Mensagem.

Os programas feitos em Delphi são orientados a eventos. Eventos são ações normalmente geradas pelo

usuário. Existem eventos associados ao formulário e cada componente inserido neste. Neste exemplo, programamos o evento OnClick do botão do tipo Button, ou seja, ao clicar no botão será mostrada uma mensagem.

Após clicar no botão Button1

mostrará mensagem.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 8

� Clique em Form1, ao lado, na propriedade Caption, onde mostra Form1 digite, por exemplo, Cadastro de Clientes. Veja no exemplo abaixo a mudança, ao invés de Form1 mostra Cadastro de Clientes.

� Clique no botão, na propriedade Caption digite Mensagem, role para baixo, na propriedade Name digite But_Mens ( But para indicar que o botão é do tipo Button e Mens é a abreviação de Mensagem ).

Role para baixo, na propriedade Name está escrito Form1, este é o nome do formulário, mude-o para

Clientes_Frm. Adote uma nomeação padrão, digite Clientes e o nome do formulário e Frm indica

que é um Formulário. A nomeação é importantíssima para

facilitar a manutenção do seu sistema.

O que é uma PROPRIEDADE ? Propriedades são características básicas de um componente. Cada

componente Delphi possui uma série de propriedades com um valor default

(padrão). Perceba que no modelo aparecem

algumas das propriedades relativas a um Form, tais como sua altura, fonte dos textos, estilo, cor, tipo de cursor, etc., todas elas com um valor padrão

incluído pelo Delphi.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 9

Veja abaixo como esta o programa fonte.

� Salve unidade ( Unit1 - formulário ) e o projeto.

Veja abaixo código fonte completo ... observe nomes dos objetos ...

Observe com atenção os nomes dos objetos

de acordo com a nomeação que definimos.

Linha Uses contém bibliotecas necessárias para este programa, estas foram automaticamente

incluídas pelo Delphi

Clique no ícone Save All, defina o nome da Unit1 para Clientes.pas, após informe o nome para o projeto –

Intro1.dpr

Nome padrão Unit1, porque o arquivo ainda não foi salvo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 10

�� Rode/execute o programa pressionando na tecla F9 e clique no botão Mensagem , será mostrada uma caixa de mensagem de texto com a mensagem Meu primeiro - Olá

Os 11 passos acima deverão ser seguidos.

Se você quer adotar uma nomeação padrão para os objetos do seu programa fica ao seu critério, posso lhe assegurar que uma boa

nomeação lhe poupará muito tempo na hora da manutenção do seu programa / sistema.

Delphi utiliza “propriedades”, “eventos” e “componentes”

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 11

���� Propriedades – primeira maneira

Na barra de títulos do Delphi, clique em View, clique em Object Inspector ou pressione F11. Através dessa janela que poderemos redefinir as diversas propriedades de qualquer componente do projeto. Perceba que existem duas abas / guias (Tabs): uma para as propriedades ( properties ) e outra para os eventos ( events ). Propriedades são características básicas de um componente. Cada componente Delphi possui uma série de propriedades com um valor default (padrão). Perceba que no modelo aparecem algumas das propriedades relativas a um Form, tais como sua altura, fonte dos textos, estilo, cor, tipo de cursor, etc., todas elas com um valor padrão incluído pelo Delphi. Defina as seguintes propriedades na aba/guia Properties ( propriedades ) do formulário abaixo: Clique em Caption e ao lado digite Exemplo 1, clique na propriedade Name e digite Exemplo_Frm.

A inicial But_ é para definir o tipo de botão que está em uso, ou seja, do tipo Button. Podemos usar outros tipos de botões, Ex: Bitbtn e SpeedButton = Bit_Mens ou Speed_Mens. Cada programador / desenvolvedor adotará um padrão de nomeação dos objetos, que é importantíssimo para manutenção do sistema.

Defina a propriedade Caption do botão digitando Mensagem, role para baixo, na propriedade Name digite But_Mens. Na aba Standard ( barra superior de componentes ), clique no botão Button, posicione o ponteiro do mouse sobre o formulário e clique, será posto um Button ( botão ) no formulário como no exemplo ao lado ).

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 12

Insira um componente Label. Clique em Label, posicione o ponteiro do mouse sobre o formulário e clique, será posto um Label no form.

���� Propriedades – segunda maneira

Na segunda maneira veremos como definir as propriedades via código. Esta forma é mais trabalhosa, porém o programador deverá saber ou conhecer as várias formas para resolver suas situações. Insira um Button ( que está na aba Standard ) , pressione F11, clique na propriedade ( properties ) e escreva ao lado de Caption o texto Mensagem, role barra de rolagem para baixo, clique na propriedade Name e defina o nome But_Mens, insira um Label1

Dê um clique duplo sobre o botão Mensagem, para definir o evento OnClick ( ao clicar executará o evento, a ação ), veja o código abaixo:

Clique em Label1, pressione F11 ( propriedades ), na propriedade Caption digite O Tempo é Sábio, clique em Color e defina a cor clBlue ( cl = Caption, l = label ), clique em +Font ( fonte ), Color = clYellow e Size para 15, clique em +Style, clique em True em fsBold.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 13

Execute o programa pressionando F9, clique no botão Mensagem e veja o resultado.

� Resumindo, as duas maneiras retornarão o mesmo resultado ☺

PROPRIEDADES: Aba / paleta / guia das propriedades ( properties )

EVENTOS: Aba ou paleta de eventos ( EVENTOS )

Clique no botão Mensagem, note no lado esquerdo TODAS as propriedades do botão.

Cada botão ( componente ou objeto ) selecionado terá suas respectibvas PROPRIEDADES.

Cada botão ( componente , ou objeto ) selecionado terá seus

EVENTOS específicos.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 14

COMPONENTES: Aba / guia dos componentes “Standard”

Existem várias paletas / abas / guias com vários componentes. Na aba Standard se encontram os componentes mais comuns. Note que o componente Button está na aba Standard.

Clique na aba Additional e note os respectivos componentes que pertencem a esta aba. Lembre-se, cada componente possui suas próprias “propriedades” e seus respectivos “eventos”.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 15

���� O que são variáveis ?

É um local na memória do computador onde armazenamos temporariamente alguma informação para futura reutilização. Podemos ter diversos tipos de variáveis de memória. O tipo da variável define qual o tipo de informação que iremos armazenar ( Ex: texto, numérica etc )

Tipos de Variáveis

BOOLEAN Tipo lógico que pode assumir somente os valores TRUE ou FALSE e ocupa 1 byte de memória.

BYTE Tipo numérico inteiro, pode assumir valores numa faixa de 0 a 255, ocupa 1 byte.

CHAR Tipo alfa-numérico, pode armazenar um caractere ASCII, ocupa 1 byte.

COMP Tipo numérico real, pode assumir valores na faixa de -9.2.10-18 a 9.2.10+18 , ocupa 8 bytes, pode ter entre 19 e 20 algarismos significativos.

EXTENDED Tipo numérico real, pode assumir valores na faixa de -3,4.10-4932 a +1,1.10+4932, ocupa 10 bytes de memória e tem entre 19 e 20 algarismos significativos.

INTEGER Tipo numérico inteiro, pode assumir valores numa faixa de -32768 a +32767, ocupa 2 byte de memória.

LONGINT Tipo numérico inteiro, pode assumir valores numa faixa de -2147483648 a +2147483647, ocupa 4 bytes de memória.

REAL Tipo numérico real, pode assumir valores na faixa de -2,9.10-39 a +1,7.10+38, ocupa 6 bytes de memória e tem entre 11 e 12 algarismos significativos.

SHORTINT Tipo numérico inteiro, pode assumir valores numa faixa de -128 a +127, ocupa 1byte de memória.

SINGLE Tipo numérico real, pode assumir valores numa faixa de -1,5.10-45 a +3,4.10+38, ocupa 4 bytes de memória, e tem de 7 a 8 algarismos significativos.

WORD Tipo numérico inteiro, pode assumir valores numa faixa de 0 a 65535, ocupa 2bytes de memória.

STRING Tipo alfanumérico, possuindo como conteúdo uma cadeia de caracteres. O número de bytes ocupados na memória varia de 2 a 256, dependendo da quantidade máxima de caracteres definidos para a string. O primeiro byte contém a quantidade real de caracteres da cadeia.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 16

Dê um clique duplo sobre o botão Button1 e no evento OnClick digite as linhas de código que estão na página seguinte:

A palavra Imaginação será armazenada temporariamente

dentro da variável do tipo Texto. O número 13 será armazenado

dentro da variável do tipo Inteira.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 17

���� Mais sobre variáveis

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 18

Outro exemplo usando variáveis de memória:

���� Constantes Tipadas

Na verdade, constantes tipadas são variáveis inicializadas com valor persistente, que podem ser alteradas normalmente, como qualquer variável. A única diferença de sintaxe entre constantes tipadas e simples é que o tipo da constante é indicado explicitamente na declaração. Se uma constante tipada for declarada localmente, ela não será destruída quando o método for encerrado. Para diferenciar das constantes normais, costuma-se declarar estas com letras de caso variável, como abaixo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 19

���� Begin ... End ( Início ... Fim ) Blocos de comandos. Entre um Begin e um End são armazenadas linhas de código.

Dê um clique duplo sobre o botão Button1, será aberto o editor de códigos, no evento OnClick ( significa: ao clicar ), serão mostradas as linhas Procedure... e Begin e End, digite código sempre entre o Begin e End.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 20

���� If ( se ) Condição lógica. “Se” o conteúdo do Edit1 for igual ( = ) ao número “10” será mostrado uma mensagem.

���� If ... else ( Se ... Caso contrário ) Se o conteúdo do Edit1 um não for igual ao número 10 mostra a segunda mensagem

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 21

���� IF

���� Como criar descrição com mais de uma linha ?

Insira um botão do tipo Button1 , clique no Object Inspector, selecione o formulário Form1, dê clique duplo no evento OnCreate e digite o código abaixo:

Quebra linha.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 22

Ou

���� Tags

Para cada botão ou dependendo do tipo de componente haverá um tag.

No Tag 10, ao invés de digitar o valor 10, digitei 11 para provocar o

erro, veja o resultado.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 23

���� Inc() e Dec() Incrementando variáveis e decremetando.

Defina uma variável inteira no início do programa

���� Formatando casas decimais

Variável Valor ( R$ 10,00 )

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 24

���� Confirmação ao fechar o formulário Outra maneira de como pedir confirmação antes de fechar o formulário.

Selecione o formulário, clique na aba Events e selecione o evento OnCloseQuery:

���� Criando Função para mostrar o dia da semana

Digite a função ( function ) abaixo:

Ao clicar no X será solicitado confirmação.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 25

���� Sender Como podemos ver o método BitBtn4 tem um ponteiro para o TObject chamado de Sender ( aquele que envia, remetente, emissor ). Cada evento handler ( manipulador ) terá pelo menos um parâmetro sender. Quando for clicado neste evento ao clicar handler ( BitBtn4Click ) do evento OnClick será chamado. O parâmetro Sender se refere ao controle que é usado para chamar um método.

Outro exemplo

Observe que como

está sendo

chamado o mesmo evento.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 26

���� Subtraindo horas

���� Abrindo e fechando unidade Cd-Rom Insira dois botões Bitbtn e no evento OnClick de cada botão digite o código abaixo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 27

���� Variáveis globais

Veremos como transportar variáveis de um programa para outro, para isso teremos dois formulários com dois campos. No primeiro programa definiremos as variáveis Nome e Idade, e nestas serão armazenados dados para transportar para o formulário 2.

Unit1 ( Programa 1 )

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 28

Unit2 ( Programa 2 )

���� Mensagem com MessageBox e Case Outra forma de iusar o MessageBox juntamente com o Case.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 29

���� Como definir “descrição” para os botões ? Quando o ponteiro do mouse estiver posicionado sobre um determinado ícone, será mostrada uma pequena descrição ou orientação dizendo o que este faz. Clique no formulário, clique no botão Cadastro de Clientes, quando um determinado objeto estiver selecionado serão mostrados pequenos botões pretos em sua volta, indicando que este está selecionado. Clique na aba Properties, selecione a propriedade Hint, no lado direito desta propriedade digite o seguinte texto: “Será aberto outro formulário”, mais abaixo, na propriedade ShowHint, mude o valor para True, pressione a tecla F9 para rodar o programa, posicione o ponteiro do mouse sobre o botão e veja a descrição Será aberto outro formulário.

���� Salvando Unit ( programa )

Clique no ícone Save ( Crtl S - Salvar ),

digite o nome Menu.pas para salvar o formulário

corrente ( o menu do projeto )

Quando o ponteiro do mouse estiver parado sobre o botão será

mostrada descrição.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 30

���� O que são eventos ?

Eventos são acontecimentos provocados por ações do usuário que ocorrem quando um Form está ativo. Nós podemos programar respostas a esses estímulos. Propriedades e Eventos estão disponíveis para todos os componentes visuais do Delphi. Mas quais são as propriedades e eventos que estarão disponíveis? Naturalmente, isso dependerá do tipo de controle que estamos utilizando. Uma vez construído um Form, para acessar as propriedades e eventos correspondentes a um determinado componente, basta clicar sobre ele. Se o componente for o próprio Form, será só clicar sobre qualquer área do Form (área pontilhada). Vamos criar uma situação em nosso projeto para exemplificar o uso dos “eventos”:

Dê um clique duplo no botão Cadastros de Clientes:

Salve o projeto, digite o nome Sis_Madrugadao, pressione F9 para executar / rodar o projeto / programa.

Clique no botão Cadastro de Clientes , clique na aba

Events ( eventos ), note que foi selecionado o evento OnClick, dê um clique

duplo, será aberto o editor de códigos do Delphi.

Após clicar no botão Cadastro de Clientes será alterada a cor do fundo do formulário. O objetivo deste exemplo

é mostrar como funciona o “evento OnClick”.

Estamos usando o evento OnClick, ou seja, quando for clicado no botão “Cadastro de

Clientes “ mudará a cor de fundo do formulário.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 31

Observe atentamente a evolução do código fonte.

���� Como racionar a digitação do código ? Quando o projeto se torna grande e neste são usados vários componentes, variáveis, procedures etc será difícil lembrar todos os nomes do objetos, assim sendo, use os recursos adequadamente para racionar seu trabalho. Entre um Begin e o End, buscaremos as propriedades e métodos de um objeto. Mantenha a tecla “Ctrl” pressionada, após tecle na “barra espaçadora”, será aberta uma tela listando as várias propriedades, constantes etc que estarão disponíveis para o objeto selecionado. Para listar, basta digitar as letras iniciais do objeto que esta no projeto, posicione com o ponteiro do mouse ou setinha do teclado na propriedade que está sendo listada, pressione enter, após digite ponto ( . ), espere alguns segundos, serão listadas mais propriedades, métodos do segundo objeto selecionado, selecione o que desejar e pressione enter, no final da linha digite ponto e virgula ( ; )

Bibliotecas que foram inseridas automaticamente pelo Delphi após ter inserido

os botões. StdCtrls e Buttons.

Mantenha pressionada a tecla Ctrl , após pressione barra espaçadora, serão listadas para serem escolhidas as propriedades ou métodos daquele respectivo objeto.

Ao clicar no botão Clientes o fundo

do formulário será pintado de azul.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 32

Formulário_Menu.Cor := recebe_cor

���� Disparando o mesmo evento Executa a mensagem que foi definida no botão 1, disparando o mesmo evento nos outro botões.

Digite dois pontos ( : ) e o sinal de igual ( = ), após pressione Ctrl e barra de espaço para listar as propriedades etc

No final da linha digite ponto e virgula ( ; )

Após digitado ponto ( . ) serão listadas outras as propriedades ou funções do formulário em uso.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 33

���� O que compõe um projeto ?

Um projeto no Delphi é basicamente composto de vários formulários de entrada de dados e relatórios. Quando o projeto é compilado, será gerado um arquivo / programa com a terminação .exe ( executável ), ex: Sis_Aula.exe, e dentro deste estarão todos os formulários, relatórios do sistema..., Clientes, Fornecedores, Transportadoras etc

Sis_aula.exe é o nome do projeto, este é composto por “quatro” unidades.

���� Quais são os arquivos do seu projeto que devem ser copiados ? Quando o projeto estiver pronto e desejar instalá-lo em outra máquina proceda da seguinte maneira:

1. Instale o BDE, está no cd Delphi ou crie os discos de instalação que já conterá o BDE. 2. Copie o arquivo Sis_Aula ( .exe ) 3. Copie todas as tabelas que serão utilizadas no projeto.

Se o projeto não possuir tabelas, basta apenas copiar o arquivo sis_aula.exe ( .exe ) ☺

Módulo 1

CLIENTES clientes.pas

Módulo 2

FORNECEDORES fornecedores.pas

Módulo 3

TRANSPORTA-

DORAS

transportadoras.pas

Sis_Aula.exe

MÓDULO PRINCIPAL (menu)

Menu.pas

Project1.dpr

Unit3.pas Unit4.pas Unit2.pas

Unit1.pas

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 34

���� Arquivos que compõe uma aplicação.

Extensão Definição Função

.dpr Arquivo do Projeto Código fonte em Pascal do arquivo principal do projeto. Lista todos os formulários e units no projeto, e contém código de inicialização da aplicação. Criado quando o projeto é salvo.

.cfg Arquivo do Projeto

Apesar de ter a extensão *.cfg este é um arquivo texto. Guarda diversas opções do compilador. Discutir estas opções está fora do escopo deste curso. Para a maior parte dos casos as opções default funcionam perfeitamente.

.dof Arquivo do Projeto

Apesar de ter a extensão *.dof este é um arquivo texto. Guarda diversas opções do projeto. Estas opções você configura usando a caixa de diálogo Project Options que vamos ver mais à frente.

.pas Código fonte da Unit ( Object Pascal)

Um arquivo .PAS é gerado por cada formulário que o projeto contém. Seu projeto pode conter um ou mais arquivos .PAS associados com algum formulário. Contem todas as declarações e procedimentos incluindo eventos de um formulário.

.dfm Arquivo gráfico do formulário

Arquivo binário que contém as propriedades do desenho de um formulário contido em um projeto. Um .DFM é gerado em companhia de um arquivo .PAS para cada formulário do projeto.

.res Arquivo de Recursos do Compilador

Arquivo binário que contém o ícone, mensagens da aplicação e outros recursos usados pelo projeto.

.opt Arquivo de opções do projeto

Arquivo texto que contém a situação corrente das opções do projeto. Gerado com o primeiro salvamento e atualizado em subsequentes alterações feitas para as opções do projeto.

.~dp Arquivo de Backup do Projeto

Gerado quando o projeto é salvo pela segunda vez.

.~pa Arquivo de Backup da Unit

Se um .PAS é alterado, este arquivo é gerado.

.~df Backup do Arquivo gráfico do formulário

Se você abrir um .DFM no editor de código e fizer alguma alteração, este arquivo é gerando quando você salva o arquivo.

.dsk Situação da Área de Trabalho

Este arquivo armazena informações sobre a situação da área de trabalho especifica para o projeto em opções de ambiente( Options Environment).

Obs.: .~DF, .~PA , .~DP são arquivos de backup( Menu Options, Enviroment, Guia Editor Display, Caixa de Grupo Display and file options, opção Create Backup Files, desativa o seu salvamento). Devido a grande quantidade de arquivos de uma aplicação, cada projeto deve ser montado em um diretório específico.

Arquivos Gerados pela Compilação

Extensão Definição Função

.exe Arquivo compilado executável

Este é um arquivo executável distribuivel de sua aplicação. Este arquivo incorpora todos os arquivos .DCU gerados quando sua aplicação é compilada. O Arquivo .DCU não é necessário distribuir em sua aplicação.

.dcu Código objeto da Unit A compilação cria um arquivo .DCU para cada .PAS no projeto.

Obs: Estes arquivos podem ser apagados para economizar espaço em disco. " Quando você está namorando uma bela garota, uma hora parece um segundo. Quando você se senta

numa brasa viva, um segundo parece uma hora. Isso é relatividade. – Albert Einstein "

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 35

���� Cláusulas e bibliotecas de uma “unit”.

Neste arquivo está escrito o código de criação da aplicação e seus formulários. O arquivo Project tem apenas uma seção. Esta seção é formada pelo seguinte código: Program Define o Projeto. Uses Cláusula que inicia uma lista de outras unidades. Forms É a unidade do Delphi que define a forma e os componentes do aplicativo. In A clausula indica ao compilador onde encontrar o arquivo Unit. Unit1 A unidade que você criou. {$R *.RES} Diretiva compiladora que inclui o arquivo de recursos. Veja abaixo como fica o Project quando é aberto um novo projeto:

Código fonte do arquivo Unit (.PAS)

Nesta divisória serão escritos os códigos dos seus respectivos forms (Unit1 = Form1). Aqui serão definidos os códigos de cada procedimento dos componentes que você colocar no form.

Seção Unit

Declara o nome da unit.

Seção Uses

Contém as units acessadas por este arquivo.

Seção Interface

Nesta seção estão as declarações de constantes, tipos de variáveis, funções e procedures gerais da Unit/Form. As declarações desta seção são visíveis por qualquer Unit. Esta seção é formada pelo seguinte código:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 36

Interface : Palavra que inicia a seção; Uses : Cláusula que inicia uma lista de outras unidades compiladas (units) em que se baseia: SysUtils Utilitários do sistema (strings, data/hora, gerar arquivos).

WinProcs Acesso a GDI, USER e KERNEL do Windows.

Wintypes Tipos de dados e valores constantes.

Messages Constantes com os números das mensagens do Windows e tipos de dados das Mensagens.

Classes Elementos de baixo nível do sistema de componentes. Graphics Elementos gráficos. Controls Elementos de nível médio do sistema de componentes.

Forms Componentes de forma e componentes invisíveis de aplicativos. Dialogs Componentes de diálogo comuns.

Seção Type

Declara os tipos definidos pelo usuário. Subseções: Private, declarações privativas da Unit. Public declarações publicas da Unit.

Seção Var Declara as variáveis privadas utilizadas.

Seção Implementation Contém os corpos das funções e procedures declaradas nas seções Interface e Type. Nesta seção também estão definidos todos os procedimentos dos componentes que estão incluídos no Form. As declarações desta seção são visíveis apenas por ela mesma. Esta seção é formada pelo seguinte código: {$R*.DFM} Diretiva compiladora que inclui toda a interface, propriedades da forma e componentes do arquivo *.DFM {$S+} Diretiva compiladora que ativa verificação de pilha. Seção uses adicional Serve para declarar Units que ativam esta seção.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 37

Initialization Nesta seção, que é opcional, pode ser definido um código para proceder as tarefas de inicialização da Unit quando o programa começa. Ela consiste na palavra reservada initialization seguida por uma ou mais declarações para serem executadas em ordem.

���� O que são métodos ?

São procedures ou funções embutidas nos componentes e formulários, previamente definidas pelo Delphi. Alguns métodos são descritos a seguir: • Show Mostra um formulário; • Hide Esconde um formulário mais não o descarrega; • Print Imprime um formulário na impressora; • SetFocus Estabelece o foco para um formulário ou componente; • BringtoFront Envia para frente.

Adiante veremos exemplos práticos exemplificando “métodos”

" Grandes almas sempre encontraram forte oposição de mentes medíocres – Albert Einstein "

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 38

���� O que são “componentes” ?

São elementos que já estão no Delphi prontos para serem utilizados e o programador definirá suas propriedades e eventos de acordo com sua necessidade ( o que são propriedades e eventos, veremos adiante ☺ ). Vamos inserir alguns botões e após verificar a alteração que o Delphi fará no código fonte.

Adicione no formulário corrente três componentes Bitbtn ( aba Additional )

Altere as propriedade Caption para Cadastro de Clientes, que será o texto exibido no botão, altere a

propriedade Name de BitBtn para Bit_Cad_Clientes.

Sugiro Bit_ para identificar o tipo de botão/componente que está sendo usado, como já falei anteriormente, cada programador adotará um padrão

de nomeação para melhor identificação dos objetos.

Após digitar o Caption com o conteúdo Cadastro de Clientes,

altere a propriedade Width para 129, para não truncar o texto do botão.

Abas de componentes. Aba Additional

Para inserir um botão BitBtn: Clique no botão OK e após clique no

formulário. Poderá ser definido um ícone para o botão na propriedade Glyph.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 39

Eventos: Os programas feitos em Delphi são orientados a eventos. Eventos são ações normalmente geradas pelo usuário. Ex.: Clicar no mouse ou movê-lo, pressionar uma tecla etc. Os eventos podem ser também gerados pelo windows. Existem eventos associados ao formulário e a cada componente inserido neste. Exemplos: Evento que está ligado formulário, OnCreate, que ocorre quando mostramos o formulário na tela. Ao componente botão está ligado o evento OnClick, que ocorre quando damos um click com o mouse sobre o botão.

Eventos comuns ao formulário e aos componentes. Alguns eventos ligados tanto ao formulário quanto aos componentes estão listados a seguir. • OnClick ocorre quando o usuário clica o objeto. • OndblClick ocorre quando o usuário da um duplo clique. • OnKeyDown ocorre quando o usuário pressiona uma tecla enquanto o objeto tem foco. • OnKeyUp ocorre quando o usuário solta uma tecla enquanto o objeto tem o foco. • OnKeyPress ocorre quando usuário da um clique numa tecla ANSI. • OnMouseDown ocorre quando o usuário pressiona o botão do mouse. • OnMouseUp ocorre quando o usuário solta o botão do mouse. • OnMouseMove ocorre quando o usuário move o ponteiro do mouse.

Após nomear uma propriedade, o Delphi fará também a modificação interna do

código fonte de BitBtn1 para Bit_Cad_Clientes.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 40

Rotinas que Respondem a Eventos Cada evento gera uma procedure, aonde você deve inserir as linhas de código que envolve este evento. Por exemplo, o evento OnClick, que é gerado ao clicarmos em um botão chamado Bit_Sair, cria a procedure:

Onde Tform1 é o objeto Tform que contém o botão Bit_Sair, e Sender é um objeto Tobject que representa o componente que deu origem ao evento. Se você quiser inserir uma rotina que trate um determinado evento de um componente, faça o seguinte:

• clique sobre o componente; • no Object Inspector, seleciona a página Events; • dê um duplo clique sobre o evento para o qual quer inserir o código; • entre no editor de código e escreva as linhas de código.

Exemplo:

Obs: Escreva seu código entre o begin e o end, se desejar retirar o evento e o componente, retire primeiro os eventos do componente removendo somente o código que você digitou, após o componente; o resto dos procedimentos o DELPHI removerá para você.

" A palavra progresso não terá sentido enquanto houver crianças infelizes – Albert Einstein "

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 41

���� Como inserir “mais formulários” no projeto ?

Salve a unidade ( form ) com o nome de Clientes.pas, repita o processo da página anterior criando um formulário para Fornecedores.pas e Transportadoras.pas, também defina as propriedades Caption e Name de cada um destes formulários. Até o momento nosso projeto possui “quatro” formulários. Pressione F12 para alternar entre os formulários e o código fonte.

Clique no ícone onde está apontando o bolão, será

aberto um novo formulário.

Defina as duas propriedades básicas do formulário: Caption e Name.

Caption = Cadastro de Clientes Name = Clientes_Frm

Insira um componente Label

( aba Standard ) e na propriedade Caption digite Clientes.

Cada programador adotará seu padrão de nomeação, digitei _Frm no final do nome para indicar que é

um Formulário.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 42

���� Como criar um menu ? Criando um menu muito fácil. Insira um formulário e três botões do tipo Bitbtn – veja baixo:

Clique duplo sobre o botão “Cadastro de Clientes”, após clique em File, Use Unit, selecione o formulário Clientes e clique OK. Para abrir todos os formulários arraste o mouse marcando a lista da caixa abaixo e clique OK.

Veja os vários formulários ( telas ) que estão em uso – Menu – Fornecedores – Transportadoras e

Clientes

Lista os objetos e uses utilizados no projeto

corrente.

Clique duplo sobre Label1, o cursor será imediatamente posicionado no

objeto.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 43

Repita este processo para os botões Fornecedores e Transportadoras.

Com o ShowModal os controles ( foco ) são transferidos unicamente para tela Clientes, se for clicado no botão Fornecedores, você ouvirá apenas um bip e não terá acesso.

O Delphi não está conseguindo identificar o formulário Clientes, para que isto ocorra é preciso

clicar em File ( canto superior esquerdo do menu ), clique em Use unit e selecione a unit Clientes para

incluir no projeto atual.

Agora o formulário Clientes_Frm foi

reconhecido pela lista Ctrl + barra espaço.

ShowModal mostrará o formulário Clientes_Frm.

Pode ser usado ShowModal ou Show.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 44

Com o Show, poderá ser clicado no formulário Menu ou em Clientes. Vamos definir um ícone para o botão “Cadastro de Clientes”

Clique nos três pontinhos para selecionar um ícone. Abaixo, será

aberta uma tela pedindo para informar o caminho onde estão armazenados os

arquivos do tipo .bmp

Clique para mostrar o caminho onde

estão os arquivos do tipo .bmp

Após clicado em Abrir , clique no botão OK.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 45

���� Como definir um ícone para o formulário corrente ?

O ícone será exibido no canto superior esquerdo do formulário.

���� Como remover “barra de título e bordas” do formulário ? É uma maneira de remover a barra de título e bordas do formulário via programação.

Outra maneira de inserir um ícone padrão é a propriedade Kind do componente

Bitbtn. Porém, após selecionado o ícone, o Delphi mudará a propriedade Caption de Fornecedores para Ignore que é o caption padrão, então digite novamente o

Caption Fornecedores.

Ícone definido.

Clique no formulário corrente, selecione a propriedade Icon do formulário, clique nos três pontinhos [...], será aberta uma tela, clique no botão Load, informe o caminho onde estão os arquivos do tipo ícone ( .ico ), clique em abrir, escolha o

arquivo do tipo .ico e clique ok

Com “barra de título.

Sem “barra de título”.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 46

���� Qual função do Database Desktop ?

DATABASE DESKTOP 7

É um utilitário onde será criado a base de dados

(tabelas - nomes dos campos, tamanhos dos campos, índices etc).

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 47

Introdução O BDE é um núcleo de Banco de Dados que fornece a capacidade de acesso a banco de dados para os softwares Delphi, Paradox, dBase e C++, oferecendo um grande conjunto de características previamente testadas para auxiliar desenvolvedores de aplicações Cliente-Servidor. Além de fornecer utilitários para acessar bancos de dados de maneira compartilhada, o BDE inclui um conjunto de fontes de dados para acessar bases Paradox, dBase e arquivos texto. Também é possível acessar qualquer banco de dados padrão ODBC ou, através de SQL Links, acessar diretamente Interbase, Oracle, Sybase e MS-SQL Server. O BDE também é composto de um conjunto de funções que compõe uma API (Interface para Programação de Aplicações) que permite os desenvolvedores acessarem diretamente esses bancos de dados.

"A vida é maravilhosa se não se tem medo dela - Charles Chaplin “ Criação do Banco de Dados Para criar um banco de dados novo, normalmente, é necessário dispor de alguma ferramenta do próprio banco de dados, como o Access, mas se a base de dados for Paradox, ou dBase, você pode usar o Database Desktop, um utilitário que vem com o Delphi e permite a criação desses tipos de bancos de dados. Database Desktop

Fornece uma interface simples e completa para configuração, definição e manipulação de tabelas de bancos de dados Paradox e dBase. Além disso na Opção Tools/Alias Manager você pode configurar seu banco de dados, como será lembrado logo adiante.

Tabelas Paradox

Para criar tabelas Paradox, siga os passos abaixo. Você deve salvar as tabelas de um mesmo banco de dados na mesma pasta, pois o Paradox trata a pasta onde estão as tabelas como sendo o banco de dados. • Clique em File/New/Table • Escolha o tipo da nova tabela, Paradox 7 • Aparece uma janela para que você defina a estrutura de campos, índices e demais

opções necessárias na criação da tabela • Em Field Name, você escolhe o nome do campo, com até 25 caracteres • Em Type, o Tipo do campo, com a barra de espaço ou o botão direito do mouse

você pode escolher o tipo a partir de uma lista • Size é o tamanho do campo, usado somente em alguns tipos de campos • Key especifica os campos que farão parte da chave primária, que não pode se

repetir e deve ser composta pelos primeiros campos da tabela

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 48

Table Properties Em Table Properties você define os vários aspectos de configuração da tabela. Muitas dessas opções podem ser implementadas no Delphi e vários programadores preferem não usá-las no Database Desktop.

Opção Descrição Validity Checks Validações para os campos, como obrigatoriedade, valor mínimo e máximo

Table Lookup Indica que o valor atribuído a um determinado campo tem que estar gravado em outra tabela

Secondary Indexes Cria índices secundários

Referential Integrity Cria integridade referencial, geralmente utilizada em relacionamentos de 1 para N.

Password Security Permite a criação de senhas, protegendo a tabela de acesso não autorizado

Table Language Especificar o driver de língua utilizado pela tabela, geralmente é o Pdox ANSI Intl850

Dependent Tables Mostra todas as tabela dependentes através da integridade referencial

Tipos de Campos Os principais tipos de campos são mostrados abaixo, mas existem outros além desses. Os tamanhos marcados com asterisco indicam que o campo pode guardar tamanhos maiores que os informados, o que ultrapassar o tamanho será guardado em um arquivo externo com a extensão MB.

Tipo Descrição Faixa Tamanho A Alfanumérico 1-255

N Numérico ± 10 308

$ Monetário

S Short Integer ± 32767

I Long Integer ± 2147483648

D Data

T Hora

@ Data e Hora de modificação

M Memo 1-240*

G Gráfico 1-240*

L Lógico True/False

+ Autoincremental 1-2147483648

Configuração Para configurar o acesso a um banco de dados, você tem várias opções, criar um Alias, usar o componente TDatabase ou os dois juntos.

Aliases Um Alias é um nome lógico, um atalho para um banco de dados. Todo o trabalho do Delphi com um banco de dados pode ser feito baseado no Alias, de forma que para mudar de banco de dados, só é necessário mudar o Alias. Para criar um Alias você pode usar Database Explorer, o BDE Administrator ou o próprio Database Desktop.

Database Explorer Pode aparecer com os nomes Database Explorer ou SQL Explorer. Nele você pode manipular os Aliases, navegar pelas estruturas dos bancos de dados, alterar os dados das tabelas e executar comandos SQL. Para criar um Alias selecione o item Databases, clique em Object/New, escolha o tipo do banco de dados, ou Standard para dBase, Paradox e arquivos texto, depois digite um nome do Alias, esse nome será usado pelo Delphi quando você quiser acessar o banco de dados, finalmente defina as propriedades do banco de dados na seção Definition, cada banco de dados terá suas próprias definições.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 49

BDE Administrator Com o BDE Administrator você pode alterar a configuração da BDE, por exemplo em Configuration/System/Init você tem a propriedade Local Share que deve ser setada para True, quando você quiser que a base de dados seja compartilhada em uma rede. Além disso, você pode criar Aliases, como no Database Explorer. TDatabase

Esse componente permite a manipulação de um banco de dados, através de um Alias da BDE ou da criação de um Alias local, somente visível dentro da aplicação, esse componente também permite o gerenciamento de transações, garantindo uma integridade maior no projeto. Por essas e outras razões o uso do componente Database é altamente recomendado como opção para criação de Aliases.

Propriedades Descrição AliasName Nome do Alias do banco de dados, usado quando você criar um Alias da BDE

Connected Define se a conexão com o banco de dados está ativa

DatabaseName Nome do Alias local a ser usado pelos outros componentes do Delphi

DataSetCount Número de DataSets (Tabelas) abertos no banco de dados

DataSets Lista com os DataSets abertos

DriverName Driver usado para criar um Alias local, automaticamente cancela a propriedade AliasName

InTransaction Define se o Database está em transação

KeepConnection Define se a conexão com o banco de dados será mantida, mesmo sem DataSets abertos

LoginPrompt Define se será mostrado o quadro de login padrão da BDE

Params Parâmetros do banco de dados, com itens semelhantes à seção Definition do Database Explorer

TransIsolation Nível de isolamento da transação, define como uma transação irá enxergar outra

Métodos Descrição

Close Encerra a conexão com o banco de dados, todos os DataSets serão fechados

CloseDataSets Fecha todos os DataSets abertos, mas a conexão não é encerrada

Commit Grava alterações feitas durante a transação

Open Abre a conexão com o banco de dados

Rollback Anula todas as alterações feitas durante a transação

StartTransaction Inicia uma transação

Eventos Descrição OnLogin Evento usado quando você quiser escrever seu próprio método de conexão com o banco de dados

Para acessar uma base de dados Access, você poderia usar os valores mostrados na descrição textual a seguir. AliasName = 'Clientes' DatabaseName = 'Dados' LoginPrompt = False KeepConnection = True Params.Strings = ( 'DATABASE NAME=C:\Meus Documentos\Clientes.mdb' 'USER NAME = Fritz' 'OPEN MODE = READ/WRITE' 'LANGDRIVER = intl850' 'PASSWORD = secreto5')

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 50

Para ajudar a preencher os parâmetros de um Database, clique duas vezes sobre o componente e clique em Defaults, todos os parâmetros defaults serão apresentados. Para acessar uma base Paradox, use as propriedades abaixo, note que para o Paradox, a única informação realmente significante é o Path, a pasta onde estão as tabelas.

AliasName = 'DBDEMOS' DatabaseName = 'Dados' LoginPrompt = False KeepConnection = True Params.Strings = ('PATH=d:\Borland\Delphi 5\Demos\Data' 'ENABLE BCD = FALSE' 'DEFAULT DRIVER = PARADOX') Após a criação do Alias da BDE ou do Alias local, usando o componente TDatabase, o banco de dados está configurado e pronto para ser usado.

Database Form Wizard

Após a configuração do banco de dados, a maneira mais rápida, de se fazer uma janela de manutenção de dados é através do Form Wizard no menu Database. Ao chegar no Wizard são feitas uma série de perguntas que podem resultar em uma janela simples ou Mestre/Detalhe. O acesso ao banco de dados pode ser feito através de componentes TTable ou através de SQL, com o componente TQuery, usaremos o componente TTable. Todos os campos selecionados aparecem na janela permitindo entrada de dados através de componentes do tipo TDBEdit. Cada DBEdit recebe um Label baseado no nome do campo na tabela selecionada. Na Janela é incluído também um componente para permitir a navegação e a manutenção dos dados, um DBNavigator. O componente utilizado para fazer a ligação entre os componentes visuais e o TTable é um TDataSource. Geralmente os componentes TTable e TDataSource são inseridos em DataModules, que são a base para a criação de classes de dados. Sempre Após usar o Wizard, lembre-se de mudar os nomes dos componentes, para que fiquem mais claros.

Form Passo a Passo

O diagrama abaixo mostra como o Wizard fez a ligação entre os componentes, onde os quadrados são componentes e as elipses, propriedades.

DataSet

DatabaseName

TDatabase

TDataSource

TTable

DatabaseName

TDBEdit

DataSource

DB

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 51

Para concluir, acompanhe abaixo os passos realizados pelo Wizard e tente você mesmo criar seu próprio Form. • Inclua um novo DataModule • Adicione ao DataModule um Table e um DataSource • No Table Coloque em DatabaseName o nome do Alias criado pela propriedade

DatabaseName do Database e em TableName, o nome da tabela • No evento OnCreate do DataModule, chame o método Open do componente Table • No DataSource coloque em DataSet o nome do componente TTable • No Form, para definir a interface com o usuário, use os componentes de controle

de dados que estão na página DataControls, basicamente DBEdit e DBNavigator • Para poder acessar os dados, coloque a Unit onde está o DataModule no uses da

Unit do Form • Em todos os componentes DataControls, escolha na propriedade DataSource, o

componente DataSource criado no DataModule • Em alguns controles, como no DBEdit, deve ser especificado também o campo da

tabela, na propriedade DataField Seguindo esses passos, o Form estará pronto para usar. Mais adiante, veremos uma forma mais rápida de se criar um Form de manutenção, mas o mais importante é compreender os passos mostrados acima, com todos os componentes e propriedades envolvidas. Vamos detalhar agora cada um dos componentes envolvidos nesse processo, para compreendermos melhor o que está acontecendo. TDataModule Um DataModule é como se fosse um Form invisível, onde iremos inserir os componentes de acesso a dados, como o Table e o Datasource. Por serem também classes, os DataModules permitem a fácil implementação de modelos de objetos, permitindo herança, criação de métodos, dentre outros aspectos. Para inserir um DataModule em um projeto, escolha New DataModule do menu File. Os DataModules não gastam recursos do sistema, servem apenas para conter os componentes de acesso a dados e criar, assim, uma classe persistente.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 52

TTable Componente usado para acessar uma tabela em um banco de dados. Esse componente é o mais importante quando acessamos bases de dados Desktop. Muitas dos itens mostrados abaixo estão definidos na classe TDataSet, ancestral do TTable.

Propriedades Descrição Active Define se a tabela esta aberta ou fechada.

BOF Informa se está no início da tabela.

CanModify Define se a aplicação pode inserir, deletar ou alterar registros.

DatabaseName Nome do banco de dados onde está a tabela, deve ser escolhido um Alias, que pode ser local.

EOF Informa se está no fim da tabela.

Exclusive Define se a tabela pode ser compartilhada por outro usuário.

FieldCount Número de campos da tabela.

FieldDefs Lista com a Definição dos campos da tabela.

Fields Lista de objetos do tipo TField, que representam os campos da tabela.

Filter String com uma condição de filtragem.

Filtered Define se a tabela é filtrada.

IndexFieldNames Nome dos campo de índice, usados para ordenar os registros da tabela.

IndexName Nome do índice atual, vazia quando o índice for a chave primária.

IndexDefs Lista com a definição dos índices.

MasterFields Campos usados no relacionamento com a tabela mestre.

MasterSource DataSource da tabela mestre em uma relação Mestre/Detalhe.

Modified Define se o registro atual foi modificado.

ReadOnly Define se a tabela é somente para leitura.

RecNo Número do registro atual.

RecordCount Número de registros.

State Estado da tabela.

TableName Nome da tabela.

TableType Tipo da tabela.

Método Descrição

AddIndex Cria um novo índice, a tabela deve ser exclusiva.

Append Entra em modo de inserção e, ao gravar, o registro será colocado no fim do arquivo.

AppendRecord Insere um registro no final do arquivo através de código.

Cancel Cancela as alterações feitas no registro atual.

Close Fecha a tabela.

CreateTable Cria uma tabela, depende de FieldDefs e IndexDefs.

Delete Exclui o registro corrente.

DeleteIndex Exclui um índice.

DeleteTable Exclui a tabela.

DisableControls Desabilita a atualização dos controles visuais.

Edit Permite a alteração dos campos do registro atual.

EmptyTable Apaga todos os registro da tabela, para isso a tabela não pode esta sendo compartilhada.

EnableControls Habilita os controles visuais.

FieldByName Acessa um campo, do tipo TField, pelo nome.

FindKey Procura o registro com os valores exatos aos dos parâmetros nos campos do índice atual.

FindNearest Procura o registro com os valores mais aproximados aos dos parâmetros nos índices.

First Move para o primeiro registro.

Insert Entra em modo de inserção de um novo registro na posição atual.

InsertRecord Adiciona um novo registro, já com os dados, na posição atual.

IsEmpty Define se a tabela está vazia.

Last Move para o último registro.

Locate Procura um registro, usando ou não índices, de acordo com a disponibilidade.

LockTable Trava a tabela.

Lookup Procura um registro e retorna valores dos campos deste.

MoveBy Move um número específico de registros.

Next Move para o próximo registro.

Open Abre a tabela.

Post Grava as alterações no registro atual.

Prior Move para o primeiro registro.

Refresh Atualiza a tabela com os dados já gravados.

RenameTable Renomeia a tabela.

UnlockTable Destrava a tabela.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 53

Evento Descrição AfterCancel Após do método Cancel.

AfterClose Após o fechamento da tabela.

AfterDelete Após do método Delete.

AfterEdit Após do método Edit.

AfterInsert Após do método Insert.

AfterOpen Após do método Open.

AfterPost Após do método Post.

AfterScroll Após mudar de registro.

BeforeCancel Antes do método Cancel.

BeforeClose Antes do fechamento da tabela.

BeforeDelete Antes do método Delete.

BeforeEdit Antes do método Edit.

BeforeInsert Antes do método Insert.

BeforeOpen Antes do método Open.

BeforePost Antes do método Post.

BeforeScroll Antes de mudar o registro.

OnCalcFields Evento usado para calcular os valores dos campos calculados.

OnDeleteError Quando ocorre um erro ao chamar o método Delete.

OnEditError Quando ocorre um erro ao chamar o método Edit.

OnFilterRecord Evento usado com filtragem variável.

OnNewRecord Quando a tabela entra em modo de inserção, não deixa Modified igual a True.

OnPostError Quando ocorre um erro ao chamar o método Post.

Filtros Usando o Filter, você pode filtrar os registro de uma tabela usando uma expressão lógica, como nos exemplos abaixo. Para tornar um filtro ativo, basta colocar Filtered igual a True.

Contudo, se a condição de filtragem for muito variável, é preferível usar um código como o mostrado abaixo no evento OnFilterRecord da Table, para fazer uma filtragem dinâmica, com a propriedade Filter vazia e Filtered igual a True.

Ao filtrar uma tabela, a propriedade RecordCount da Table, só mostra o número de registros que satisfazem ao filtro, como se os outros registros nao existissem.

Alterando Registros Para alterar registros em código, colocamos a tabela em modo de edição, alteramos o valor dos campos e gravamos as alterações, se for necessário.

Inserindo Registros Para inserir registros em código você pode usar os métodos AppendRecord e InsertRecord, caso você não precise de algum campo, mesmo assim ele deve ser informado com o valor Null.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 54

Localizando Registros Para localizar registros você pode usar vários métodos, mas o melhor deles é o Locate, no exemplo abaixo é feita uma pesquisa exata.

Você também pode fazer uma pesquisa parcial e/ou sem sensitividade de caso usando o terceiro parâmetro, que é um conjunto de opções.

Se você precisar fazer uma pesquisa por mais de um campo, separe os nomes dos campos por ponto e vírgula e use a função VarArrayOf para criar um array com os valores que você quer procurar.

Caso os campos pesquisados sejam indexados, a pesquisa será muito mais eficiente, senão será criado um filtro temporário da BDE para localizar os registros.

Indexação

A indexação é usada para ordenar os registros da tabela, para isso você deve escolher os campos pelos quais você quer ordenar na propriedade IndexFieldNames, inclusive em código, como mostrado abaixo, todos campos devem ser indexados e separados por ponto e vírgula.

Estados da Tabela A propriedade State determina o estado das tabelas, os principais estados são demonstrados abaixo, veja como os métodos mudam o estado.

Post

Cancel

Delete

Post

Cancel

Delete

dsInsert dsBrowse dsEdit

Insert

Append

Edit

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 55

Verificando Alterações Onde for necessário a verificação de alterações feitas em uma Tabela, por exemplo no evento OnClose de um Form de manutenção, você pode usar a propriedade Modified, como mostrado no exemplo abaixo.

Valores Default Caso você queira especificar valores Default para os campos de uma tabela, use o evento OnNewRecord, pois nesse evento o registro não é marcado como modificado.

Percorrendo uma Tabela Utilize um código semelhante ao mostrado abaixo para percorrer uma tabela do início ao fim.

Forms Modais de Inclusão/Alteração Para mostrar Forms Modais de inclusão ou alteração de registros utilize comandos como os mostrados abaixo.

Mestre/Detalhe Nos relacionamentos de 1 para N, uma tabela pode estar ligada a outra em uma relação Mestre/Detalhe, nesse tipo de relação os registros da tabela de ordem N são filtrados pelo campo de relacionamento com a tabela de ordem 1. Por exemplo, se o relacionamento de Clientes com Pedidos for mestre/detalhe, só serão acessados em pedidos, os registros cujo campo CodCli seja igual ao CodCli da tabela de Clientes. Para fazer esse tipo de relacionamento, siga os passos abaixo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 56

• No uses da Unit detalhe, Pedidos, inclua a Unit da tabela mestre, Clientes • Na Table detalhe, Pedidos, Coloque em MasterSource o DataSource da tabela

mestre, Clientes • Em MasterFields, chame o Fields Links Designer e escolha os campos de ligação

das tabelas, no caso, CodCli para as duas tabelas

Fields Editor

Para criar objetos para os campos de uma tabela clique duas vezes no componente TTable ou escolha Fields Editor no seu menu de contexto, na janela do Fields Editor, clique com o botão direito do mouse e escolha Add, na janela Add Fields, escolha os campos que você vai querer usar e clique em Ok. No Fields Editor podemos também remover os campos criados, alterar sua ordem de apresentação e usar suas propriedades e eventos no Object Inspector. Para cada campo é criado um objeto de um tipo descendente de TField, como TStringField, TIntegerField, TFloatField. As principais propriedades dos objetos TField estão listadas na tabela abaixo. Se você não criar nenhum objeto TField, todos os campos da tabela estarão disponíveis, mas caso você crie algum, somente os campos que você criar estarão disponíveis. Se você selecionar os campos no Fields Editor e arrastar para o Form, serão criados os controles visuais para esses campos, Label, DBEdit e outros, mas antes coloque a descrição dos campos na propriedade DisplayLabel.

TField A classe TField é usada como ancestral para todos as classes dos campos. Geralmente iremos usar objetos de classes descendentes de TField, mas em todos eles podemos encontrar os itens mostrados abaixo.

Propriedades Descrição Alignment Alinhamento do texto do campo nos controles visuais.

AsBoolean Valor do campo convertido para Boolean.

AsCurrency Valor do campo convertido para Currency.

AsDateTime Valor do campo convertido para DataTime.

AsFloat Valor do campo convertido para Doublé.

AsInteger Valor do campo convertido para Integer.

AsString Valor do campo convertido para string.

AsVariant Valor do campo convertido para Variant.

Calculated Indica se o campo é calculado em tempo de execução.

CanModify Indica se um campo pode ser modificado.

ConstraintErrorMessage Mensagem de erro se a condição de CustomConstraint não for satisfeita.

CustomConstraint Condição de validação do campo.

DataSet DataSet onde está o campo.

DataSize Tamanho do campo, em Bytes.

DataType Propriedade do tipo TFieldType, que indica o tipo do campo.

DefaultExpression Expressão com valor Default do campo para novos registros.

DisplayLabel Título a ser exibido para o campo.

DisplayText Texto exibido nos controles visuais associados ao campo.

DisplayWidth Número de caracteres que deve ser usado para mostrar o campo no controles visuais.

EditMask Máscara de edição do campo.

FieldKind Propriedade do tipo TFieldKind que indica o tipo do campo, como Calculado ou Lookup.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 57

FieldName Nome do campo na tabela.

FieldNo Posição física do campo na tabela.

Index Posição do campo nos controles visuais.

IsIndexField Indica se um campo é válido para ser usado como índice.

IsNull Indica se o campo está vazio.

KeyFields Campo chave da tabela no relacionamento com LookupDataSet, usado em campos Lookup.

Lookup Indica se um campo é Lookup.

LookupCache Define se será usado cache para campos Lookup.

LookupDataSet DataSet onde está definido o valor do campo Lookup.

LookupKeyFields Campo chave do relacionamento em LookupDataSet.

LookupResultField Valor do campo, que será mostrado nos controles visuais.

ReadOnly Define se um campo é somente para leitura.

Required Define se o campo é obrigatório.

Size Tamanho físico do campo.

Text Texto de edição do campo.

Value Acesso direto ao valor do campo.

Visible Define se um campo é visível.

Estão listadas abaixo algumas classes que realmente iremos manipular no tratamento dos campos de uma tabela, são classes descendentes de TField.

TStringField TBlobField TTimeField

TSmallintField TIntegerField TBytesField

TFloatField TWordField TVarBytesField

TCurrencyField TAutoIncField TGraphicField

TBooleanField TBCDField TMemoField

TDateField TDateTimeField

Em alguns desses campos você pode encontrar as propriedades mostradas abaixo, que não estão presentes em TField.

Propriedades Descrição MaxValue Valor máximo para o campo. MinValue Valor mínimo para campo.

DisplayFormat Formato de apresentação do campo, como ,0.00” %” ou ,0.##” Km”. EditFormat Formato de edição do campo. Currency Define se um campo é monetário.

DisplayValues Usado com campos Boolean, define o texto para True e False, como Sim;Não. Métodos Descrição

LoadFromFile Carrega o conteúdo do campo de um arquivo. SaveToFile Salva o conteúdo do campo para um arquivo.

Para acessar os campo de uma tabela, existem várias abordagens, como mostrado abaixo.. Usando o objeto TField ligado ao campo.

Usando a notação de colchetes. Se você não especificar nenhuma propriedade, é assumida a propriedade Value por padrão.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 58

Através do método FieldByName

Usando a lista Fields do TTable

Conversão de Tipos

A conversão de tipo de um campo pode ser feita através as propriedades tipo As..., como AsString.

Validação Para validar os valores de um campo, você pode usar a propriedade CustomConstraint, por exemplo para garantir que a quantidade de um item seja maior que zero, use em CustomConstraint Quantidade > 0, e em CustomConstraint coloque a mensagem para o usuário caso a condição seja falsa. Outra forma, mais flexível, é usando o evento OnValidate, com um código como abaixo, onde é gerada uma exceção para cancelar a atribuição do valor ao campo.

Formatação Personalizada Caso queira fazer uma formatação personalizada do campo, pode usar os eventos OnGetText e OnSetText. Por exemplo, se tiver um campo Estado, e quiser que quando o valor do campo for C fosse mostrado Casado e S, Solteiro, no evento OnGetText use um código como o abaixo.

Como controle visual para o usuário escolher o valor do campo, você poderia usar o DBComboBox, com Solteiro e Casado na propriedade Items, e no evento OnGetText do campo o código mostrado abaixo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 59

Campos Calculados

Para criar campos calculados, clique com o direito no Fields Editor e escolha New Field, no quadro NewField, digite o nome do campo, o nome do objeto será automaticamente informado, o tipo do campo, seu tamanho e escolha Calculated em Field type. Para colocar um valor nesse campo usaremos o evento OnCalcFields do componente TTable, em nenhuma outra parte os valores desses campos podem ser alterados. O código do evento OnCalcFields deve ser enxuto, pois este é chamado várias vezes durante a edição de um registro e um procedimento pesado pode comprometer a performance do sistema.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 60

���� O que é BDE ?

O Borland Database Engine é o coração do Delphi e suas aplicações com banco de dados usando o mesmo database engine usado pelo Paradox e dBase. Paradox e dBase é claro trazem capacidades adicionais além do database engine (como o Delphi também o faz), mas isso é longe de dizer que o valor agregado destes recursos adicionais é maior de 2 % das capacidades - os outros 98% são providos pelo database engine e estão disponíveis para todos os usuários deste engine. O Borland Database Engine (BDE) é uma coleção de DLLs que as aplicações de banco de dados irão fazer chamadas. Cada estação de trabalho que tiver a aplicação de banco de dados instalada deverá ter, também, o BDE instalado ( o Delphi vem com a instalação do BDE para você adicionar a sua aplicação). O BDE permite a você usar tabelas dBase, Paradox ou ODBC em modo multi-usuário. A versão Cliente/Servidor do Delphi também vem com links para servidores de banco de dados como Oracle, Sybase, MS SQL Server, Informix, e InterBase.

Arquitetura do Banco de Dados do Delphi

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 61

Arquitetura dos Componentes de Banco de Dados

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 62

Diagrama de Estados do Dataset

Estados do DataSet

Estado Descrição dsInactive O Dataset esta fechado.

dsBrowse Estado de Espera. O estado default quando um dataset é aberto. Registros pode ser visualizados mas não mudados ou inseridos.

dsEdit Habilita o a linha corrente para ser editada. dsInsert Habilita uma nova linha para ser inserida. Uma chamada para o Post inserir a nova

linha.

dsSetKey Habilita FindKey, GotoKey, and GoToNearest para procurar valores nas tabelas do banco de dados. Estes métodos somente pertencem para o componente TTable. Para TQuery, a procura é feita com a syntax do SQL.

dsCalcFields Modo quando os OnCalcFields é executado; previne qualquer mudança para outros campos ou campos calculados. Raramente é usado explicitamente.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 63

Abrindo e Fechado DataSets

Antes que uma aplicação possa acessar dados através de um dataset, o dataset deve ser aberto. Existem dois meios para abrir o dataset: Ativando a propriedade Active para True, isto pode ser feito através do Object Inspector ou programavelmente em tempo de execução. Table1.Active := True; Chamando o método do Dataset Open em tempo de execução. Table1.open; Para fechar o processo e semelhante só muda o a propriedade para False e o evento para Close;

Navegando no Dataset Propriedades e Métodos de Navegação

Método ou Propriedade Descrição Método First Move o cursor para a primeira linha em um dataset. Método Last Move o cursor para a ultima linha em um dataset. Método Next Move o cursor para a próxima linha em um dataset. Método Prior Move o cursor linha anterior em um dataset. Propriedade BOF True quando o cursor está no início do dataset, em outro caso é false. Propriedade EOF True quando o cursor está no final do dataset, em outro caso é false. Exemplo:

Table1.Last; // Move o cursor para o último registro da tabela

Modificando dados no Dataset

Os seguintes métodos habilitam uma aplicação para inserir, atualizar, e deletar dados no dataset.

Método Descrição

Append Comfirma qualquer dado pendente e move um registro em branco para o final do dataset, e coloca o dataset em estado de Insert.

Cancel Cancela a operação corrente e coloca o dataset em estado de Browse. Delete Apaga o registro corrente e coloca o dataset em estado de Browse. DeleteTable Apaga uma tabela

Edit Coloca o dataset em estado de edição. Se um dataset já está estado de Edit ou Insert, uma chamada para Edit não tem efeito.

EmptyTable Esvazia uma tabela. Insert Confirma qualquer dado pendente, e coloca o dataset em estado de

inserção.

Post Tentativa para confirmar um registro novo ou alterado. Se sucesso, o dataset e colocado em estado de Browse; se insucesso, o dataset fica no estado corrente.

Refresh Atualiza a visão do banco de dados.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 64

���� Tipos, tamanhos dos campos, driver... da tabela

� Tools Database Desktop File New Table Paradox 7 ( veja o gráfico abaixo) Ok.

���� Clique em File New Table e escolha o driver “Paradox”.

Digite o nome do campo.

Informe o tipo do campo. Pressione na barra de espaço para ver a lista de tipos de campos.

Informe o tamanho do campo.

Tipo de tabela: Drivers de melhor performance para acessar dados são dBase e Paradox, estes também

oferecem suporte para linguagem SQL.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 65

Paradox é melhor quando... A aplicação é utilizada com menos de 10 usuários concorrentemente dados e estruturas de dados devem ser facilmente modificados por usuários finais a máquina cliente é proporcionalmente mais potente que a máquina servidora largura de banda da rede satisfatória velocidade e “conveniência” são mais importantes que integridade baixa disponibilidade de administradores de rede e BD qualificados somente uma aplicação acessará rotineiramente os dados as aplicações serão as resp. pela manutenção da integridade de dados pequena ou moderada quantidade de dados ( < 100 MB )

InterBase é melhor quando... A aplicação é utilizada com mais de 10 usuários concorrentemente dados devem ser centralizados, mantidos e protegidos a máquina servidora é muito mais potente que a máquina cliente rede está carregada integridade de dados é crucial disponibilidade de administradores de rede e BD qualificados várias aplicações poderão acessar os dados o banco será o resp. pela integridade de dados moderada a grande quantidade de dados ( > 100 MB )

Fazendo a melhor escolha Escolher entre Paradox e InterBase pode ter implicação importante para o seu projeto. Portanto, é essencial saber o que é mais adequado em cada situação. A maioria presume que uma rede estará envolvida. Se você está implementando um sistema mono-usuário, o Paradox é usualmente a melhor escolha. O servidor InterBase local pode ser indicado para um sistema mono-usuário, mas sem os aspectos de concorrência, as vantagens básicas do InterBase não estarão sendo utilizadas.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 66

���� Tipos de campos do Paradox

Field Name: Informe o nome do campo. Se preferir abrevie o nome, não acentue nomes dos campos.

Ex: (Código, Número = Codigo, Numero).

Sugestão’:Ex. Clie_Codigo, Clie_Nome, Clie_Fone, Clie_Fax ... assim será fácil para identificar a tabela e o nome do campo. ☺ Type: Tipo de campo aceito. Informe a letra do tipo de campo. Para ver tipos pressione na barra de espaço o Delphi abrirá um drop-down, veja abaixo: Ex. A para Ascii ou N para Numérico.

Table Properties Em Table Properties você define os vários aspectos de configuração da tabela. Muitas dessas opções podem ser implementadas no Delphi e vários programadores preferem não usá-las no Database Desktop.

Opção Descrição Validity Checks Validações para os campos, como obrigatoriedade, valor mínimo e máximo.

Table Lookup Indica que o valor atribuído a um determinado campo tem que estar gravado em outra tabela.

Secondary Indexes Cria índices secundários.

Referential Integrity Cria integridade referencial, geralmente utilizada em relacionamentos de 1 para N.

Password Security Permite a criação de senhas, protegendo a tabela de acesso não autorizado.

Table Language Especificar o driver de língua utilizado pela tabela, geralmente é o Pdox ANSI Intl850.

Dependent Tables Mostra todas as tabela dependentes através da integridade referencial.

Alfa .............. � Letras, números, símbolos (*#$ etc) Number ....... � Até 15 dígitos $ Money ....... � R$ 100,00 R$ 700,10 Short ........... � Até 32.767 Long Integer � até 2.147.483.647 # (BCD) ....... �Formato decimal código binário – até 15 dígitos Date ............. �Datas válidas de Jan. 1, 9999 até Dez 31, 9999 Time ............ � Armazena hora. @ ................. � Armazena valores da data e da hora Memo ........... � Para campos de textos enormes. Armazena ate 240 caracteres

e este conteúdo é armazenado em um arquivo com a terminação .MB

Formated Memo � Pode formatar as fontes, cores, tamanho etc Graphic ........ � Campo pode conter arq. gráficos .BMP, .GIF etc OLE .............. � Pode armazenar, sons, vídeos, figuras. Logical ......... � Armazena Verdadeiro ou Falso. +- ................ � Auto incrementar. Começa com 1 e segue (não editável) Binary .......... � Armazena na forma binária (geralmente para “sons” Bytes ........... � Armazena códigos de barra ou para fitas magnéticas.

Cria índice primário. Basta pressionar uma vez na barra espaçadora, neste

campo será mostrado um

asterisco ( * ). Para remover pressionar

novamente.

Define o tamanho do campo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 67

���� Como criar uma tabela para armazenar dados ?

� Crie a tabela de dados a seguir. Na barra de títulos do Delphi clique em Tools, clique em Database Desktop, clique em File – New – Table e defina os nomes dos campos como mostra a seguir. Na tabela serão armazenados dados que serão cadastrados no formulário de entrada de dados.

Salva a tabela: Este arquivo conterá todos os registros dos Clientes.

Com o utilitário Database Desktop podemos criar os campos, índices

primários, índices secundários, apagar registros das tabelas, alterar registros etc

Padrão na nomeação dos campos: Como é uma tabela de Clientes definirei as iniciais do nome dos campos de Clie_ , quando estiver fazendo alguma alteração no programa será

mais fácil para chamar os campos dos Clientes.

Cria chave primária: Para definir uma chave

primária ( * ) basta pressionar uma vez no asterisco.

Insere campo: Clique no campo desejado e pressione na tecla Insert ( ins ).

Apaga campo: Clique no campo

desejado e pressione Ctrl + Del

Mover campo: Clique no campo

desejado e arraste-o para cima ou para

baixo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 68

Todos os arquivo do projeto corrente:

Grave o arquivo com o nome de Clientes.db, antes de confirmar o salvamento do arquivo, crie uma pasta para

armazenar somente a(s) tabela(s) de dados. Clique no ícone “criar nova pasta”, crie uma pasta chamada “dados”,

grave-a dentro da pasta Delphi Madruga para não misturar com os arquivos fonte.

Dentro da sub-pasta dados

estarão todas as tabelas.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 69

���� Criando índice secundário. � Na barra de título do Delphi Tools, clique em Database Desktop, File, Open, Table, Clientes.db, clique no ícone Restructure

Criando índice secundário para o campo “nome”

� Para definir o índice primário, pressione na “barra de espaço”, quando surgir o asterisco significa que o índice

foi definido.

���� Criando índice secundário:

Após clicado em Secondary Indexes,

clique no campo Clie_Nome , clique na setinha preta apontando para direita, clique OK,

será aberta uma caixa de texto, digite

Inome.

A letra “I” no início do campo significa Índice, nome,

porque o índice será para o campo nome.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 70

� Crie mais duas tabelas com os campos e índices acima, uma tabela para Fornecedores e uma Transportadoras. Em breve utilizaremos o menu que criamos anteriormente.

���� O que é um “alias” e como criá-lo ? ( maneira básica ) Vamos criar um Alias ( atalho ) para acessar as tabelas de uma forma mais prática e rápida. Quando você insere um componente Table ou Query em um formulário deve configurar as propriedades DatabaseName com o caminho apontando para o local ( pasta / diretório ) das tabelas e se por alguma razão resolver mudar a localização das tabelas, terá que alterar em todas as propriedades DatabaseName de todos os formulários que usam esta tabela, com certeza muito mais trabalhoso � ���� Vamos criar o alias : Clique Database ���� Explore ���� Object ���� New ���� Standard – ok – digite o nome do Alias = madruga, digite o caminho onde estão as tabelas ( ou tabela = C:\Delphi Madruga\Dados ), para gravar o alias, clique na setinha azul apontando para baixo ( descrição: apply ) e Ok. (���� Adiante aprenderemos como criar Alias via programa ).

Crie outro índice secundário para

cidade.

� Grava o Alias

� Se algum dia precisar alterar o caminho, não precisará alterar mais a propriedade DatabaseName, basta

alterar o caminho onde esta apontando para a tabela.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 71

Com utilitário SQL Explorer podemos também visualizar mais informações sobre as tabelas:

O Alias Madruga esta apontando para 3 tabelas. Se no futuro precisar alterar o local, basta

alterar o Path ( caminho ), muito mais rápido ☺

Crie “alias” para suas aplicações.

Para acessar este recurso, localize no menu da barra de títulos do Delphi, clique na opção Database e clique em Explore será aberta a tela abaixo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 72

Com o SQL Explorer é possível visualizar todos os campos da tabela, campos índices, campos que compõem os índices, tipo de drive da tabela ( Paradox ) etc.

Mostra a ordem (Order) do campo, tipo (Type) (

alfa, numérico ), tamanho (Length).

Índices secundários.

Nomes dos campos da tabela de Clientes.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 73

Pode-se alterar incluir, alterar, apagar registros ( aba Data ).

Exemplos de SQL:

SELECT * FROM Clientes Listará todos os registros da tabela Clientes. SELECT * FROM Clientes ORDER BY Clie_Nome DESC Listará todos os registros da tabela Clientes e classifica-os em ordem de Clie_Nome Descendente. SELECT Clie_Nome, Clie_Cidade FROM Clientes Listará os campos Clie_Nome e Clie_Cidade da tabela Clientes. SELECT Clie_Nome, Clie_Cidade FROM Clientes ORDER BY Clie_Nome ASC Listará os dois campos ( Clie_Nome e Clie_Cidade ) da tabela Clientes e os classifica em ordem de Clie_Nome em ordem ascendente ( ASC ou DESC ). SELECT Clie_Nome, Clie_Cidade FROM Clientes WHERE Clie_Codigo = 3 ( ou, Clie_Cidade = “Timbó” )

Na aba Data pode-se cadastrar, alterar, apagar e navegar nos

registros.

Dados da tabela poderão também ser filtrados via SQL. Após digitado a linha SQL

clique no raio para visualizar o resultado gerado pela SQL.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 74

���� Como criar um formulário simples de entrada de dados ? � Clique em File – New – Application – clique em Project, clique na opção – Remove from Project, será aberta uma pequena tela, clique em Unit1 para remover a Unit1, clique Ok e clique Yes para confirmar. Na barra de ferramentas do Delph clique em Database, clique em FormWizard e siga as telas a seguir passo a passo para criar o formulário de entrada de dados.

Selecione o Alias Madruga e clique na tabela Clientes

para gerar o formulário de

entreda de dados.

Selecione os campos para serem exibidos no formulário.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 75

O formulário está pronto para entrada de dados, possui navegador de registros que faz as operações básicas de inclusão, alteração, consulta e deleção de registros. Para rodar o programa pressione F9.

A disposição dos campos será feita horizontalmente. Há 3 maneiras:

Horizontal, Vertical ou em uma grade de

dados.

Função do Table1: Serve para manipular os dados de uma tabela física em uma base de dados. Esta será acessada através de um caminho ou alias.

Função do DataSource1: Este faz a ligação do componente de acesso

do banco de dados com o de visualização de dados. Ele não é visual , somente atua como

conduíte para as informações entre o componente Dataset (veremos adiante) e os componentes de

visualização. Salve este formulário com o nome de Clientes.pas

�Altere as propriedades Name

dos dois componentes: Table1 para Clientes_TB e

DataSource para Clientes_DS.

Deixe esta opção desativada.

Clique na propriedade Caption e digite Cadastro de Clientes, mais abaixo clique na propriedade Name

e digite Clientes_Frm ( nome do formulário )

� Após renomeado Table1 e DataSource1, pressione F12 para abrir a tela de código, mude Table1.Open; para

Clientes_TB.Open;

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 76

���� Organizando arquivos do projeto Organizando os arquivos do projeto. É uma forma de copiar ou apagar arquivos de maneira mais rápida etc. File – New Application – Project – Options – Directories / Conditionals sera mostrada a tela abaixo, preencha os campos de acordo com a tela:

Sistema organizado

Aponte o caminho onde

estão os arquivos do seu projeto.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 77

Arquivos da pasta Bin, executável ( .exe ) , arquivo de projeto ( .dpr ), compilados ( .dcu )

Arquivos que estão na pasta frm, arquivo fonte ( .pas ) e .dfm

���� Como criar atalho ao pressionar “alt” + “uma letra” ?

Atalho: O caracter & diante da letra criará um atalho para

ativar o botão Limpa Campos, note que a letra “L” esta sublinhada para ativar o

pressionamento da combinação Alt + L

Clique em Clie_Nome, clique na propriedade Caption e mude para apenas Nome

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 78

���� Quais as propriedades básicas do formulário de dados ?

Propriedades básicas necessárias que devem sempre ser definidas em um formulário quando trabalhar com dados/tabelas. É importante que o desenvolvedor adote um padrão na nomeação ( nomenclatura ) dos componentes e mantenha o código fonte bem orgranizado para futuras manutenções. ☺

���� Formulário Defina as propriedades Caption e Name.

Propriedade Caption: O conteúdo da propriedade Caption será mostrada no topo do formulário. Ex: Caption = Cadastro de Clientes. Propriedade Name: Defina um nome para o formulário. A terminação _FRM significa que

este objeto é um formulário. Se preferir poderá deixar o nome padrão Form1, porém se o projeto possuir 20 Forms a identificação se tornará complicada Form1, Form2, Form3, Form4 ... Form20.

Ex: Name = Clientes_Frm

���� Table Defina as propriedades DatabaName, TableName e Name.

Propriedade DatabaseName Informe o nome da pasta onde conterá as tabelas de dados ou Alias. Propriedade TableName Informe a tabela que será usada no formulário corrente. Clientes.db. Propriedade Name Defina o nome para o componente Table. Como padrão o nome é

Table1, meu padrão é Clientes_TB. Terminação _TB indica que é um tabela Clientes esta usando um componente Table = TB.

���� DataSource Defina as propriedades DataSet e Name. Propriedade DataSet Defina a tabela que está sendo usada no formulário corrente, ou seja,

Clientes_TB. ( _TB = Table ). Propriedade Name Como padrão o nome é DataSource1, meu padrão é Clientes_DS (

_DS = DataSource ).

Nomeação Padrão do Delphi.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 79

���� Senha O usuário terá 3 chances, caso não digitar a senha correta nas 3 primeira tentativas o programa fechará.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 80

���� Como definir descrições para os botões do navegador ?

Defina descrições para os botões do navegador de dados para facilitar a identificação, quando o mouse estiver parado sobre um botão, será mostrada uma pequena descrição dizendo o que aquele botão faz.

� Após traduzido todas as descrições selecione a propriedade do navegador de dados chamada ShowHint, defina o valor para True ( para mostrar as descrições ).

� Clique no navegador para selecioná-lo, na propriedade Hint (...) clique nos três pontinhos, traduza as

mesangens que estão escritas em inglês ☺

� Digite as descrições abaixo.

De ... para �

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 81

���� Criando relatório simples

Partindo do ponto que você já possui um tabela de dados com registros cadastrados, faremos o relatório para listar todos os registros. � File – New – Other – clique na aba Business, selecione a opção QuickReport, Ok, mostrará List Report, clique no botão Start wizard, informe o alias e a tabela ... veja abaixo.

Veja abaixo, formulário relatório que foi criado pelo New Report Wizard.

� Clique no formulário do relatório, clique em Properties ( F11 ), clique em Caption e digite ao lado Relatório de Clientes, clique na propriedade Name e digite QuickRep1, salve o relatório com o nome de Rel_Clientes2.pas

Selecionei

apenas 3

campos.

Clique na setinha, será aberta uma lista de Alias, escolha o

alias que você criou.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 82

� Caso não tenha um formulário insira um novo, para isto clique no ícone Form, insira também um botão do tipo BitBtn.

� Salve o formulário File – Save as - Tela_Rel_Clientes.pas. Para o formulário 3 ( Form 3 ) enchergar o relatório precisamos abri-lo, clique em File, Use unit e selecione o arquivo Rel_Clientes2 � Dê um clique duplo sobre o botão Relatório e digite: QuickRep1.QuickRep1.Preview; Veja abaixo o resultado:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 83

� Como validar campos ? 1ª forma: Para evitar que um determinado campo fique em branco, sem conteúdo proceda da seguinte forma: Clique no campo Edit1, clique na aba Events, dê um clique duplo em no evento OnExit e digite o código abaixo para validar o campo. Será obrigatorio a digitação de algo.

2ª forma: Clique no campo Edit1, clique na aba Events, dê um clique duplo no evento OnExit e digite o código a seguir. Será verificado se a digitação é Vectra ou VITARA:

3ª forma:

Edit1

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 84

3ª forma: Neste caso estamos usando uma tabela de dados. Clique no componente Table1, clique na aba Events, dê um clique duplo no evento BeforePost, digite o código abaixo. Ao tentar gravar o registro e se o conteúdo do campo Nome for branco/vazio, será mostrado uma mensagem de erro, forçando digitação de algo.

���� Como adicionar ou remover formulários no projeto ? Para “remover” ou “adicionar” formulários no projeto corrente clique em um dos ícones a seguir:

Remove form. Adiciona form.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 85

���� Validando campo “data” antes de gravar registro.

Siga os passos... clique no componente Clientes_TB, clique no botão direito, clique em Fields editor, clique no campo Cli_Data_Nasc, clique na propriedade EditMask, clique nos 3 pontinhos do EditMask (...), será aberta uma tela para formatar a data, clique em Date, clique no campo Input Mask e onde mostra !99/99/00;1;_ adicione mais “dois zeros” caso queira formatar ano com 4 digitos, ficando assim: !99/99/0000;1;_ e para finalizar clique OK.

Clique no compenente Clientes_TB, clique no evento BeforePost ( antes de gravar ) e digite o código mostrado abaixo. Atenção: O registro será validado antes de gravar na tabela.

Verifica na tabela se campo está vazio.

� �

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 86

���� Como definir máscara no campo “ telefone “ ?

Vamos definir algumas mascaras para os campos abaixo:

Clique duplo na tabela Clientes_TB, clique no campo Cli_Data_Nasc e

digite os códigos no evento OnGetText e OnSetText, estão na

próxima página.

� Clique duplo sobre o componente Table ( Clientes_TB ), clique no campo Clie_Fone, clique nos três pontinhos ( ... ) do EditMask, o Delphi abrirá uma tela para configurar a mascara para o campo

corrente.

� Clique sobre Phone, será mostrado no lado direito os caracteres que formatarão o campo Telefone, se precisar basta adicionar ou remover os númeors

“nove” ou “zeros”, veja abaixo um exemplo como fica um campo

formatado.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 87

Antes de formatar campo Nr. Telefônico

Após formatar campo Nr. Telefônico

���� Formatadores de campos Use a propriedade EditMak com os caracteres restritos que estão abaixo para formatar campos. Este recurso valida a entrada do caracter digitado no campo formatado.

Caracter Descrição ! Espaços em branco não aparecerão > Todos os caracteres seguintes serão maiúsculos até que apareça o

caracter < Todos os caracteres seguintes serão minúsculos até que apareça o

caracter \ Indica um caracter literal

l (L minusculo) Somente caracter alfabético L Obrigatoriamente um caracter alfabético (A-Z, a-z) a Somente caracter alfanumérico A Obrigatoriamente caractere alfanumérico ( A-Z, a-z, 0-9) 9 Somente caracter numérico 0 Obrigatoriamente caracter numérico c permite um caracter C Obrigatoriamente um caracter # Permite um caracter numérico ou sinal de mais ou de menos, mas não

os requer. : Separador de horas, minutos e segundos / Separador de dias, meses e anos

� Validando “data” com Try ... Except ... On EConvertError do Clique em um campo Edit, clique na aba Events, dê um clique duplo no evento OnExit e ditie o código abaixo para validar a data:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 88

Clique no campo Data que já foi definido uma máscara de data ( veja página anterior ), clique no evento OnExit e digite o código abaixo. Ao sair do campo data mostrará uma mensagem.

���� Detalhes sobre “Exceções” – Try .. Except ... EConvertError

O tratamento de exceção é um mecanismo capaz de dar robustez a uma aplicação, permitindo que os erros sejam manipulados de uma maneira consistente e fazendo com que a aplicação possa se recuperar de erros, se possível, ou finalizar a execução quando necessário, sem perda de dados ou recursos. Para que uma aplicação seja segura, seu código necessita reconhecer uma exceção quando esta ocorrer e responder adequadamente a essa exceção. Se não houver tratamento para uma exceção, será exibida uma mensagem padrão descrevendo o erro e todos os processamentos pendentes não serão executados. Uma exceção deve ser respondida sempre que houver perigo de perda de dados ou de recursos do sistema. Exceções

Exceções são classes definidas pelo Delphi para o tratamento de erros. Quando uma exceção é criada, todos os procedimentos pendentes são cancelados e, geralmente é mostrada uma mensagem de erro para o usuário. As mensagens padrão nem sempre são claras, por isso é indicado criar seus próprios blocos protegidos.

Blocos Protegidos

Um bloco protegido é um grupo de comandos com uma seção de tratamento de exceções.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 89

Algumas vezes você pode precisar especificar quais exceções quer tratar, como mostrado abaixo.

Principais Exceções O Delphi define muitas exceções, para cada erro existe uma exceção correspondente. Classe Descrição Exception Exceção genérica, usada apenas como ancestral de todas as outras exceções

EAbort Exceção silenciosa, pode ser gerada pelo procedimento Abort e não mostra nenhuma mensagem

EAccessViolation Acesso inválido à memória, geralmente ocorre com objetos não inicializados

EConvertError Erro de conversão de tipos

EDivByZero Divisão de inteiro por zero

EInOutError Erro de Entrada ou Saída reportado pelo sistema operacional

EIntOverFlow Resultado de um cálculo inteiro excedeu o limite

EInvalidCast TypeCast inválido com o operador as

EInvalidOp Operação inválida com número de ponto flutuante

EOutOfMemory Memória insuficiente

EOverflow Resultado de um cálculo com número real excedeu o limite

ERangeError Valor excede o limite do tipo inteiro ao qual foi atribuída

EUnderflow Resultado de um cálculo com número real é menor que a faixa válida

EVariantError Erro em operação com variant

EZeroDivide Divisão de real por zero

EDatabaseError Erro genérico de banco de dados, geralmente não é usado diretamente

EDBEngineError Erro da BDE, descende de EDatabaseError e traz dados que podem identificar o erro

Blocos de Finalização Blocos de finalização são executados sempre, haja ou não uma exceção. Geralmente os blocos de finalização são usados para liberar recursos.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 90

Você pode usar blocos de proteção e finalização aninhados.

Geração de Exceções Você pode provocar uma exceção usando a cláusula raise.

Também é possível criar seus próprios tipos de exceções.

Se você quiser que uma exceção continue ativa, mesmo depois de tratada, use a cláusula raise dentro do bloco de tratamento da exceção. Geralmente isso é feito com exceções aninhadas.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 91

Erros de Bancos de Dados

A exceção EDBEngineError permite a identificação de erros de bancos de dados gerados pela BDE.

Note que a variável E, que vai identificar o erro, só precisa ser declarada no bloco de tratamento da exceção. No help você pode consultar outras propriedades de EDBEngineError que podem ser importantes. Você também pode usar os eventos de erro do componente Table, sem precisar de blocos de tratamento.

Alguns códigos de erro da BDE estão listados abaixo. Todas as constantes e funções relacionadas à API da BDE no Delphi 3 estão na Unit BDE, que deve ser adicionada à cláusula uses. No BDE API Help você pode encontrar referência sobre as funções nativas da BDE, como também alguns exemplos em Delphi.

Constante Descrição DBIERR_KEYVIOL Violação de chave primária DBIERR_MAXVALERR Valor máximo excedido DBIERR_FORIEGNKEYERR Erro de chave externa, como em integridade

referencial DBIERR_LOCKED Registro travado DBIERR_FILELOCKED Arquivo travado DBIERR_NETMULTIPLE Mais de um diretório usado como NetFileDir DBIERR_MINVALERR Campo com valor mais baixo que valor mínimo DBIERR_REQDERR Campo obrigatório faltando DBIERR_LOOKUPTABLEERR Erro em tabela Lookup

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 92

Se você quiser mais informações a respeito do erro pode usar o procedimento DBIGetErrorContext, como na função mostrada abaixo que retorna determinadas informações sobre o erro.

���� Inserindo registros em uma tabela Insira 4 edits ( aba Standard ) e um botão Bitbtn ( aba Additional ) , ao clicar neste botão será gravado os quatro campos:

Tela abaixo está em modo de projeto:

Tela abaixo mostra programa em execução.

Clique na propridade DataSource e

defina DataSource1.

A única função do DBgrid neste

exemplo é apenas mostrar todos os

registros

Clique em Table1, clique em DatabaseName e defina o Alias ou o caminho onde esta a tabela, clique na propriedade

TableName e defina Clientes.db ( que é a tabela ).

Clique em DataSource1, clique na propriedade

Dataset e defina Table1

Insira um navegador de registros ( aba

Data Controls ), clique na propridade

DataSource e defina

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 93

���� Gravando campo data Gravando o campo data usando Try ... Except para controlar a operação.

É utilizada a estrutura Try ... Except para controlar a operação, se alguma coisa não funcionar o bloco except é executado mostrando a mensagem de erro. O Edit prepara o registro para a alteração, o comando Post grava esta alteração.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 94

���� Como forçar digitação somente de “letras” ? Valida o conteúdo digitado no campo Edit1, ou seja, serão aceitas somente “letras”, tente digitar algum número. Clique na aba Events e no evento OnKeyPress digite as linhas de código abaixo:

���� Como forçar digitação somente de “números” ? Valida o conteúdo digitado no campo Edit1, ou seja, serão aceitos somente “números e os caracteres “-” , “+“ e “backspace”, tente digitar alguma letra. Clique na aba Events e no evento OnKeyPress digite as linhas de código abaixo:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 95

���� Como navegar nos campos com “setinhas baixo/cima ou enter” ?

Primeira maneira: Clique no campo Edit1, clique na aba Events, dê um clique duplo em OnKeyPress e digite:

Quando estiver no campo Edit1 e pressionar “enter” o pulará para o próximo campo Edit2. Clique no campo Edit2, clique na aba Events, dê um clique duplo em OnKeyPress e digite:

Quando estiver no campo Edit2 e pressionar “enter” o pulará para o próximo campo Edit3. Segunda maneira: Neste código programaremos ao pressionar “enter”, “setinha para cima”, “setinha para baixo”, algumas pessoas preferem usar estas teclas para navegar nos campos ao invés do mouse, então esta é a solução. Selecionaremos todos campos, mantenha a tecla Shift pressionada e com o mouse clique no campo Edit1, Edit2 e Edit3, após clique na aba Events, dê um clique duplo no evento OnKeyDown e digite:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 96

���� Como mudar cores do editor de código fonte do Delphi ?

Na barra de título do Delphi clique em Tools, Editor Options e clique na aba “color”, selecione por exemplo Comment , clique na cor vermelha, desta forma quando houver algum comentário no programa será exibido em vermelho.

Exemplo:

Desfaz ações após ter salvo a unit.

È possível configurar código fonte com várias

combinações de cores.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 97

���� Para que serve o Object inspector ? ( inspetor de objetos )

É possível ter acesso mais rapidamente a um objeto ou componente através do Object Inspector, clique no drop-down, serão listados todos os objetos em uso do projeto corrente, após clique no objeto desejado o ponteiro (cursor) será posicionado no objeto selecionado. O “ Object Inspector - Inspetor de Objetos ” serve como um “atalho” para chegar mais rapidamente em algum objeto.

���� Definindo seus próprios códigos – trechos de códigos Programando o editor de códigos. Quando programamos varias procedures ou blocos de códigos são constantemente repetidos, uma maneira de poupar a edição destes códigos e programar o Editor de códigos. Tools - Editor Options, clique na aba Source Options, clique no botão Edit Code Templates

Add: Adiciona novos códigos.

Edit: Edita / altera código.

Delete: Apaga trecho de código adicionado.

Após clicar no botão Add será mostrada a tela ao lado:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 98

Agora vamos invocar o código de dentro do editor de códigos do Delphi. Para ativar a listagem do código que foi inserida clique a combinação Ctrl J ( control jota ), pressione a letra M , visto que o código foi gravado com a inicial M de Mensagem.

Após clicado em Mensagem1 será inserida a linha na posição do cursor:

Digite um exemplo ou a sintaxe da função que mostra a mensagem e

clique OK.

Pressione Ctrl J

para listar seus códigos.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 99

É mais pratico editar o arquivo Delphi32.dci que se encontra no caminho abaixo: C:\Arquivos de programas\Borland\Delphi6\Bin Abra este arquivo e digite os códigos que você mais utilizará, e para invocar pression Ctrl J

���� Como forçar gravação do registro antes fechar o formulário ?

Se alterar o registro corrente, ao fechar o formulário será mostrada uma caixa de mensagem pedindo onfirmação para gravação deste registro.

Quando clicar no X para fechar o formulário será mostrada uma caixa de

O campo Nome Cliente foi alterado, ao clicar no X para fechar o formulário será solicitado

confirmação, se é ou não para gravar alteração.

Coloquei as linhas separadoras para melhor localizar / visualizar os vários

códigos.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 100

1ª maneira: Clique no formulário corrente, clique na aba Events, dê um clique duplo no evento OnClose e digite o código abaixo:

2ª maneira: Digite o código abaixo no evento OnClose ( veja exemplo acima )

���� Como pular de campo ao pressionar enter ? Ao pressionar a tecla ENTER posicionará o ponteiro ( cursor ) no próximo campo.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 101

� Clique no campo EditClie ( primeiro campo deste formulário ). � Clique na aba Events, clique duplo no evento OnKeyDown e digite a linha de código abaixo: If Key = Vk_Return then Perform(Wm_NextDlgCtl,0,0);

� Veja abaixo código completo:

� Programaremos o pressionamento da tecla “enter” para todos os campos da tabela. Selecione todos os campos, matenha a tecla Shift pressionada e clique nos quatro campos, pressione F11, clique na aba Events, dê um clique duplo no evento OnKeyDown e digite o código abaixo:

� Outra forma: Clique na aba Events, dê um clique duplo no evento OnKeyDown e digite o código abaixo:

Note que todos os campos estão selecionados para usar o

mesmo evento.

Note o evento : OnKeyPress

Note o evento : OnKeyDown

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 102

���� Como limpar todos o campos “edits” ?

Insira um botão Bitbtn, dê um clique duplo neste botão e digite o código abaixo: 1ª maneira:

2ª maneira Para limpar um único campo digite a linha abaixo:

���� Ativa / Desativa botão Iniciar do Windows Teste realizado no Windows XP. Após executar o programa ( F9 ) clique no botão iniciar do Widnows este não funcionará.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 103

���� Como abrir/criar formulário dinamicamente ? Carrega formulário para memória mais rapidamente, se o seu projeto possuir muitos formulários a serem abertos, esta é a maneira adequada. � Crie 4 ( quatro ) formulários.

� Com o projeto aberto, clique em Project – Options, selecione o formulário desejado para criá-lo dinamicamente, clique na setinha que esta apontando para o lado direito, após clicado na setinha o formulário será passado / transferido para o lado direito ( Clientes_Frm ) e clique OK para finalizar.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 104

� No formulário do Menu_Frm, dê um clique duplo no botãoo Clientes_Bit e no evento OnClick digite o código abaixo:

���� Como procurar um registro no mesmo campo por “código” ou “nome” ?

No campo “Localiza por Código ou Nome” será possível procurar por “código” ou “nome”. Clique no Edit1, clique na aba Events, clique no evento OnChange e digite o código abaixo. Para esta situação usaremos Try ... Except ... end

Digite o código abaixo no evento OnChange do campo de pesquisa ( Edit1 )

Como fazer índice secundário, volte para página 76

Nome do índice secundário:

Iempresa

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 105

���� Como navegar nos registros usando teclas de função ( F1, F2 ) ? Usaremos as teclas de função para navegar nos registros.

� Selecione o formulário corrente, na propriedade KeyPreview defina o valor para True. � Selecione o formulário, no evento OnKeyDown do form digite o código abaixo, neste exemplo estou usando a tabela de Vendedores.

F1 = registro anterior. F7 = edita registro. F2 = próximo registro. F8 = grava. F3 = primeiro registro. F9 = cancela. F4 = último registro. ESC = sai programa. F5 = insere registro. F10 = e-mail. F6 = apaga registro. F11 = calculadora.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 106

���� Como instalar Quick Report do Delphi 7 O Delphi 7 usa componentes Rave para criar relatórios, se preferir usar o Quick Report do Delphi 6 siga os passo abaixo: � Feche todos os projetos abertos. � Abra o menu Component na Barra de Menus. � Selecione a opção Install Packages. � Na caixa de diálogo que se abre, selecione o botão Add � Abra o diretório \bin (a localização padrão é c:\Arquivos de Programas\Borland\Delphi7\bin). � Selecione o arquivo dclqrt70.bpl. Clique em Abrir. � De volta à janela Project Options, clique no botão OK.

���� Memória Total e Livre Mostra quantidade de memória total e a quantidade livre.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 107

���� Formatando valores e calculando percentual Insira dois Edits e um botão Bitbtn, no evento OnClick digite o código abaixo:

Digite o valor 100 e 10

Posicione o ponteiro do mouse sobre a palavra

FloatToStr e pressione F1 ( ajuda ), veja as opções de formatações, clique em

Example e clique no botão Exibir.

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 108

���� Como excluir TODOS registros da tabela ?

Insira um botão do tipo Bitbtn, dê um clique duplo sobre este botão, clique na aba Events, clique no evento OnClick e digite o código abaixo:

Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 109

���� Validando campo com Try ... Except Usando Try ... Execpt

Be Always Thankful

Everything comes and goes