176
Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 372 Delphi 7.0 Module 4

jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Delphi 7.0

Module 4

Page 2: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Procurando registros com “Dbgrid e SetRange” ? No exemplo a seguir veremos com filtrar registros em uma tabela usando componentes DBGrid e SetRange. � Insira um Form, File, New Form. � Insira um Label1, clique no label1, pressione F11 e digite Código Inicial: � Insira um Label2, clique no label2, pressione F11 e digite Código Final: � Insira um componente Edit1 (aba Standard). � Insira um componente Edit2 (aba Standard). � Insira um Bitbtn (aba Additional), tecle F11, na propriedade Caption digite Procurar,

na propriedade Name, mude o nome BitBtn1 para Bit_Procura

� Selecione o formulário, tecle ESC 3 vezes para cancelar possíveis objetos selecionados, na propriedade Name digite Pequisa_Frm.

� Insira um componente Table ( aba DataAccess). Insira um DBGrid ( aba DataControls ), clique no DBGrid, File, Use Unit e selecione Clientes, na propriedade DataSource informe DataSource1

Clique duplo sobre o botão Procurar e digite as seguintes linhas de código:

� Clique na propriedade DatabaseName e defina o Alias, defina propriedade TableName =

Clientes.db, clique em Table1, clique no botão direito

Fields Editor Add Fields Ok ( para adicionar os campos )

Clique no Datasource1 e na

propriedade Dataset defina Table1.

Page 3: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Como padrão o Delphi executa sempre o primeiro formulário (formulário pai), para executar o form do Grid por primeiro selecione opção que está na barra de títulos, Project – Options – selecione o formulário Pesquisa_Frm ( nosso formulário ) e arraste-o posicionando-o por primeiro, clique OK, finalmente tecle F9 para executar o programa.

Como padrão o Delphi mostra no Edit1 e Edit2 o texto Edit1 e Edit2, para

apagar pressione F11, clique na propriedade na propriedade Text

apague o texto Edit1.

Outra maneira SEM usar “With … do”

Page 4: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como procurar registros em um DBGrid ?

No exemplo a seguir estamos fazendo a procura pela coluna “Nome”, ou seja, basta digitar as letras iniciais do nome que desejar localizar na coluna Nome, a medida que for localizado algum nome, este será exibido no Label1, para apagar conteúdo campo use “backspace”. Crie um índice secundário para o campo Nome, visto que a pesquisa será feita pelo Nome.

� Clique no DBGrid e no evento OnKeyPress digite o código abaixo:

� Crie uma tabela com os campos

DBGrid.

� Abaixo da seção Private digite a ProcuraX: string;

Clique no DBGrid, clique

Options, clique na sub-opção dgEditing = False, e na

propriedade ReadOnly = True.

Insira um Label1

Page 5: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como ler / buscar “valores” da tabela para Edit ?

Veja abaixo maneiras para ler ( mostrar ) campos em um Edit. No campo Table1Codigo.AsString; usamos o conversor AsString porque o conteúdo a ser exibido no Edit deve ser texto. Todos os códigos abaixo foram definidos no evento OnClick do botão Bitbtn.

1ª forma:

2ª forma:

3ª forma:

O número seis [6] indica que é o sexto campo da tabela. Estes números devem estar de acordo com a criação dos campos do DataBase Desktop. Vamos ler o campo o conteúdo do campo Nome e mostrá-lo na tela, em um Edit.

Table1 = tabela. Codigo = nome do campo. Table1Codigo.AsString AsString ( converte para string – texto )

� Insira um componente Edit e

um Bitbtn, na propriedade Name

digite Bit_Le_Nome.

Apo clicar OK o nome será

mostrado no Edit Box.

Value: pega o “valor” ou “conteúdo” do campo e

mostra no Edit2.

Para mostrar o código / número que esta

armazenado na tabela em um Edit é preciso antes

converter o NÚMERO para TEXTO ( AsString )

Page 6: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Para associar outros tipos de campos que não são texto a uma caixa de edição ( campo que aceita somente strings ), devemos utilizar as propriedades de conversão do componente TField : AsBoolean, AdDateTime, AsFloat, AsInteger e AsString:

Vamos ler um valor e mostrá-lo em um Edit ( em uma string ). Lembre-se, antes devemos converte-lo para texto – string.

���� Lendo conteúdo do campo

No exemplo a seguir leremos o conteúdo do campo Estado Civil, se o conteúdo for a letra ”C”, será mostrada a palavra “Casado” caso contrário “Solteiro”. � Crie a tabela abaixo ( use o Database Desktop )

� Crie o formulário de cadastro.

Serão aceitas somente as letras

C e S.

Page 7: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique no componente DataSource1, clique no evento OnDataChange e digite o código abaixo:

Se for digitada a letra C será mostrada a palavra Casado em

azul com o tamanho da fonte de 15

Se for digitada a letra S será mostrada a palavra Solteiro em

vermelho com o tamanho da fonte de 20

Se o salário que contiver na tabela for igual a 100, será

mostrada a mensagem Salário OK ! em verde

com o tamanho da fonte de 12.

Page 8: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Maneiras de ler campos

Digite o código abaixo no evento OnClick do botão OK.

Insira 5 componentes

Labels e 5 Bitbtn.

Insira um componente DBGrid, Table e um

DataSource. Defina as propriedades de cada um destes componentes, já

aprendemos anteriormente

Insira 5 labels, na propriedade Caption de cada um digite o texto que esta em amarelo.

Foi inserido um DBGrid para

mostrar os registros que estão na tabela.

Na propriedade Caption de cada botão serão mostradas as 5

maneiras de como ler o conteúdo de um campo.

Page 9: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Selecione o formulário e no evento OnShow digite o código abaixo:

���� Como “editar / alterar” um registro ? O Dataset precisa estar em modo de edição para possibilitar a atualização dos dados. Para isso você precisa utilizar o método Edit e ao final utilize o método Post para gravar o registro alterado. As linhas de código abaixo podem ser digitadas no evento OnClick de um BitBtn.

Verificando o estado da tabela, se estiver no modo de “edição” ou “inserção” gravará o registro. O código abaixo foi definido no evento OnClick de um botão Bitbtn:

���� Como criar atalho com a combinação “Ctrl + A” ?

Selecione o formulário corrente e defina a propriedade KeyPreview para o valor True e no evento OnKeyDown digite o código abaixo:

Page 10: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Destacando opção selecionada no RadioGroup

Veja como destacar um item selecionado em um DBGrid.

���� Como desabilitar opções do RadioGroup ?

Digite o código abaixo no evento OnClick do

RadioGroup.

Page 11: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Pesquisando registro com DBEdit ou Edit

Um truque para pesquisar registro no campo Código. � Crie a tabela abaixo com o Database Desktop

� Crie o formulário abaixo. Analise a seguinte situação: No campo Código não é possível “efetuar pesquisa”, visto que o componente DBEdit não permite tal ação. Para pesquisar um código terá que inserir um componente Edit.

� Mova o componente DBEdit para o lado direito do formulário, apenas para não removê-lo do projeto, ao lado da label Código insira um componente Edit.

Componente EDIT que foi

inserido.

Componente movido. No momento não precisamos

apagá-lo.

Page 12: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Observe atentamente o código fonte do formulário acima, e cada um dos seus eventos.

Criando código automaticamente, autoincrement

Page 13: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Consulta_Frm é a tela de pesquisa rápida que faremos adiante.

Page 14: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Agora, criaremos uma segunda tela para facilitar a pesquisa dos registros.

Neste campo você poderá digitar um código para realizar pesquisa, porém se fosse no componente ao lado ( setinha

vermelha ), isto não seria possível.

Clique no componente RadioGroup, clique na propriedade Items, será aberta uma tela, digite

Código e Nome um abaixo do outro como no exemplo

acima, após clique Ok. Clique no botão, clique

nan propriedade ModalResult e defina mrOK

Page 15: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 16: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Clique duplo no registro selecionado transportará do Grid para a tela de

Cadastro.

Page 17: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relacionamento ( N – N ) - ( Ex: 1 )

O exemplo a seguir mostra como cadastrar um funcionário que trabalha em várias empresas. Crie as tabelas abaixo:

Funcionários.db Empresas.db

Func_Empresa.db

���� File – New Application – remove file from Project – yes (remova o formulário em branco que o Delphi abriu ). ���� Crie um Alias chamado de Relacionamento ( Database – Explore – Object – New – Standard – Ok – digite o nome Relacionamento – no lado direito , opção Path digite o caminho onde estão armazenadas as tabelas (C:\Delphi Madruga\Sys 2\dados ) – Apply e Ok para gravar. ���� Crie o formulário de entrada de dados, use o Database - FormWizard para criar a tabela de Funcionários e Empresas. Clique o Formulário e defina as propriedades básicas: Caption = Cadastro de Funcionários, Name = Func_Frm, clique no componente Table1, pressione F11, na propriedade DataBaseName defina o alias Relacionamento, Name para Funcionarios_TB, clique no DataSource1, pressione F11, mude a propriedade Name para Funcionarios_DS Veja o cadastro de Funcionários abaixo:

Page 18: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Insira um componente Label e altere a propriedade Caption para Empresas. ���� Insira dois componentes Table e dois DataSource. Clique em Table1 defina a propriedade Databasename = Relacionamento ( alias ), a propriedade Name para Empresas_TB, defina a propriedade TableName = Empresas.db, clique no DataSource1 e mude a propriedade Name para Empresas_DS. Clique em Table2, defina a propriedade Databasename = Relacionamento ( alias ), a propriedade Name para Func_Empresas_TB, TableName = Func_Empresas.db, clique no DataSource2 e mude a propriedade Name para Func_Empresas_DS, clique duplo em Func_Empresas, será aberta uma pequena tela mostrando os campos, clique botão direito, clique em Add Fields e OK, clique novamente botão direito, clique em New Field ( vamos criar um campo temporário para mostrar o nome da empresa em um drop-down. Com drop-down será mais prático), será aberta uma tela para definir nome e tamanho do campo, preencha campos como tela abaixo:

O campo temporário é

relacionado com o campo da tabela ( veja ao lado ).

Page 19: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Insira um DBGrid ( aba DataControls ), na propriedade DataSource defina Func_Empresas_DS, clique duplo sobre o DbGrid, será abeta uma tela onde definiremos as colunas dos dados que serão exibidos:

Clique no primeiro ícone amarelo ( Add New – Ins ),

clique duas vezes para criar duas colunas, clique

em FieldName e defina o nome do

campo a ser mostrado, clique no + da opção

Title para alterar o Caption para

Código Empresa.

DBGRid

Page 20: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Defina os relacionamentos, clique Func_Empresas_TB, clique em MasterSource e defina Funcionarios_DS, clique em MasterFields para definir o relacionamento, veja abaixo:

1

2

Veja o relacionamento.

Func_Cod é o campo do Código do Funcionário que que foi

criado na tabela Fun_Empresa.db que serve para fazer o

relacionamento.

Page 21: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie o formulário de entrada de dados para cadastrar algumas empresas ( utilize o FormWizard )

Para selecionar uma empresa clique no final do campo Nome Empresa, será aberta uma lista drop-down.

Clique no DBGrid, defina a propriedade DataSource

defina Func_Empresas_DS.

Insira um Label e na propriedade Caption digite Empresas.

<< Abrindo duas tabelas >>

Esta é a tabela intermediária,

somente para fazer o relacionamento.

Tabela de Empresas.

Clique no DBNavigator, clique na propriedade DataSource e

defina Funcionarios_DS

Um funcionário poderá ser cadastrado em várias empresas.

Page 22: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relacionamento ( 1 : 1 ) - ( Ex: 1 )

Temos duas tabelas, de Alunos e de Professores. Na tabela Alunos cadastraremos o Professor para um aluno selecionado. Objetivo deste exemplo é mostrar relacionamento de 1 para 1 ( 1 : 1 ).

� File – New application – Project – Remove from Project, selecione a Unit1 e Yes. � Defina o Alias, aqui Madruga.

� Clique em Database – Form Wizard para criar os dois formulários Alunos e Professores,

veja abaixo como ficou o formulário de entrada de dados para o Cadastro de Alunos.

Relacionamento: A tabela Alunos deverá conter um

campo para o relacionamento. Desta forma ligaremos o campo

Alu_Cod_Relaciona com o campo Profe_Cod.

� Altere as propriedades básicas do Formulário,

Table, Name, DataSource e Caption.

� Use o Form Wizard para gerar o formulário de entrada de dados para os Professores.

Page 23: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Estamos na tabela dos Alunos, adicionaremos um componente DBLookupComboBox2 ( aba Data Controls ) para fazer o relacionamento entre os Professores e Alunos. Clique File • Use Unit • Professores

Insira um componente DBLookupComboBox1 ( aba Data Controls ) e defina as propriedades mostradas ao lado.

Insira um componente Table, defina a propriedade

DatabaseName = Alias ( ou caminho das tabelas ),

altere a propriedade Name para Profe_TB, clique em

TableName, defina o nome da tabela para Professores.db, clique duplo sobre Profe_TB,

clique em Add fields e Ok para adicionar todos os campos.

Clique em DataSource1, clique na propriedade DataSet, defina Profe_TB, altere a propriedade

Name para Profe_DS.

Como funciona este relacionamento?

Um Aluno terá apenas Um Professor

por isto se chama relacionamento de 1 para 1

Page 24: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

AAlluunnooss

Alun_Cod_Aluno Alun_Cod_Relaciona

PPrrooffeessssoorreess

Profe_Cod

Relacionamento

O campo Professores poderá ficar em branco.

1:1

Page 25: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como criar relatório com relacionamento “Professores e Alunos” usando SQL ?

� File – New – Other e clique na opção Report, será aberto um formulário como o que está abaixo:

� Clique duplo no meio deste formulário, será aberta uma tela para configurar tamanho do

papel e outros.

� Após clicar no botão OK será

incluído 3 bandas.

Page 26: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Para forçar quebra ( agrupamento ) por Professores precisamos incluir a banda que fará esta quebra, uma banda do tipo QRGroup.

� Na propriedade do formulário Name altere o nome de QuickReport1 para QReport_Aula. � Insira na banda Page Header um componente QRSysData, mude a propriedade Data ( qrsTime ) para qrsReportTitle, onde será impresso o título do relatório via programação. Mais para direita da banda insira outro QRSysData, mude a propriedade Data para qrsDateTime ( para imprimir a data e a hora ), insira outro QRSysData, mude a propriedade Data para qrsPageNumber ( para imprimir número da página ). � Clique na banda Column Header, insira um componente QRLabel, mude a propriedade Caption para Nome do Professor. � Insira um componente SQL ( Query ), clique no componente Query, clique no botão direito, clique em SQL Builder, na opção Database informe o Alias, na opção Table escolha a tabela de Professores e a tabela de Alunos. Posicione o ponteiro do mouse sobre o campo Prof_Codigo e arraste-o até o campo Alun_Cod_Relaciona, note o “traço” indicando o relacionamento, veja o gráfico abaixo:

Page 27: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Clique no formulário do relatório QReport_Aula, na propriedade DataSet defina Query, na propriedade Active defina True. � Insira um componente QRDBText na banda Group Header, na propriedade DataSet defina Query, e na propriedade DataField = Profe_Nome, agora clique na banda Group Header, clique na propriedade Expression, clique botão Database field, clique em Query, clique em Profe_Nome, Ok e Ok.

Ao clicar no “raio” será mostrado o resultado SQL que foi gerado.

Para fazer o relacionamento, clique na tabela de Professores, clique no campo Prof_Codigo e

arraste até o campo Alun_Codigo.

Page 28: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

�� Clique na banda Detail, insira um componente QRDBText, altere a propriedade DataSet para Query, DataField para Alun_Nome.

�� No formulário Menu insira um botão Bitbtn e no evento OnClick digite o código abaixo: Precisamos dizer ao formulário Menu achar o formulário do relatório, clique em File, Use e QReport. File – use – Qreport

Clique OK para finalizar.

Page 29: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Após clicar no botão Relatório 1 será mostrado o resultado abaixo:

Professor

Nomes dos Alunos do professor Jurandir

Mostra relatório na tela, podendo

também imprimir.

Note a quebra ( agrupamento ), a primeira coluna dos Professores e

a segunda Alunos. Clique na banda Group Header, clique na propriedade Child, defina o valor para True, será inserido mais uma banda chamada HasChild, insira um componente QRLabel e na

propriedade Capiton digite Nome do Aluno.

Relatório de Professores

Page 30: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja abaixo após inserir Child para mostrar o cabeçalho Nome do Aluno.

Para visualizar o código SQL que foi gerado pelo SQL Builder, clique no componente Query1, clique em SQL Strings ( ... ) , veja abaixo:

Note que a cada quebra de Professor

é impresso o cabeçalho Nome do

Aluno

SELECT Professores.Prof_Nome, Alunos.Alun_Nome FROM "professores.db" Professores INNER JOIN "alunos.db" Alunos ON (Professores.Prof_Codigo = Alunos.Alun_Cod_Relaciona) GROUP BY Professores.Prof_Nome, Alunos.Alun_Nome ORDER BY Professores.Prof_Nome, Alunos.Alun_Nome

Page 31: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relacionamento ( 2 )

� Crie as duas tabelas.

� Crie o formulário de entrada de dados para a Agenda. O campo código não precisa ser posto no formulário visto que é um campo auto-increment.

� Abaixo do campo nome insira um DbGrid, um Table e um Datasource.

Como padrão o nome é Table, mude a propriedade Name para

Compromissos_TB e o DataSource para Agenda_DS. Clique em Compromissos _TB, defina a

propriedade DatabaseName = Alias, TableName = Compromissos.db e

defina Active para True.

Relacionando campos: Clique em Compromissos_TB, clique na

propriedade MasterSource e defina Agenda_DS, clique em MaterFields ( será aberta a tela abaixo ), clique no

campo Comp_Cod_Relaciona, clique no campo Agen_Codigo e clique no botão

Add e Ok.

Como padrão o nome é Table, mude a propriedade Name para

Agenda_TB e o DataSource para Agenda_DS.

Clique em Agenda_TB, defina a propriedade DatabaseName =

Alias, TableName = Agenda.db e defina Active para True.

Clique em Agenda_DS e defina o DataSet para Agenda_TB.

Insira um DBGrid, clique na propriedade DataSource e defina Compromissos_DS.

Page 32: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique no formulário Agenda e abra as tabelas no evento OnCreate e no evento OnEnter do DBGrid.

Se o registro Jurandir for removido, todos seus compromissos também serão removidos.

Page 33: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Alias ( 1 )

� Insira um componente DataBase ( aba BDE ), clique duplo sobre este componente, será aberta uma tela,

veja abaixo:

� Clique e selecione o driver Standard.

� Digite o nome do Alias desejado, aqui, Madrugada.

� Digite o caminho onde estão as tabelas de dados.

� Defina as propriedades do Database1

� Observe atentamente cada

evento �

Page 34: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Alias ( 2 )

Selecione o formulário corrente e no evento OnCreate digite as linhas de código abaixo, insira também um componente Session ( aba BDE ). Insira um componente Session ( aba BDE – no delphi 6.0 ). Digite o código abaixo no evento OnCreate.

Dados é o nome da sub-pasta onde contem todas

as tabelas de dados.

Page 35: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Integridade referencial ( Paradox )

Exemplo: Temos um Cadastro de Cidades e um Cadastro de Funcionários. Cada registro gravado no Cadastro de Funcionários terá uma cidade relacionada ( buscaremos a cidade do Cadastro de Cidades ), portanto, todos os registros do Cadastro de Funcionários terão várias cidades “filhas”. Se alguma cidade for excluída do Cadastro de Cidades criará registros órfãos no Cadastro de Funcionários, e isto JAMAIS pode acontecer. A “integridade referencial” NÃO permite registros órfãos no Cadastro de Funcionários, ou no caso, em qualquer outra tabela.

1º registro

Cadastro de Funcionários

Código: 1

Nome funcionário: Mike Allan

Cidade: Timbó

Registro nr 1

Cadastro de Cidades

Código: 1

Cidade: Timbó

Registro nr 2

Cadastro de Cidades

Código: 2

Cidade: Blumenau

2º registro

Cadastro de Funcionários

Código: 2

Nome funcionário: Eric Tomas

Cidade: Timbó

3º registro

Cadastro de Funcionários

Código: 3

Nome funcionário: Jurandir

Cidade: Blumenau

Integridade: No Cadastro de Cidades se tentar excluir a cidade de Blumenau ou Timbó o programa ( ou banco de dados ) NÃO deverá permitir. Se

isto acontecer, teremos 3 registros no Cadastro de Funcionários sem suas

respectivas cidades ! Lembre-se, o campo cidade do Cadastro de

Funcionários esta relacionado com o Cadastro de Cidades, que é o local onde

buscamos as cidades.

Cidade “filha”

Cidade “filha”

Cidade “filha”

Page 36: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie as duas tabelas abaixo com o utilitário Database Desktop.

� Formulário de Funcionários.

Cadastro de Cidades Cadastro de Funcionários

Funcionários: Insira um componente Table, defina a propriedade DatabaseName = Alias X, Name = Funcionario_TB,

TableName = Funcionários.db, clique em Funcionário_TB, clique no

botão direito, Add All Fields, clique em Funcionário_DS, na propriedade DataSet defina Funcionários_TB.

Cidades: Insira um componente Table, defina a propriedade

DatabaseName = Alias X, Name = Cidades_TB,

TableName = Cidades.db, clique em Cidades_TB, clique no botão direito,

Add All Fields clique em Cidades_DS, na propriedade

DataSet defina Cidades_TB.

Cidade: Insira um componente DBLookupComboBox1, clique nele e defina as propriedades abaixo:

DataSource = Funcionário_DS DataField = Func_Cod_Relaciona_City ( campo relaciona ) ListSource = Cidades_DS ( Datasource ) ListField = Cid_Cidade ( campo a ser listado ) KeyField = Cid_Cod ( campo chave )

Page 37: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Abra o utilitário Database Desktop, clique em File, clique em Working Directory e defina o caminho onde estão as tabelas.

� Abra a tabela de Funcionários, clique em Table, clique em Restructure, será aberta a tela abaixo, role até a opção Referential Integrity ( integridade referencial ) e clique, clique no botão Define ( que surgirá ).

Page 38: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Clique no campo que relacionaremos

Func_Cod_Relaciona_City, clique na setinha pra

direita.

Clique na Tabela Cidades, clique

na setinha apontando para esquerda, clique

no botão OK, será solicitado um nome para a

integridade, digite o nome

Func_City.

Nome da integridade

Page 39: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Insira um botão do tipo Bitbtn e no evento OnClick digite o código abaixo:

Ao clicar no Navegador de registros retornará a Ao clicar no botão Excluir será mostrada Caixa de mensagem de erro abaixo: caixa de mensagem abaixo.

Page 40: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Sistema básico com alguns módulos

� Tela senha de acesso. Tela de acesso, o usuário terá 3 chances para digitar a senha corretamente, caso contrário o programa abortará.

Insira um componente MaskEdit, defina a propriedade PasswordChar diitando um

asterisco ( * ), ou algum outro caracter que será mostrado no

campo da senha.

Page 41: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie um menu para os programas.

Cria o fundo gradiente no formulário da

senha.

Insira um PopUpMenu, clique duplo sobre este objeto e defina duas opções – Sócios e Empresas: Clique na propriedade Caption, digite Sócios, na propriedade Name digite

Socios2. Ao clicar no botão direito haverá um atalho

para os dois programas. Clique no formulário Módulo Principal, clique na propriedade PopupMenu e defina PopupMenu1.

Page 42: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Icone MainMenu1

Formulários abaixo são carregados para memória dinamicamente ( de forma + rápida ).

Clique duplo no componente MainMenu1 e defina as propriedades: Clique na propriedade Caption, no lado direito digite Cadastros, na propriedade Name, digite Cadastros1, agora defina

as propriedades para Sócios, Empresas, Recibos e Sair.

Outra maneira:

Page 43: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Defina os formulários que serão carregados de maneira dinâmica: Project – Options – Forms e posicione os formulários a serem carregados dinamicamente para o lado direito da tela ( coluna = Available forms ).

Page 44: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Criaremos um modulo onde conterá os componentes de dados:

Insira 3 componentes Table e 3 DataSources e definas as propriedades DatabaseName = Alias, TableName = Sócios_TB, clique em

Sócios_DS defina o DataSet = Sócios_TB e a propriedade Name = Sócios_DS.

Como padrão os nomes serão Table1, Table1 e

Table3, DataSource1, DataSource2 e DataSource3, mude as propriedades de acordo

com o exemplo.

No Cadastro de Sócios criaremos a numeração

de registros automaticamente ( via programa ). Na seção Private crie a variável

NrProx

Page 45: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 46: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie a tabela Cadastro de Sócios com os campos abaixo:

O primeiro Edit é utilizado apenas para localizar registros, não é campo que faz parte

da tabela.

Insira um StatusBar, clique duplo, clique no botão amarelo 7

vezes (Add new ) para criar as

divisões.

Nesta divisão será mostrado a quantidade de registros que estão na tabela.

Clique no campo código e na propriedade ReadOnly = True . Desta forma não será

possível “digitar” o código. Lembre-se que foi criado uma variável para criar o código automaticamente – auto-incrementador.

Page 47: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Localizará pelo Código do Sócio ou através do

Nome ( o campo Nome é um índice secundário ).

Soma quantidade de registros que há na tabela e mostrará na

barra inferior.

Soma todos os salários da tabela

e mostra no Label10.

Ao fechar o formulário e se for alterado algum campo, antes de

fechar será solicitada confirmarção para a gravação ou não do registro corrente.

Page 48: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

No campo Edit_Localiza será aceito somente “letras”.

Ao excluir o registro corrente.

Se for ativada uma das 3 teclas

abaixo, estas serão mostradas na

barra de status:

Caps, Del ou NumLock.

Page 49: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 50: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Verifica se registro esta em edição ou alteração, grava o registro e toca um som do tipo .wav

No campo Nome Sócio será aceito somente letras.

Ao clicar no botão será localizado um Sócio

através do seu código.

Procura registro através do nome

informado.

Page 51: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Apaga TODOS os registros da tabela

mediante confirmação.

Navega nos registros, permitindo apagar o registro, usar setinha

para cima e para baixo etc.

Page 52: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie a tabela Cadastro de Recibos com os campos abaixo:

Page 53: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Insira um componente DBLookupComboBox1 ( aba

DataControls ) e defina as propriedades de acordo com o gráfico.

Insira um segundo

DBLookupComboBox2 para a Empresa e definas suas propriedades.

Page 54: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie a tela para pesquisar Nomes, após encontrar o Nome este será transportado para a tela de Recibos.

Insira um DBGrid, clique duplo sobre o Grid, insira duas colunas clicando na pastinha amarela ( Add

new ) e defina a propriedade FieldName = Nome_Socio e Cidade.

Insira um botão Bitbtn e na propriedade ModalResult defina o valor para MrOk

Esta é uma maneira prática para selecionar registros. Ao clicar no botão acima ( setinha

vermelha ) será aberta uma tela ( veja abaixo ), serão listados todos os Sócios cadastrados, digite as letras iniciais do Sócio que deseja procurar ou

clique sobre ele, após clique no botão OK, o registro será transportado para a tela de Cadastro de

Recibos.

Page 55: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja abaixo, foram digitadas as letras JUR, o cursor esta posicionado no registro JURANDIR PELLIN.

Ao clicar OK o registro selecionado JURANDIR PELLIN será transportado para a tela de

Recibos no campo Nome Sócio.

Indice secundário.

Page 56: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Filter ���� Procurando registros Crie um Cadastro com os campos Nome e Data de Aniversário. Com o Filter é possível pesquisar registros registros através de qualquer campo.

Clique no componente Clientes_TB, clique no evento

OnFilterRecord e digite o código.

O campo Data_Aniver não é campo de índice secundário, é apenas um mero campo.

Na linha Uses digite a biblioteca DateUtils.

No campo Edit digite somente: dia ou o mês ou o ano.

Insira um componente RadioGroup ( Standard )

Page 57: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Resultado do código da página anterior:

Segue abaixo outra maneira:

Page 58: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Mesmo campo para procura e grava registro

Na situação a seguir usaremos um único campo para procurar um registro e também para gravá-lo. Após o usuário digitar um código que já existe, este registros será trazido para memória.

� Crie a tabela abaixo:

� Crie o formulário abaixo, insira dois componentes Tables e dois DataSources. Nos dois Tables abaixo usaremos a tabela de ClientesX ( uma única tabela ). Clique em Table1, defina as propriedades DatabaseName = Alias, clique em TableName = ClientesX.db, clique em Name defina o nome Clientes_TB, clique em DataSource, defina o nome Clientes_DS, clique na propriedade DataSet = Clientes_TB, propriedade Name = Clientes_DS, clique em Clientes_TB e defina Active para True. Clique em Table2, defina as propriedades DatabaseName = Alias, clique em TableName = ClientesX.db, clique em Name defina o nome Table_Aux_TB, clique em DataSource, defina o nome DataSource_Aux_DS, clique na propriedade DataSet = Table_Aux_TB, propriedade Name = DataSource_Aux_DS, clique em Table_Aux_TB e defina Active para True.

Insira um DBNavigator, clique na propriedade DataSource defina

Clientes_DS.

Page 59: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Código fonte do programa acima:

Page 60: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Registro duplicado não permitido Como evitar a duplicação de registros ? Uma pessoa ou registro pode ter somente um único código. � Crie uma tabela. O campo código é “ I “ ( Long Integer )

� Clique no componente Table1, clique no evento OnPostError e digite o código abaixo:

Page 61: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Outra forma:

Page 62: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� CGC ���� Como validar ?

Após sair do campo CGC ( perder o foco do campo ), será mostrada

uma menssagem confirmando validade do CGC digitado.

Função Right

Função Cgc

DBEdit5 é o campo onde digitamos o número do CGC.

Page 63: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� CPF ���� Como validar ?

���� TryStrToFloat ���� Como aceitar somente valor ?

O conteúdo digitado no campo do CPF será verificado no evento OnExit, ou seja,

quando perder o foco do campo.

Page 64: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como reajustar todos os “salários” de uma tabela ? ( 1 )

Mostra como efetuar “reajuste salarial” em todos os registros da tabela com um determinado percentual utilizando os componentes SpinEdit ( aba Samples ), ProgressBar ( aba Win32 ).

Insira um componente SpinEdit ( aba Samples ).

Insira uma ProgressBar ( aba Win32 ).

Retângulos pontilhados são usados pela ProgressBar.

Page 65: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como reajustar todos os “salários” de uma tabela ? ( 2 )

Atualizará todos os preços unitários da tabela no percentual informado.

Insira uma ProgressBar ( aba Win32 )

A linha em vermelho mostra como

arredondar o valor.

Page 66: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como somar todos os “salário” ?

Após clicar será lido todos os registros da tabela e somará todos os campos salário na variável Total.

No evento OnClick do botão Calcula ( Bit_Calc_Salarios ) digite o código abaixo.

���� Como fazer barra de título piscante ?

Insira um Timer ( aba System ), clique duplo sobre Timer e digite o código abaixo. Este código fará com que a barra de título pisque

sem parar.

Page 67: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como criar um campo temporário com relacionamento e pesquisa ?

No exemplo a seguir veremos como criar “campo temporário”, relacionamentos e mais uma maneira de pesquisar registros. � Crie as duas tabelas abaixo: Na tabela Alunos.db há um campo chamado de Alun_Cod_Relaciona ( este campo não ficará visível no formulário de Cadastros de Alunos, finalidade deste campo, é unicamente fazer o relacionamento), que será o campo usado para fazer o relacionamento da tabela de Alunos com a tabela Professores.

� Use o Form Wizard para criar o formulário de entrada de dados para cadastrar os Alunos.

� Agora vamos fazer o relacionamento para buscarmos o nome do professor. Insira um componente DBEdit, defina duas propriedades, DataSource para Alunos_DS, DataField para Alun_Cod_Relaciona. Insira um Table e um DataSource, altere os nomes destes componentes: Table para Profe_TB, DataSource para Profe_DS. Clique Profe_TB, defina a propriedade DatabaseName = Alias, TableName para Professores.db ( nome da tabela ). Clique em Profe_DS, DataSet defina Profe_TB e Name para Profe_DS. Vamos criar o campo temporário para “mostrar” o nome do professor. Clique no componente Alunos_TB, clique no botão direito, clique em New Field, será mostrado uma tela para definir o nome do campo, tipo, tamanho etc , veja na página a seguir:

Tabela: Alunos.db

Tabela: Professores.db

Altere as propriedades básicas do formulário: Caption para Cadastro

de Alunos, Name para Alunos_Frm. Altere as propriedades dos componentes de dados, Table1 para Alunos_TB, DatabaseName = Alias, TableName para Alunos.db,

DataSource para Alunos_DS, DataSet para Alunos_DS.

Estas são as propriedades básicas para personalizarmos o formulário.

Page 68: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Observe com atenção cada opção da tela abaixo. Digite o nome do campo ( Nome_Profe_Temp ), String porque é um campo “texto”, o tamanho é de “20 caracteres”, tipo de campo “lookup, ou seja, campo tipo drop-down”, campo chave é “Alun_Cod_Relaciona” ( campo que foi criado na tabela de Alunos ), DataSet é Profe_TB, chave de pesquisa “Profe_Codigo”, o que será resultado ( nome do campo que será mostrado ), nome do professor ( Profe_Nome ).

� Abaixo está o campo temporário Nome_Profe_Temp, arraste-o para dentro do formulário.

Clique no componente Alunos_TB, clique duplo, será aberto a tela acima com todos seus campos. Sempre escrevo “Temp” no final do nome do

campo para diferenciar um campo físico de um campo temporário ☺

Arraste o campo para dentro do

formulário

Traduzindo caixa campo temporário: Name ........... : nome do campo ( temp - temporário ). Type ............. : tipo do campo – string = texto. Size .............. : tamanho do campo ( 20 caracteres ). Lookup ......... : veja no lado direito – drop-down. Keyfiels ........ : nome campo para relacionar. Dataset ........ : dataset-Professores para buscar o nome do Professor. Lookup keys . : chave primaria campo Professor. Result field .. : resultará mostrando o nome do Professor.

Page 69: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Agora vamos inserir um componente Bitbtn ( botão ) para abrir a tela de pesquisa dos professores, nomeie este botão para Bit_Procura e no evento OnClick digite o código abaixo:

� Insira um novo formulário, na propriedade Name defina o nome para Localiza_Frm.

Insira um componente DBGrid, um Edit e 3 botões do tipo BitBtn.

Adiante criaremos um formulário para filtrar os registros chamado de Localiza_Frm.

Clique no botão OK, altere a propriedade

ModalResult para mrOK.

Clique duplo sobre o DBGRid, será aberta a tela ao lado, insira uma coluna ( add new )

( setinha vermelha ), veja na página seguinte mais propriedades ...

Page 70: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique no DBGrid, defina a propriedade ReadOnly para True, lembre-se, o Grid serve somente para mostrar os nomes dos professores, e não para cadastrar, alterar ou excluir.

� No evento OnChange do Edit digite o código abaixo. Note na linha With foi informado Profe_Frm para indicar que o componente ( table – tabela ) Profe_TB está no formulário de Professores.

Quando for aberto o formulário de consulta de professores o cursor estará posicionado no Edit para imediamtamente iniciar a procura de um possível nome de professor.

Abra a tabela de Professores e crie um

índice secudário chamado de Inome_profe

Digite as linhas abaixo nos respectivos

eventos, OnShow e OnClick.

Clique no primeiro item ( 0 – Prof_Nome ), defina o

nome do campo na propriedade FieldName e mais abaixo a

propriedade Caption Nome do Professor.

Se você esta na tela de pesquisa de Professores, e se o professor que

estiver procurando não existir, clique no botão “Professores” para cadastrar novos “teachers”

Page 71: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� PageControl e SatusBar ���� Controle de páginas e Barra de status Usaremos o componente PageControl ( aba Win32 ) e o componente SatatusBar ( aba Win32 ). � Insira um formulário ( New Form ) � Insira um PageControl, clique no botão direito, clique na opção New Page para inserir novas páginas ou abas.

� Selecione o formulário, na propriedade Caption digite Page Control e na propriedade Name digite PageControl_Frm. � Insira 3 componentes Table e 3 componentes DataSource. Já aprendemos anteriormente as propriedades básicas que devem ser definidas para os componentes Table e Datasource. Passos: Clique no primeiro Table, clique na propriedade DatabaseName e digite o Alias ou caminho onde estão armazenadas as tabelas, clique na propriedade Name e digite Emp_TB, defina a propriedade TableName = Empresas.DB. Clique no componente DataSource1, na propriedade DataSet defina Emp_TB , na propriedade Name = Emp_DS. Clique em Emp_TB, clique no botão direito, Fields Editor, clique direito, Add fields e clique OK. Todos os passos acima deverão ser repetidos para as duas outras tabelas (Tables e Datasources ) - ( Funcionários e Cidades ). � Clique duplo no componente Func_TB, será aberta uma pequena tela mostrando os campos, selecione-os, clique no primeiro campo ( Func_Cod ), mantenha a tecla Ctrl pressionada e clique nos campos desejados, clique na área azul ( note que todos os campos selecionados ), arraste-os para dentro da TabSheet_Empresas, solte-os, estes serão posicionados no corpo do TabSheet_Empresas. Este processo é feito para definir os campos, é apenas uma forma rápida, caso contrário teríamos que definir campo a campo ☺.

� Clique no centro do form para selecionar a TabSheet1 ( página ), na propriedade Caption altere o nome de

TabSheet1 para Empresas, este passo deve ser repetido

para as outras duas Tabsheets 2 e 3. Altere também a

propriedade Name de cada TabSheet1 para

TabSheet_Empresa, TabSheet_Funcionarios

TabSheet_Cidades.

Page 72: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique no TabSheet_Empresas, insira dois botões Bitbtn para navegar nos registros.

� Insira uma StatusBar ( aba Win32 ), esta ficará posicionada no rodapé da tela corrente, clique duplo sobre ela e clique 4 vezes na pastinha amarela ( Add new ), para inserir 4 divisões na StatusBar.

Insira um DBNavigator ( aba Data Controls ), defina a

propriedade DataSource para Func_DS.

Page 73: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja abaixo o programa fonte completo:

Page 74: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja abaixo vários posicionamentos das “abas ou palhetas”, altera a propriedade TabPosition.

Page 75: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

No exemplo abaixo há apenas um DBNavigator1 ( navegador de registros ), no exemplo anterior havia um navegador para cada cadastro.

Page 76: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

No evento OnChange do PageControl digite o código abaixo:

Inserindo ícones para os Tabs (abas): Na barra de componentes do Delphi – aba Win32 selecione o componente ImageList, clique duplo para selecionar

os ícones desejados, selecione PageControl, na propriedade Images clique para definir ImageList1. Após será definido automaticamente os ícone

para cada Tab (de acordo com a numeração) ☺

Clique no PageControl e na propriedade Image defina o

componente ImageList1.

Clique nesta região para

melhor selecionar a

PageControl.

Page 77: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� CEP ���� Como formatar ?

���� PopMenu ���� Como criar menu ? Cria um menu de atalho ao clicar no botão direito do mouse. � Na aba Standard , insira um componente PopupMenu, selecione o campo código EditCodigo, na propriedade PopupMenu deste campo informe PopupMenu1, desta forma quando o ponteiro do mouse estiver sobre este campo e se clicado no botão direito do mouse será aberto o menu de atalho. Para definir opções no PopupMenu, clique duplo sobre PopupMenu, será aberta uma outra tela, no primeiro Caption informe Cor de fundo e no segundo Caption informe Cor da letra.

Clique duplo para definir as procedures que serão no evento

onclick.

Após clique duplo sobre PopupMenu será aberto uma tela para definir os Captions e Eventos.

Ao clicar o botão direito.

Page 78: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� WAV ���� Como reproduzir um arquivo de som do tipo “.wav”

Para reproduzir sons no formato WAV é simples. Na linha Uses inclua a cláusula MMSystem. � Crie um botão chamado de Som, no evento OnClick digite a linha de código abaixo: O arquivo de som aqui é Dog.Wav, poderia ser qualquer outro arquivo.

SND_ASYNC Executa o som assincronicamente, a função retorna assim que inicia o som. SND_NODEFAULT Especifica que se o som não pode ser tocado a função não toca o som padrão. SND_MEMORY Use se o som está em um arquivo de recursos. SNDLOOP Especifica que o som não deve para de tocar até que outro som seja chamado. SND_NOSTOP Faz com que o som não possa ser interrompido por outro, retorna FALSE se isto ocorrer.

���� Splash Screen ���� Como criar tela de abertura ?

Criando tela de abertura do sistema. � Insira um form. � No ícone View Unit abra seu projeto.

Insira uma figura, aba Additional – Image, na

propriedade Picture escolha um arquivo de

imagem.

Page 79: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como carregar uma imagem .bmp quando carregar o form ?

���� Como adicionar um percentual em um valor ? Temos 3 campos edits, no primeiro campo será digitado um valor, no segundo um percentual e no terceiro edit será armazenado o total já acrescido do percentual, ou seja, valor atualizado. Teremos um problema por causa do uso do “ponto” ( 100.22 ).

Insira um componente Image ( aba Additional ), um

componente OpenPictureDialog ( aba Dialogs )

Imagem deve estar na pasta do projeto corrente.

Page 80: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Para resolver este problema precisamos fazer uma pequena função para remover o “ponto” do valor ( 100.22 ). Solução do “ponto” no valor ( 100.20 )

Page 81: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Encriptografando senha

Page 82: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� DBGrid e SQL ���� Um único DbGrid com resultados diferentes Neste exemplo usaremos um DBGrid, e faremos vários DataSources, fazendo combinações com para retornar um resultado no Grid.

� Vamos criar um Modulo de dados para concentrar todos os componentes Query. Insira um DataModule, na propriedade Name defina o nome DM_Qr. Clique em File – New – DataModule, insira 8 Query ( plural queries ), defina os nomes de acordo com o gráfico abaixo. Defina a propriedade DatabaseName seu alias para cada Query do projeto corrente. As Query ( queries ) abaixo serão usadas adiante para fazermos os relatórios.

Tabela: Produtos.db

Cada DataSource que esta no formulário Grid deverá ser associado com um Query do

módulo DM_Qr. Clique em File – Use Unit e selecione DataModulo. Clique em Produtos_Todos_DS, clique na propriedade DataSet e associe com seu respectivo Query

ou, Produtos_Todos_Qr.

Page 83: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Agora vamos definir os códigos de SQLs para cada Query que será utilizado. Clique no componente Query1, clique na propriedade SQL, clique no lado direito em TStrings (...) e digite o código SQL para cada componente ( Query1, Query2 ... )

� Insira um segundo DataModulo, na propriedade Name defina o nome DM, insira 1 Table e 1 DataSource, defina o nome ( name ) do componente de acordo com o gráfico abaixo, clique em Produtos_TB, na propriedade DatabaseName defina o Alias ( ou caminho da tabela ), clique na propriedade TableName, defina o nome da tabela que será usada aqui Produtos.db, clique duplo em Produtos_TB, clique no botão direito, clique em Add fields e Ok.

Query1 SELECT Prod_Codigo, Prod_Descricao, Prod_Qtde, Prod_Data, Prod_Obs FROM "Produtos.db" Produtos WHERE (Prod_codigo >= :Cod_Inicial) and (Prod_codigo <= :Cod_Final)

Query2 SELECT Prod_Codigo, Prod_Descricao, Prod_Qtde, Prod_Data, Prod_Tipo FROM "Produtos.db" Produtos WHERE (Prod_Data >= :Data_inicial) and (Prod_Data <= :Data_Final) and (Prod_Tipo = :Tipo)

Query3

Não digite nada ☺

Query4

Não digite nada ☺

Query5 SELECT Prod_Codigo, Prod_Descricao, Prod_Qtde, Prod_Data, Prod_Tipo FROM "Produtos.db" Produtos WHERE (Prod_Data >= :Data_Inicial) and (Prod_Data <= :Data_Final)

Todos_Produtos_Qr

Todos_Produtos_Igual_Qr

Produtos_Maior_Que_Qr

Page 84: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie o formulário de Produtos para dar entrada aos produtos.

Estando no DM ( Data Module ), clique em Produtos_TB, defina o DatabaseName = Alias, defina a propriedade Name =

Produtos.db, clique em Produtos_TB, clique no botão direito, clique em Add fields e Ok, selecione todos os campos, arraste-os para

dentro do formulário, clique na propriedade Active e defina o valor True. Esta é uma rápida maneira para criar o formulário de entrada de

dados para os Produtos, a propósito, já vimos ☺

No evento OnCreate do DM ( DataModulo ) abra a tabela de Produtos.

Page 85: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Insira um Form, um DbGrid, 7 Datasources, 19 botões BitBtn e10 Edit. Adiante veremos as propriedades que deverão ser definidas para cada um dos componentes que estão no formulário.

Produtos – código fonte

No formulário de Produtos, no evento OnClose digite este código.

Ao fechar o formulário será verificado o registro se foi inserido

ou alterado e será solicitada confirmação.

Page 86: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Seleções – código fonte do programa

Abaixo segue os código utilizados no formulário Seleções ( veja o formulário na página anterior )

Page 87: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 88: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

No início do programa, na cláusula Private digite a linha Procedure Limpa_Grid;

Digite a procedure abaixo:

Page 89: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

SUM () Soma AVG () Média MAX () Máximo MIN () Mínimo COUNT(*) Conta registros

Page 90: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 91: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Localiza uma descrição ou outra.

Selecionará o código que for digitado no

Edit5.Text.

Page 92: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório

Vamos criar os relatórios do programa que criamos na página anterior usando SQL. � Crie um formulário para seleção. Insira um formulário, 3 botões Bitbtn, 8 edit ( edits ) e um componente RadioGroup. Criaremos 5 formulário para os relatórios

RegsX é uma variável.

Page 93: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Lista “todos” os registros.

Associe cada QRDBText com o seu respectivo campo

Atenção ! DM_Qr é o módulo onde contém todos os Query ( queries ) utilizados neste

exemplo, portanto, este deve vir por primeiro para indicar a origem

de todos os outros Query.

DM_Qr.Produtos_Todos_Qr ...

Dataset: DM_Qr.Todos_Produtos_Qr

Todos_Produtos_Todos_Produtos_Todos_Produtos_Todos_Produtos_QQQQrrrr

Page 94: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Listará todos os registros “iguais ao código digitado”.

Dataset: DM_Qr.Todos_Produtos_Igual_QR

Todos_Produtos_Igual_QrTodos_Produtos_Igual_QrTodos_Produtos_Igual_QrTodos_Produtos_Igual_Qr

Page 95: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Listará todos os registros “por período”

Dataset: DM_Qr.Query1

QueryQueryQueryQuery1111

Page 96: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Listará por “data e tipo”

Dataset: DM_Qr.Query2

QueryQueryQueryQuery2222

Page 97: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Listará “perído e opção selecionada”

Dataset: DM_Qr.Query5

Page 98: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

QueryQueryQueryQuery5555

Page 99: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Faremos um relatório com quebra por datas ( período )

Clique em Query_Data, clique na propriedade DatabaseName e defina o Alias, neste caso Dm_Sqls

Group Header: Insira uma banda QrGroup, insira nesta banda um QrExpr, clique em QrExpr e na proprieade Expression digite Query_Data.Prod_Data, clique na banda QrGroup e na propriedade Expression digite Query_Data.Prod_Data

Group footer: Insira um componente QrExpr, clique em QrExpr e na propriedade Expression

digite SUM(Query_Data.Prod_Qtde), clique na propriedade ResetAfterPrint e defina o valor para True.

Summary : Insira um componente QrExpr, clique em QrExpr e na propriedade Expression

digite SUM(Query_Data.Prod_Qtde), clique na proprieade ResetAfterPrint e define o valor para True . Insira um QrSysData, mude a propriedade Data para qrsDetailCount, na propriedade Text digite Regs:

Clique na região branca e defina o DataSet para Query_Data

Page 100: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Adicione dois Edit e um botão do tipo

Bitbtn

Formulário do relatório.

Page 101: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Resultado

���� Rotinas ���� Como criar ?

Como o próprio nome sugere “rotinas”, ou seja, pedaços / trechos de linhas de código que são muito usadas em vários programas do seu projeto. Um arquivo de rotinas pode conter várias rotinas. Uma rotina pode conter várias linhas de código e terá um único nome. Quando precisar chamar uma rotina em outro programa não repita linhas de código, digite apenas o nome da rotina desejada. Veja adiante um exemplo ( básico ): � File • New • Unit Você terá o código abaixo padrão:

Page 102: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Rotina Mensagem

Crie uma nova rotina. File – New – Unit. Como padrão o Delphi atribui o nome de Unit1, salve o arquivo que conterá todas as suas rotinas com o nome de Rotina_Exemplo

���� Usando rotina acima � Abra seu programa (ou projeto) para aplicar a rotina que acabamos de criar. � Clique em Add to project (+) e adicione o arquivo de rotina ( Rotina_Exemplo ) � File Use Unit e selecione o arquivo de rotinas.

Este é o nome da procedure.

Onde estão as mensagens.

Resultado da rotina. Quando perder o foco será mostrada a

caixa de mensagem.

Page 103: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Rotina cores ���� Para mudar cores dos campos Criaremos uma rotina para mudar a cor do campo quando “sair / perder o foco “ do campo corrente. � Crie um arquivo para armazenar as rotinas. File New Unit Ok e digite o conteúdo a seguir, salve a Unit com o nome Minhas_Rotinas. unit Minhas_Rotinas; interface uses dbctrls, Graphics; // DbCtrls = dentro deste há as definições do Objeto TDbEdit // Graphics = dentro deste há as definições das cores clYellow etc Procedure Entra_Cor(Sender : TObject); Procedure Sai_Cor(Sender : TObject);

Implementation

Procedure Entra_Cor(Sender : TObject); begin With TDBEdit(Sender) do begin Color := clYellow; Font.Color := clRed; end; end;

� Abra um formulário, na segunda linha dos Uses digite Minhas_Rotinas, para abrir o arquivo das rotinas.

� Selecione os objetos (campos) código e Nome apenas:

Clique no campo Código, no evento OnEnter digite Entra_Cor(Sender); Clique no campo Código, no evento OnExit digite Sai_Cor(Sender); Clique no campo Nome, no evento OnEnter digite Entra_Cor(Sender); Clique no campo Nome, no evento OnExit digit: Sai_Cor(Sender);

Procedure Sai_Cor(Sender : TObject); begin With TDBEdit(Sender) do begin Color := clBlue; Font.Color := clRed; end; end;

Digite esta linha

Digite a rotina Sai_Cor abaixo da rotina Entra_Cor.

Digite a rotina Entra_Cor abaixo do item Implementation

Page 104: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Quando for clicado no campo Nome do Produto a cor da letra e do fundo mudarão. Quando for clicado no próxmo campo a cor retornará ao normal.

���� Como somar, multiplicar e totalizar em um DBGrid ?

� Crie a tabela. Clique em Tools Database Desktop File New Table Paradox 7 Ok digite os campos como no gráfico ao lado, após grave clicando no botão SaveAs, nome do arquivo Movtos.

Lembre-se: Quando os dados estão visíveis é porque a

propriedade do table Active está com o valor True.

Note que a coluna Total está vazia. Para gerar o total

criaremos um campo virtual (temporário), ou seja, fará o calculo somente quando o programa for executado – não é um campo físico da

tabela. Insira um componente

DBGrid ( aba DataControls) , na

propriedade DataSource informe DataSource1.

Veja adiante as linhas de código dos

Labels.

Insira um DBNavigator (aba DataControls), na propriedade DataSource informe Datasource1.

Page 105: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Vamos criar um campo temporário para o total, posicione o ponteiro do mouse sobre Table1, clique no botão direito do mouse, clique em Fields Editor, clique no botão direito, clique New Field, digite o novo campo ( Total_Cal ).

Clique em Table1, no DabaseName defina o Alias “Cálculos”, propriedade TableName é Movtos.db. Clique no ícone DataSource1, propriedade Dataset defina Table1. Selecione o ícone Table1, no evento OnCalcFields digite a seguinte linha:

Page 106: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Data Module

Com este recurso podemos concentrar vários componentes, como: Table, Datasource, Query etc em um único módulo e apontar o DataModule para os formulários. Se não utilizar DataModule, você sempre terá que definir estes componentes em cada formulário utilizado.

� File – New Application � Crie duas tabelas, Fornecedores e Clientes

� File – New Application, será inserido um formulário, insira dois componentes DBGrid, na propriedade Name defina o nome para Data_Module_Frm.

Fornecedores

Clientes

Este formulário foi salvo com o nome

Modulo_Grid.pas

Page 107: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Vamos criar um módulo de dados. File • New • DataModule.

� Insira no Data Module dois componentes Table e dois DataSources.

� Clique no Table1, propriedade Name para Professores_TB, DatabaseName para Madruga ( Alias ), TableName para Professores.DB, clique em DataSource1, mude a propriedade Name para Professore_DS, e o DataSet para Professores_TB.

� Clique no Form onde estão os dois DBGrids, File, Use unit, abra a unit dos

módulos que foi nomeada Modulo_Dados, clique no DBGrid dos professores, na propriedade DataSource defina Professores_DS.

� Clique no DM_Modulo e no evento OnCreate digite: Professores_TB.Open; Clique no Table2, propriedade Name para Alunos_TB, DatabaseName para

Madruga ( Alias ), TableName para Alunos.DB, clique em DataSource1, mude a propriedade Name para Alunos_DS, DataSet para Alunos_TB

� Clique no Form onde estão os dois DBGrids, File, clique em Use unit, abra o

formulário dos módulos que foi nomeado de Modulo_Dados, clique no DBGrid dos professores, na propriedade DataSource defina Alunos_DS.

�� Clique no DM_Modulo e no evento OnCreate digite: Alunos_TB.Open;

Mude a propriedade Name para DM_Dados

Grave a unit como o nome de

Modulo_Dados.pas

Page 108: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

�� Conteúdo do DataModule, veja abaixo o evento OnCreate:

�� Abaixo esta o módulo de dados ( DM_Dados ):

�� DBGrid pronto com as duas tabelas no mesmo formulário.

Cadastro de

Professores.

Cadastro de

Alunos.

Page 109: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como ativar e desativar vários botões do navegador ?

No exemplo a seguir aprenderemos a “ativar” e “desativar” botões das operações básicas para gerenciar os registros de uma tabela. � Abra um novo formulário, insira 10 botões do tipo SpeedButton ( aba Additional ).

� Crie a tabela de Clientes.

Para alinhar o ícone no topo altere a

propriedade Layout e defina blGlyphTop.

Page 110: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Digite o código fonte abaixo em seus respectivos eventos.

Page 111: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 112: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 113: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Procura registro pelo código.

Page 114: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 115: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como animar “titulo” janela corrente ?

Não permitirá gravar conteúdo vazio no campo

data estiver.

O texto da barra de título estará em constante rolagem para o lado esquerdo da tela.

Page 116: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� ActionList ���� Como fazer várias ações ao mesmo tempo ?

Com o componente ActionList várias ações poderão ser feitas ao mesmo tempo. A seguir veremos um exemplo simples de navegar nos registro da tabela com operações básicas como : incluir, excluir, consultar e navegar nos registros. � Insira um form, e 8 botões Bitbtn, insira um Table, um DataSource e um ActionList ( aba Standard ).

� Clique duplo no componente ActionList1, clique na opção New

Standard Action, será a tela abaixo...

� Após clicado na opção New Standard Action será mostrada a tela ao lado ( direito ), clique em DataSet e Ok.

� Clique em Dataset selecione as ações, first

( primeiro), prior ( anterior ) etc... como esta no gráfico,

após clique Ok

Estas ações já estão disponíveis no Delphi.

Ações que foram selecionadas.

Page 117: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Após ter associado todos os botões execute e teste. Quando o ponteiro estiver no início da tabela o botão Anterior e Primeiro estarão desabilitados ( desativados ), este controle é feito automaticamente.

Outro exemplo: Insira dois botões Bitbtn no formulário, um botão “esconde barra” e outro “mostra barra”.

� Clique no primeiro botão, se já escreveu um texto para o Caption, tipo “Anterior”,

será convertido para inglês, clique na propriedade Caption e altere novamente

para português.

� Clique na propriedade Action, clique no dropdown e escolha a opção DataSetPrior ( o botão será para posicionar no registro Anterior ).

Cada botão terá uma ação a ele associado.

� Clique na pastinha amarela para criar novas ações, mude o

nome do Caption e da propriedade Name.

Clique no componente ActionList1, na propriedade

State defina asSuspendedEnabled.

Page 118: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique no botão “Esconde barra”, clique na propriedade Action, está no lado direito, selecione no dropdown a opção Action1_Esconde_Barra, clique na aba Events, clique duplo no evento OnClick e digite o código que está na página seguinte, clique no botão “Mostra barra” e repita os passos aqui descritos.

���� Como fazer uma tabela “passo a passo” ?

Crie os campos Código, Nome, Endereço, Cidade, Salário e Data usando o Database

Desktop. Insira um Form, insira 6 componentes Edit (aba

Standard), não use o Form Wizard. Este exemplo mostra

como usar Fieldbyname e Value para gravar registros.

Insira um componente Table e um Datasource (aba Data Access). Defina um Alias. Clique no Table,

clique no botão direito, Fields Editor, botão direito Add Fields e

Ok.

Page 119: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Digite o código abaixo

Ao clicar no botão Lê - Value será mostrado o

registro na tela ( memória ), após clique nas setinhas

para navegar nos registros.

AsString = converte o conteúdo para texto e mostra no Edit1.

Page 120: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Pega os valores da tabela e mostra na tela

( no Edit1 ).

Limpa todos os campos.

O conteúdo que está no Edit1 será movido para o campo Código na tabela (Table1).

Antes de mover o conteúdo do Edit1, este precisa ser convertido para inteiro, isto que o Código é um

valor inteiro.

Converte o conteúdo do campo Salário para

texto, para exibi-lo no campo Edit5.

Page 121: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Criando um recibo

Criaremos um programa para recibos. Crie a tabela abaixo após defina o Alias de nome Recibo_Dados. � Crie a tabela abaixo:

� Crie o formulário abaixo com respectivos campos.

Defina o Alias a propriedade TableName ... já vimos anteriormente em várias situações como fazer

isto.

Page 122: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Digite o código fonte abaixo:

Insira um componente SpinEdit ( aba Samples )

Ao clicar será aberta uma tela de seleções para imprimir o Relatório.

Page 123: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� File – New – Other e clique em Report, clique duplo no formulário para configurá-lo, veja o gráfico abaixo:

Page 124: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Insira 4 QRDBText. Clique em Nr_Recibo, clique na propriedade Name, defina o nome para QRDBText_Nr_Recibo, está sendo exibido o nome Nr_Recibo porque o campo foi associado a tabela e este nome foi definido na tabela ( nomeação dos campos ). Para associar os campos, clique em QRDBText1, clique em DataSet, defina Frm_Recibo_Dados.Recibo_TB, clique em DataField e defina o nome do campo Nr_Recibo. Os passos acima ( item 5 ) deverão ser seguidos para todos os campos deste relatório. Formulário do relatório:

� Crie uma unidade chamada Extensos. File – New – Unit. ( veja rotina adiante ) � Digite o código fonte abaixo do formulário Recibos.

Para os campos valor e histórico insira dois

componentes QRRichText1, defina a

largura e altura destes de acordo com este exemplo.

Definindo linhas: Clique na banda Page Header, clique em Frame, defina o valor das propriedade DrawBottom e DrawTop para True, defina a largura do fio na

propriedade Width para 2.

Page 125: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Resultado do programa:

Page 126: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Segue abaixo a rotina de extenso usada no exemplo acima ( File – New – Unit e salve o arquivo com o nome Extenso )

Page 127: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 128: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 129: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 130: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como criar Contas a Pagar “ básico “ ?

Criaremos um cadastro para Contas a Pagar e algumas telas de seleção de impressão para os relatórios com quebra / agrupamento de data. � Crie a tabela abaixo com os índices secundários.

O índice secundário INr_Cheque_Data_Vencto é composto por dois campos – Nr_Cheque e a Data_Vencto

� Tela Contas a Pagar ( programa básico ).

� Digite o código fonte abaixo:

Crie os índices secundários.

Indíce secundário formado por dois campos: Clique nos campos Nr_Cheque e

IData_Vencto, defina o nome do índice secundário de INr_Cheque_Data_Vencto.

No botão Imprimir, imprimirá todos os registros da tabela. Este relatório se encontra no

final deste projeto.

Page 131: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie a tela de critérios de acordo com exemplo abaixo, defina o nome ( Name ) de Opcoes1_Frm .

Listará registros somente com intervalo de código, ou

somente pelo período.

Se for clicado na opção Por Código.

Se for clicado na opção Por Data de Vencto.

Page 132: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 133: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie o formulário abaixo - Rel_Contas_Pagar2. ( File – New – Other – Report ).

Page 134: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

No formulário abaixo aumentei a largura das bandas para melhor identificar seus nomes.

� Após clique duplo no formulário do relatório será aberta a tela abaixo.

Page 135: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Listará os números dos cheques no intervalo de 1 até 200

� Listará o período de 10/01/2002 até 10/01/2002 ( ou seja, de um único dia )

Foi selecionada a opção Por Data de Vencto, os campos Código

Inicial e Código Final foram ocultos.

Page 136: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Segundo formulário do relatório: Agora faremos outro formulário que conterá mais combinações de filtragem de dados. Com o formulário abaixo poderemos listar pelo intervalo de código e por período.

Opção selecionada é Por Código e Data de Vencto

Opção selecionada, Por Data e Vencto

Opção selecionada, Por Código

Page 137: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja abaixo a distribuição dos campos e os nomes dos objetos:

Listará intervalo de código de 10 até 50

Insira as bandas de acordo com o gráfico

abaixo:

Page 138: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Listará o período: 10/01/2002 até 10/01/2002 ( ou seja, de um único dia )

Page 139: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Listará intervalo de código de 10 até 30 e no período de 10/01/2002 até 10/01/2002

O código abaixo refere-se ao formulário acima:

Page 140: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

O código abaixo refere-se a tela de opções acima:

Page 141: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 142: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 143: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Imprimindo conteúdo de um RadioGroup.

Este exemplo mostra como imprimir no relatório opções que foram definidas em um Radiogroup. � Crie a tabela abaixo:

� Crie o formulário de entrada de dados.

Insira um DBRadioGroup, no Caption digite Opções, clique na propriedade DataSource e defina DataSource1, DataField defina o

campo Estado_Civil, clique em Values e digite os números 1, 2 e

3 - “um abaixo do outro”, na propriedade Items digite um

abaixo do outro Casado, Solteiro e Divorciado

Campo que será usado no

RadioGroup.

Page 144: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� No botão Relatório digite o código abaixo:

� Crie o formulário do relatório. File – New – Other – Report e Ok.

Insira um componente Table, defina a propriedade

DatabaseName = Alias, propriedade TableName = Agenda.db, clique duplo

sobre o componente Table1, clique no botão direito, Add Fields e OK. Clique na região branca do formulário do relatório ( veja setinha verde ), clique na propriedade

DataSet e defina Table1

Insira um componente QRLabel para imprimir o

estado civil.

Page 145: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Digite o código abaixo no evento BeforePrint:

� Resultado do relatório:

Veja o Conteúdo do campo do

RadioGroup. RadioGroup.

Mais um exemplo usando Case ... of

Lembre-se, neste campo foi cadastrado apenas os números 1, 2 e 3 e não a descrição “Solteiro, Casada

ou Divorciado”)

Outra forma

Page 146: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Listando por intervalo de datas

Vamos imprimir registros somente do período selecionado. � Estamos na tela de cadastro e desta chamaremos a tela de seleção do relatório.

No botão “Abre tela de Seleção do Relatório Data” digite a linha abaixo no evento OnClick:

� Crie a tela abaixo para entrar com as datas ( clique no ícone Form ).

Insira dois componentes MaskEdit, clique na propriedade EditMask, será aberta

uma tela para formatar o campo. Usamos MaskEdit para formatar o campo data ou seja, basta digitar apenas o dia, mês e ano, as barras serão postas pelo

MaskEdit.

Page 147: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Continuando página anterior, clique duplo sobre o botão Relatório, no evento OnClick digite o código abaixo:

Page 148: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie o formulário do relatório abaixo – File – New – Other – Report – Ok

Listando todos os registro da tabela:

Listando registros por período : 01/01/1977 – 30/12/1978

� Insira um componente QRSysData1 ( aba QReport ) e altere a

propriedade Data para qrsReportTitle.

� Defina as propriedades de cada objeto, clique no Nome (QRDBText2 ), defina a propriedade DataSet para Table1 e DataField para Nome.

Estes passos deverão ser feitos para os objetos Código, Nome e

Data_Nasc.

� Clique no formulário, onde esta apontando o

balão, clique na propriedade DataSet e

defina Table1.

� Insira um componente Table1, defina DatabaseName = Alias,

TableName = Agenda.db, clique em Active defina o valor

para True.

Page 149: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Arquivo texto ���� Como salvar relatório em formato texto ?

Insira o componente QRTextFilter

( aba QReport )

QReport_Agenda é o relatório.

Page 150: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como mudar cor quando salário for menor que R$ 100 ?

Se o salário for menor que R$ 100,00 a cor será vermelha e se for maior a cor será azul. � Crie uma tabela que contenha os campos abaixo:

� Clique no componente DataSource1, clique no evento OnDataChange e digite o código abaixo:

Observe o campo Salário: Salário maior que R$ 100,00

Salário menor que R$100,00

Page 151: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Preview ���� Como criar preview personalizado para seu relatório ?

� Crie o formulário abaixo, cadastre 40 registros, pois com esta quantidade de registros proporcionará melhor visualização no “preview”.

� Digite a linha abaixo no início do formulário Agenda na seção Private:

� Crie o formulário abaixo – File – New – Other – Report - Ok

Digite.

Page 152: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Selecione o formulário do relatório QReport_Agenda, no evento OnPreview digite as linhas abaixo: Na linha Uses incluir QRPrntr

Explicação das linhas acima: Preview_PersonalizadoX_Frm Nome do formulário do relatório com “preview” personalizado. QRPreview1 Nome do objeto onde serão visualizados os registros. � A seguir vamos criar o formulário “preview”. Insira um novo formulário, clique no ícone New Form e insira os objetos abaixo de acordo com cada balão explicativo:

Insira uma StatusBar ( aba Win32 ), clique duplo sobre esta e crie 3 divisões clicando no botão

Add New ( Ins ).

Insira um componente QRPreview1 ( aba

QReport ).

Insira dois componentes SpinEdit

( aba Samples ).

Insira 10 botões Bitbtn, observe no programa fonte seus nomes

( propriedade Name ).

Insira um componente ProgressBar. ( aba Win 32 )

Page 153: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Parte inicial do programa do formulário “preview” personalizado.

Digite

Page 154: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 155: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 156: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja na página seguinte o resultado ...

Page 157: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Devido a quantidade de registros o relatório abaixo resultou 3 páginas: Paginando relatório – Página # 1

Página # 2

Página # 3

Observe: O conteúdo da banda PageHeader é impressa em todas as

folhas, já o conteúdo da banda Title é impressa somente na primeira

folha, compare as 3 telas.

Page 158: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como ler/mudar valor de um RadioGroup ?

� Temos o formulário Agenda, este formulário já foi feito anteriormente. No campo Radiogroup será clicado para informar o estado civil, se for Solteiro receberá o valor 1, Casado ( valor 2 ) e Divorciado ( valor 3 ). Você verá no DBGrid apenas números tornando a leitura um pouco difícil para o usuário. Agora mostraremos o estado civil escrevendo “Solteiro, Casado ou Divorciado”, e não representado por números.

� Precisamos fazer um campo calculado para mostrar a coluna Estado Civil e sua descrição por extenso e não através da representação numérica.

Insira um novo formulário, um Table, defina a propriedade DatabaseName = Alias,

TableName = Agenda.db, clique no DataSource1, clique na

propriedade DataSet e defina Table1, clique no DBGrid e defina

DataSource1. Insira um RadioGroup, clique na opção Items

e digite as palavras a seguir uma abaixo da outra: Solteiro, Casado e Divorciado, clique na propriedade Columns e digite o número 3.

Page 159: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Criando campo temporário:

� Clique no DBGrid, crie 3 colunas, clique na primeira coluna, pressione F11 para alternar para as propriedades, clique na propriedade FieldName e defina o campo Nome, repita este passo para os outros dois campos.

� Clique duplo sobre o componente Table1, clique no botão direito, clique em

New fields, será aberta uma tela para definir o nome do campo calculado, tipo e

tamanho.

Campo calculado que foi criado.

Page 160: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Outra maneira de fazer o código da página anterior:

� Clique duplo no componente Table1, será aberta uma pequena tela listando todos os campos, clique no campo Estado_Civil ( o conteúdo será Solteiro - receberá o valor 1 ), Casado ( valor 2 ) e Divorciado ( valor 3 ), pressione F11 para alternar para aba Events, clique duplo no evento OnGetText e digite o código abaixo:

Page 161: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Ao carregar o DBGrid será mostrada a descrição por extenso e não em forma de números ☺

���� Abrindo programa via parâmetros

Para abrir o segundo programa somente mediante senha. � Crie um formulário simples e salve o projeto com o nome Programa_par1.Exe.

� Na barra de títulos do Delphi, clique em Run, Parameters, será aberta a tela abaixo, digite a senha no campo Parameters.

Page 162: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Pressione a combinação Ctrl F12, clique no nome do projeto Programa_par1 e Ok.

� Veja abaixo o código da unit Programa_par1. ( unit do projeto )

� Crie o segundo formulário:

Digite o conteúdo que esta no quadro

pontilhado.

Page 163: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� No evento OnClick do botão acima digite as linhas de código abaixo:

� Estando com o Windows Explorer aberto, clique duplo sobre o programa Programa_par1.exe, é mostrada a caixa de diálogo de erro.

Ao clicar no programa Programa_par2.exe, abrirá o segundo programa.

O programa sera aberto através de

um parâmetro, neste exemplo, senha123

Page 164: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Concatenar ���� Como concatenar / juntar caracteres ? Imprime vários campos como se fossem um único. Ex: 1000-2A/10F=20V � Veja como imprimir vários campos concatenando-os.

� Crie um formulário como exemplo abaixo, insira 4 componentes DBEdit ( aba Data Controls ), associe cada DBEdit com a propriedade DataSource = Bancos_DS e DataField = Banco_Parte1.

Insira 4 Edits para fazer a pesquisa do registro, após

preenchido os 4 edits clique no botão Procura.

Altere as propriedades básicas do formulário: Caption para CÓDIGOS, Name para Concatenar_Frm. Altere as propriedades dos componentes dos

dados, Table1 para Bancos_TB, DatabaseName = Alias, TableName

= Alunos.db, DataSource = Bancos_DS, DataSet = Bancos_DS. Estas são as propriedades básicas para

personalizar o formulário.

Page 165: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Crie o formulário para o relatório, listaremos os códigos. Crie o campo calculado Codigo_Temp para concatenar ( juntar ) os códigos. Para criar, clique duplo sobre Table1, clique no botão direito, clique New field, será aberta a tela baixo, digite os campos:

Estamos executando um Findkey em vários

campos chaves primárias.

Page 166: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique no componente Table1, clique no evento OnCalcFields e digite o código abaixo:

Page 167: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Relatório ���� Imprime somente registro que esta na memória � Crie um formulário com os campos abaixo.

� Crie o formulário para imprimir o registro selecionado. File – New – Other – Report – Ok. Insira um componente QRLabel, clique na propriedade Caption e digite Relatório Agenda. Insira quatro componentes QRLabel, clique no Caption do primeiro componente e digite Código, nomeie todos os outros objetos de acordo como o exemplo abaixo.

Imprimirá o registro que esta na memória (

tela ).

Codigo é o nome do campo

da tabela.

Page 168: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Clique em File, Use Unit, clique em Agenda2 para abrir o formulário da Agenda.

� Clique na banda Detail e no evento BeforePrint digite o código abaixo:

Imprime somente o registro que esta na memória ( na tela ).

Page 169: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como proteger seu projeto ? ( 1 )

� Criaremos uma rotina para criptografar ( codificar ) o progra a ser protegido. Crie uma Unit com o código fonte abaixo, grave-a com o nome Rotina_EWB. File – New – Unit.

Palavra ou termo que será codificada, neste exemplo a palavra é

Sistema .

Page 170: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Configure o Delphi para que ele possa enchergar a unit de rotina Rotina_EWB.pas. Clique em Tools – Environment options.

���� Clique neste campo, apague o conteúdo da linha corrente e cole o caminho/path que esta

sua rotina, aqui:

C:\Delphi Madruga\Exemplo JURA'S

BOOK\Protege projeto\Sistema

XYZ\Rotina_EWB.pas

após clique

Add e Ok

���� Clique no botão, será aberta a tela

abaixo:

Page 171: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Veja tela abaixo, unit Rotina_EWB.pas foi adicionada.

� Crie um novo formulário ( ou projeto ) e coloque 3 labels e digite os textos abaixo. Este será o sistema / projeto a ser protegido contra cópias.

���� Pressione Ctrl F12 para abrir a lista das units, clique na unit Sis_Vendas e OK.

Page 172: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Digite o texto que está entre o retângulo pontilhado:

� Crie um novo projeto ( Protege_Meu_Software ) - File – New – Application. Após ter digitado programa fonte abaixo, compile-o e execute-o no computador do desenvolvedor ( programador ) para proteger o sistema, ou seja, será pego o serial da máquina do desenvolvedor e criptografá-lo, certamente o serial NUNCA será igual ao de outra máquina ☺ espero ☺. Caso alguém copiar o projeto Sis_Vendas e tentar rodar em outra máquina este não funcionará.

Protege.exe, tela abaixo, programa que ativa a proteção do

programa. Seu sistema.

Sistema que será protegido

Page 173: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Digite as funções abaixo da diretiva {$R *.DFM} Na

região onde a setinha vermelha está apontando.

Page 174: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

Page 175: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

� Alguém copiou o projeto Sis_Vendas ilegalmente e tentou rodar em outra máquina, será mostrada a caixa de diálogo abaixo e o programa será abortado / interrompido.

Page 176: jurandir1967.co.ukjurandir1967.co.uk/2_delphi/delphi_7_tutorials/__4_delphi_7_372__54… · Delphi 7 - by Jurandir – Timbó – SC - Brasil - Sharing knowledge 373 Procurando registros

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

���� Como proteger seu programa ? ( 2 ) Uma dica muito simples para "camuflar" uma proteção em seu sistema. Esta dica é boa se você mesmo for implementar a solução no computador do cliente. * Crie um arquivo qualquer, de preferência com extensão .dll, .vxd, .udf ou .ins (para deixar o pirateador confuso), dentro do diretório do \Windows ou \Windows\System; Desta forma o sistema só roda se encontrar este arquivo (como já disse, pode ser qualquer nome). Digite o código abaixo no evento OnCreate.

���� Como pedir senha na abertura do programa ? ( 3 ) É uma maneira de forçar digitação da senha antes de abrir a tela principal do sistema. Digite o código abaixo no evento OnCreate:

Be Always Thankful

Everything comes and goes