Escolar Documentos
Profissional Documentos
Cultura Documentos
_______________________________________________________________________________
DELPHI
_______________________________________________________________________________
6. RELATRIOS ................................................................................................................................................................ 57
CONSTRUO DE UM RELATRIO SIMPLES ...................................................................................................................................................... 58 CONSTRUO DE UM RELATRIO MASTER/DETAIL ......................................................................................................................................... 59
_______________________________________________________________________________
BDE
O Borland Database Engine o corao do Delphi em suas aplicaes com banco de dados principalmente usando Paradox e dBase. O BDE uma coleo de DLLs que as aplicaes de banco de dados iro fazer chamadas. Cada estao de trabalho que tiver a aplicao de banco de dados instalada dever ter tambm o BDE instalado. O Delphi vem com a instalao do BDE para voc adicionar a sua aplicao. O BDE permite a voc usar tabelas dBase, Paradox ou ODBC em modo multi-usurio. A verso Cliente/Servidor do Delphi tambm vem com links para servidores de banco de dados como Oracle, Sybase, MS SQL Server, Informix, e InterBase.
BDE Administrator
Com o BDE Administrator voc pode alterar a configurao da BDE, por exemplo em Configuration/System/Init voc tem a propriedade Local Share que deve ser setada para True, quando voc quiser que a base de dados seja compartilhada em uma rede. Alm disso, voc pode criar Aliases, como no Database Explorer.
O BDE Administrator
_______________________________________________________________________________
_______________________________________________________________________________
DataBase Desktop
O DataBase Desktop uma ferramenta do DELPHI para manipulao de Banco de Dados. Ela til principalmente para: criao de banco de dados; alterao das caractersticas dos campos.
EXEMPLO: criar uma tabela contendo os funcionrios de uma empresa. Para ilustrar o funcionamento do DataBase Desktop ser criada uma tabela de produtos com os seguintes campos: CDIGO, NOME DA PESSOA, IDADE, SEXO, ENDERECO, CIDADE, UF e SALRIO. Para isto devem ser seguidos os passos abaixo: PASSO 1 Clique na opo Tools no menu principal do DELPHI, e, em seguida, na opo Database Desktop. Neste momento ser aberto o programa Database Desktop. PASSO 2 No menu principal do Database Desktop selecione a opo File, seguida de New e, por fim, a opo Table (Erro! A origem da referncia no foi encontrada.). PASSO 3 O prximo dilogo permite que se selecione o tipo da tabela a ser criada. Selecione a opo Paradox 7 e clique em OK. As tabelas Paradox tem extenso (DB) e oferecem mais recursos que as tabelas DBase (extenso DBF).
Database Desktop: criando uma nova tabela. PASSO 4 Neste instante devem ser definidos os atributos dos campos, como segue: Field Name: define o nome do campo; Type: define o tipo do campo. Clicando com o boto direito do mouse pode-se selecionar o tipo do campo; Size: define o tamanho do campo. S est disponvel para alguns tipos; Key: define campos-chave para bancos de dados relacionais. Ainda nesta tela pode-se definir: Table properties: define caractersticas gerais dos campos da tabela; Required Field: define se o campo tem um valor requerido; Minimum Value: valor mnimo para o campo; Maximum Value: valor mximo para o campo; Default Value: valor default para o campo; Picture: define o tipo de campos figura.
_______________________________________________________________________________
Database Desktop: definindo os atributos dos campos PASSO 5 Clicando no boto Save As, deve aparecer uma caixa de dilogo para que se possa salvar a tabela em disco. D um nome a tabela e clique no boto Save. Verifique com ateno o diretrio onde est gravando a tabela. Neste instante a tabela foi criada. Para verificar se ela foi criada corretamente pode-se selecionar File | Open | Table no menu principal do Database Desktop, para poder abrir o arquivo gravado.
Table Properties
Em Table Properties voc define os vrios aspectos de configurao da tabela. Muitas dessas opes podem ser implementadas no Delphi e vrios programadores preferem no us-las no Database Desktop. Opo Validity Checks Table Lookup Secondary Indexes Referential Integrity Password Security Table Language Dependent Tables Descrio Validaes para os campos, como obrigatoriedade, valor mnimo e mximo Indica que o valor atribudo a um determinado campo tem que estar gravado em outra tabela Cria ndices secundrios Cria integridade referencial, geralmente utilizada em relacionamentos de 1 para N. Permite a criao de senhas, protegendo a tabela de acesso no autorizado Especificar o driver de lngua utilizado pela tabela, geralmente o Pdox ANSI Intl850 Mostra todas as tabela dependentes atravs da integridade referencial
Tipos de Campos
Os principais tipos de campos so mostrados abaixo, mas existem outros alm desses. Os tamanhos marcados com asterisco indicam que o campo pode guardar tamanhos maiores que os informados, o que ultrapassar o tamanho ser guardado em um arquivo externo com a extenso MB.
_______________________________________________________________________________
Tamanho 1-255 10 308 32767 2147483648
Aliases
Um Alias um nome lgico, um atalho para um banco de dados. Todo o trabalho do Delphi com um banco de dados pode ser feito baseado no Alias, de forma que para mudar de banco de dados, s necessrio mudar o Alias. Para criar um Alias voc pode usar Database Explorer, o BDE Administrator ou o prprio Database Desktop.
Database Explorer
Pode aparecer com os nomes Database Explorer ou SQL Explorer. Nele voc pode manipular os Aliases, navegar pelas estruturas dos bancos de dados, alterar os dados das tabelas e executar comandos SQL. Para criar um Alias selecione o item Databases, clique em Object/New, escolha o tipo do banco de dados, ou Standard para dBase, Paradox e arquivos texto, depois digite um nome do Alias, esse nome ser usado pelo Delphi quando voc quiser acessar o banco de dados, finalmente defina as propriedades do banco de dados na seo Definition, cada banco de dados ter suas prprias definies. O assunto ser abordado com detalhes posteriormente.
Paleta Data Access Componente TDataSource TTable Utilidade Atua como um conduto entre componentes TTable, TQuery, TStoredProc e componentes de controle, como um TDBGrid Adquire dados de uma tabela de banco de dados via o BDE e fornece dados para um ou mais componentes de controle de dados atravs do componente TDataSource. Envia dados recebidos de um componente para um banco de dados via o BDE. Usa estruturas em SQL para recuperar dados de uma tabela de banco de dados via o BDE, e fornece dados para um ou mais componentes de controle de dados atravs de um TDataSouce, ou usa estruturas em SQL para enviar dados de um componente para um banco de dados via o BDE. Habilita uma aplicao para acessar procedimentos armazenados em um servidor. Envia dados recebidos de um componente para um banco de dados via o BDE. Instala uma conexo permanente com um banco de dados, especialmente um banco de dados remoto requerendo um login do usurio e uma senha.
TQuery
TStoreProc TDataBase
_______________________________________________________________________________
Copia a estrutura de uma tabela ou seus dados. Pode ser usado para mover tabelas inteiras de uma formato de banco de dados para outro. Fornece gerenciamento global para um grupo de conexes a banco de dados dentro de uma aplicao. Delphi cria automaticamente uma sesso default se no for criada pelo usurio. Aplica cached updates como agente de queries ou stored procedures que no podem ser salvas diretamente no banco de dados. um componente Dataset que encapsula uma tabela de banco de dados que est aninhada como um campo dentro de uma outra tabela.
TUpdateSQL TNestedTable
Paleta Data Controls Componente TDBGrid Utilidade Grade padro de controle de dados que possibilita visualizar e editar dados de forma tabular, semelhante a uma planilha; faz uso extensivo das propriedades do TField (estabelecidos no Editor de Campos Fields Editor) para determinar a visibilidade de uma coluna, formato da visualizao, ordem, etc. Botes de navegao para controle de dados que move o apontador do registro corrente de uma tabela para o posterior ou anterior, inicia insero ou modo de edio; confirma novos ou modificaes de registros; cancela o modo de edio; e refresca (refaz) a tela para recuperar dados atualizados. Rtulo de controle de dados que pode mostrar um campo corrente do registro ativo. Caixa de edio de controle de dados que pode mostrar ou editar um campo corrente do registro ativo. Caixa de verificao de controle de dados que pode mostrar ou editar dados lgico de uma campo corrente do registro ativo. Caixa de Lista de controle de dados que pode mostrar valores da coluna de uma tabela. Caixa de Lista mvel de controle de dados que pode mostrar ou editar valores da coluna de uma tabela. Grupos de radio de controle de dados com botes de rdio que pode mostrar ou setar valores de colunas. Caixa memo de controle de dados que pode mostrar ou editar dados textos do registro corrente ativo. Caixa de Imagem de controle de dados que pode mostrar, cortar ou colar imagens BLOB bitmaps do registro corrente ativo. Caixa de Lista de controle de dados que mostrar valores mapeados atravs de outra tabela em tempo de compilao. Caixa de Combo de controle de dados que mostrar valores mapeados atravs de outra tabela em tempo de compilao. Representa um controle de edit multi-linhas que pode mostrar e editar um campo memo em texto rico em um dataset.. Mostra registros de uma fonte de dados em um lay-out com tipo de formato livre. derivado do TChart e herda todas suas funcionalidades. Adquire a srie de dados direto de um banco de dados.
TDBNavigator
TDBText TDBEdit TDBCheckBox TDBListBox TDBComboBox TDBRadioGroup TDBMemo TDBImage TDBLookupList TDBLookupCombo TDBRichEdit TDBCtrlGrid TDBChart
_______________________________________________________________________________
Usando DataSets
Para manipular e consultar bancos de dados, voc precisa entender o conceito de dataset. Um dataset no Delphi um objeto que consiste de uma srie de registros, cada um contendo qualquer quantidade de campos e um ponteiro para o registro atual. O dataset pode ter uma correspondncia direta, um-para-um, com uma tabela fsica, ou, como um resultado de uma query, pode ser um subconjunto de uma tabela ou uma juno de diversas tabelas. As classes de componentes Um dataset no Delphi o tipo de objeto TDataSet e uma classe abstrata. Uma classe abstrata uma classe de onde voc pode derivar outras classes, mas no pode criar uma varivel desta classe. Por exemplo, ambos os componentes Query e Table classificam-se como componentes TDataSet porque cada um foi derivado do objeto TDataSet. Note que voc no encontrar nenhum componente chamado TDataSet nas paletas. O TDataSet contm as abstraes necessrias para manipular diretamente uma tabela. a ferramenta utilizada para abrir uma tabela e navegar por suas colunas e linhas. Os componentes neste captulo so referenciados pelo seu tipo de objeto (identificado no Delphi pelo seu nome com o prefixo T). O termo componente DataSet utilizado para referenciar um componente Table, Query, ou StoredProc. TTable, TQuery, e TStoredProc so descendentes de TDataSet, ou seja, eles herdam as propriedades de TDataSet.
Datasets
Estados do DataSet
Estado dsInactive dsBrowse dsEdit dsInsert dsSetKey Descrio O Dataset esta fechado. Estado de Espera. O estado default quando um dataset aberto. Registros podem ser visualizados mas no mudados ou inseridos. Habilita a linha corrente para ser editada. Habilita uma nova linha para ser inserida. Uma chamada para o Post inserir a nova linha. Habilita FindKey, GotoKey, and GoToNearest para procurar valores nas tabelas do banco de dados. Estes mtodos somente pertencem para o componente TTable. Para TQuery, a procura feita com a syntax do SQL. Modo quando os OnCalcFields executado; previne qualquer mudana para outros campos ou campos calculados. Raramente usado explicitamente.
dsCalcFields
_______________________________________________________________________________
Estados de um Dataset
10
_______________________________________________________________________________
Voc pode inserir diversos componentes Query, Table, e StoredProc em um form a atribuir a propriedade DataSet baseado em uma condio no programa. Voc tambm pode atribuir a propriedade DataSet a um nome ou objeto TQuery, TTable, ou TStoredProc encontrado em outro form utilizando o identificador da unit do form. Por exemplo, aps incluir a Unit1 na clusula uses, voc pode digitar o seguinte: DataSource1.DataSet := Unit1.Form1.Table1;
11
_______________________________________________________________________________
Utilizando a propriedade Enable permite que voc desconecte temporariamente o componente visual Data Control do TDataSource. No exemplo anterior, se a tabela contiver 2000 linhas e o TDataSource estiver habilitado, o usurio de sua aplicao veria 2000 linhas rolando na tela durante esta operao. Desabilitando TDataSource uma maneira mais eficiente de se pesquisar em um grande nmero de linhas, pois o componente Data Control no atrasar a procura exibindo cada linha conforme esta for sendo alterada.
12
_______________________________________________________________________________
Abre ou fecha um componente DataSet. Abrir um componente DataSet estabelece a conexo entre o componente e o banco de dados. Voc pode definir a propriedade Active no Object Inspector durante o design ou diretamente em seu cdigo, como segue: if DeActivate = true then Table1.Active : = True Else Table1.Active : = False; Os mtodos Open e Close tambm definem a propriedade Active de TDataSet. EOF (End of File) BOF (Beginning File) Fields Propriedades somente de leitura (read-only) com os seguintes valores: EOF definido para True quando voc tenta mover para alm da ltima linha do dataset BOF definido para True quando o componente DataSet aberto ou quando o ponteiro do DataSet para a linha atual estiver posicionado na primeira linha. Um array do objeto TField. Voc pode definir e ler dados dos campos da linha atual utilizando esta propriedade. Por exemplo: Table1.Fields[0]. AsString : = Hello; Table1.Fields[1] .AsString : = World;
of
13
_______________________________________________________________________________
Table2.Fields[0] .AsInteger : = 20; Table2.Fields[1] .AsString : = News; Table2.Fields[ 2] .AsString : = 5 Horas; Table2.Post; FieldByName O mtodo Post faz com que a operao Insert Update ou Delete ocorra. O mtodo Cancel faz com que uma operao Insert Delete, Edit ou Append no ocorrida seja cancelada.
Fornece uma maneira de acessar dados de uma coluna especificando no nome da coluna do banco de dados. Como no exemplo a seguir: s : = Table2.FieldByName (area) .AsString;
SetKey GotoKey
Procura atravs dos datasets, como segue: SetKey alterna a tabela para o modo de pesquisa (search). Enquanto neste modo, a propriedade Fields tem uma utilizao especial. GotoKey inicia a pesquisa por um valor coincidente com o valor encontrado em Fields[n]. Fields[n] contm o valor a ser pesquisado por valores em outras colunas definindo a coluna Fields correspondente. O exemplo a seguir mostra um exemplo da utilizao de SetKey e GotoKey: Table1.SetKey; Table1.Fields[0] .AsString Edit1.Text; Table1.GotoKey;
Permite ser mais seletivo nos dados que sua aplicao seleciona ou utiliza na tabela. Geralmente uma tabela grande e voc quer selecionar somente uma srie de valores da tabela. O mtodo Range permite fazer tal seleo. Exemplo: Table1.SetRangeStart Table1.Fields[0] .AsString : = Edit1.Text; Table1.SetRangeEnd Table.Fields[0] .AsString : = Edit2.Text; Table1.ApplyRange; A primeira chamada SetRangeStart o coloca no modo range e a propriedade Fields toma um significado especial. Utilize a propriedade Fields para especificar o valor de incio para a srie. A chamada para SetRangeEnd inicia um modo onde os valores digitados na propriedade Fields so utilizadas como o valor final da srie. ApplyRange faz com que o comando seja processado. Um dataset criado contendo os valores entre os valores de incio e final.
Permite criar um marcador de linha em uma tabela ou query e depois retornar esta linha posteriormente. Os mtodos Bookmark utilizam um tipo de objeto chamado TBookMark. Por exemplo: Var Marker : TBookMark; begin Marker : = Table2.GeTBookMark; Table2.GotoBookmark(Marker); Table2.FreeBookmark(Marker); O mtodo GeTBookMark aloca um marcador para linha da tabela. O mtodo GotoBookmark altera a localizao na tabela para a linha indicada pelo Bookmark alocado anteriormente. Utilize o mtodo FreeBookmark para liberar o espao alocado para o marcador.
14
_______________________________________________________________________________
Permite construir e controlar o comportamento de aplicaes de bancos de dados. Exemplos de utilizao seguem: Evento BeforePost para validar os campos de um registro antes de inser-lo ou atualiz-los Evento AfterPost para gravar um registro de auditoria quando necessrio Evento OnDelete para gravar cdigo que efetue a deleo em cascata quando apropriado
Fields Editor
Para criar objetos para os campos de uma tabela clique duas vezes no componente Dataset ou escolha Fields Editor no seu menu de contexto, na janela do Fields Editor, clique com o boto direito do mouse e escolha Add, na janela Add Fields, escolha os campos que voc vai querer usar e clique em Ok. No Fields Editor podemos tambm remover os campos criados, alterar sua ordem de apresentao e usar suas propriedades e eventos no Object Inspector. Para cada campo criado um objeto de um tipo descendente de TField, como TStringField, TIntegerField, TFloatField. As principais propriedades, mtodos e eventos dos objetos TField esto listadas nas tabelas abaixo. Se voc no criar nenhum objeto TField, todos os campos da tabela estaro disponveis, mas caso voc crie algum, somente os campos que voc criar estaro disponveis. Se voc selecionar os campos no Fields Editor e arrastar para o Form, sero criados os controles visuais para esses campos, Label, DBEdit e outros, mas antes coloque a descrio dos campos na propriedade DisplayLabel.
TField
A classe TField usada como ancestral para todos as classes dos campos. Geralmente iremos usar objetos de classes descendentes de TField, mas em todos eles podemos encontrar os itens mostrados abaixo.
15
_______________________________________________________________________________
Alinhamento do texto do campo nos controles visuais Valor do campo convertido para Boolean Valor do campo convertido para Currency Valor do campo convertido para DataTime Valor do campo convertido para Double Valor do campo convertido para Integer Valor do campo convertido para string Valor do campo convertido para Variant Indica se o campo calculado em tempo de execuo Indica se um campo pode ser modificado Mensagem de erro se a condio de CustomConstraint no for satisfeita Condio de validao do campo DataSet onde est o campo Tamanho do campo, em Bytes Propriedade do tipo TFieldType, que indica o tipo do campo Expresso com valor Default do campo para novos registros Ttulo a ser exibido para o campo Texto exibido nos controles visuais associados ao campo Nmero de caracteres que deve ser usado para mostrar o campo no controles visuais Mscara de edio do campo Propriedade do tipo TFieldKind que indica o tipo do campo, como Calculado ou Lookup Nome do campo na tabela Posio fsica do campo na tabela Posio do campo nos controles visuais Indica se um campo vlido para ser usado como ndice Indica se o campo est vazio Campo chave da tabela no relacionamento com LookupDataSet, usado em campos Lookup Indica se um campo Lookup Define se ser usado cache para campos Lookup DataSet onde est definido o valor do campo Lookup Campo chave do relacionamento em LookupDataSet Valor do campo, que ser mostrado nos controles visuais Define se um campo somente para leitura Define se o campo obrigatrio Tamanho fsico do campo Texto de edio do campo Acesso direto ao valor do campo Define se um campo visvel Descrio Chamado quando o valor do campo mudado Chamado pelos controles visuais para atribuir o texto digitado pelo usurio ao campo Chamado para formatar o texto de exibio do campo Validao do valor atribudo ao campo, caso o valor no seja vlido, gere uma exceo
16
_______________________________________________________________________________
Atribui um valor de um campo a outro, inclusive nulo Seta o foco para o controle visual ligado ao campo nos Forms Limpa o contedo do campo
O cdigo a seguir mostra alguns exemplos para a utilizao das propriedades do TField: Fields[0] .AsString : = sto uma string; FieldByName ('Casado) .AsBoolean : = False; SomaDespesas : = Fields[5] As.Float; NoPedido ; = Fields[3] .AsInteger; Esto listadas abaixo algumas classes que realmente iremos manipular no tratamento dos campos de uma tabela, so classes descendentes de TField. TStringField TSmallintField TFloatField TCurrencyField TBooleanField TDateField TBlobField TIntegerField TWordField TAutoIncField TBCDField TDateTimeField TTimeField TBytesField TVarBytesField TGraphicField TMemoField
Em alguns desses campos voc pode encontrar as propriedades mostradas abaixo, que no esto presentes em TField. Propriedades MaxValue MinValue DisplayFormat EditFormat Currency DisplayValues Mtodos LoadFromFile SaveToFile Descrio Valor mximo para o campo Valor mnimo para campo Formato de apresentao do campo, como ,0.00 % ou ,0.## Km Formato de edio do campo Define se um campo monetrio Usado com campos Boolean, define o texto para True e False, como Sim;No Descrio Carrega o contedo do campo de um arquivo Salva o contedo do campo para um arquivo
17
_______________________________________________________________________________
Componente Table
O componente Table um componente TDataSet que comunica com uma tabela de banco de dados atravs do BDE. A tabela do banco de dados pode ser tanto local ou em um servidor remoto. TTable herda de TDataSet a capacidade de manipular datasets. Ele fornece mtodos, tais como Next, First, Last, Edit, SetRange e Insert.
TableName Exclusive
IndexName MasterFields
MasterSource ReadOnly
18
_______________________________________________________________________________
Estgio 1 2 3 4
Processos Adicionar e definir propriedades para os componentes TDataSet Adicionar e definir propriedades para componentes DBGrid e Button Criar event handlers OnClick para componentes Button Executar e testar a aplicao
DataSource1
19
_______________________________________________________________________________
Ao Utilize a tabela a seguir para definir propriedades do DBGrid para que utilizem o componente DataSource do form:
Propriedade DataSource
Valor DataSource1
Passo 3
Ao Adicione oito botes ao form, e arranje-os para que seu form esteja similar figura a seguir:
Montando o aplicativo usando Table Passo 4 Ao Utilize o Object Inspector para definir as seguintes propriedades aos componentes Button:
Nome do Componente Button1 Button2 Button3 Button4 Button5 Button6 Button7 Button8
20
_______________________________________________________________________________
Evento OnClick OnClick OnClick OnClick OnClick OnClick Cdigo Table1.First; Table1.Last; if not Table1.EOF then Table1.Next; if not Table1.BOF then Table1.Prior; Table1.Edit; if Table1.State in [dsEdit, dsInsert] then Table1.Post; Table1.Cancel; Table1.Insert;
Button7 Button8
OnClick OnClick
21
_______________________________________________________________________________
O Componente Query
O componente Query permite utilizar comandos SQL para executar o seguinte: Especificar ou criar datasets que possam ser exibidos Inserir linhas Editar a atualizar colunas Deletar linhas
O componente Query gerencia a comunicao com o BDE e serve como interface entre o BDE e os componentes DataSource (TDataSource) em seus forms Como com o componente Table, um componente DataSource anexado ao componente Query para gerenciar a comunicao entre o componente Data Control e o componente Query. Uma aplicao tpica possui um componente DataSource para cada componente Query.
Database Name
Fields
DataSource Params
22
_______________________________________________________________________________
Executa comando SQL atribuido propriedade SQL se o comando no retornar dados. Quando estiver inserindo, atualizando ou deletando dados, voc deve utilizar este mtodo. Se estiver executando um comando de seleo, utilize o mtodo Open. A seguir um exemplo da utilizao do mtodo ExecSQL: Query1.Close; Query1.Clear; Query1.SQL.Add ( Delete emp where empno = 1010); Query1.ExecSQL; Abre o componente Query. equivalente a definir a propriedade Active para True. A seguir um exemplo utilizando o mtodo Open: Query1.Open; Fecha o componente Query fazendo com que quaisquer atualizaes pendentes sejam efetuadas no banco de dados. Chamar Close equivalente a definir a propriedade Active para False. A seguir mostramos um exemplo utilizando o mtodo Close: Query1.Close; Traduz a propriedade SQL para criar a propriedade Text para Submeter ao servidor. O mtodo Prepare tambm envia a requisio ao servidor para propsito de otimizao, embora nenhum valor parametrizado esteja incluido. A requisio inteira com parmetros no submetida at que o mtodo Open ou ExecSQL sejam chamados. Se voc no chamar Prepare explicitamente, o Delphi chama Prepare implicitamente quando utilizar o comando em ExecSQL. A seguir um exemplo utilizando o mtodo Prepare: Query1.Close; Query1.SQL : = Delete emp where empno = : empno; Query1.Prepare;
Open
Close
Prepare
SetKey GotoKey
23
_______________________________________________________________________________
encontrado em Fields[n]. Fields[n] contm o valor que voc est procurando e que ocorre na primeira coluna da tabela ou dataset. Voc pode procurar por valores em outras colunas definindo a coluna correspondente. O exemplo a seguir mostra a utilizao dos mtodos SetKey e GotoKey: Query1.SetKey; Query1.Fields [0] .AsString : = Edit1.Text; Query1.GotoKey; FreeBookmark GeTBookMark GotoBookmark Permite criar um marcador em uma linha na tabela ou query e retornar posteriormente para esta linha, como segue: O mtodo FreeBookmark libera espao alocado para o marcador O mtodo GeTBookMark aloca um marcador para a linha atual da tabela. O mtodo GotoBookmark altera a localizao na tabela para a linha indicada por um marcador alocado prviamente . Os mtodos Bookmark utilizam o objeto tipo TBookMark, como no exemplo a seguir: Var Marker : TBookMark; begin Marker : = Query2.GeTBookMark; Query2.GotoBookmark (Marker); Query2.FreeBookmark (Marker);
Eventos OnOpen OnClose OnNewRecord BeforeInsert AfterInsert BeforeInsert AfterEdit BeforePost AfterPost OnCancel OnDelete
Descrio Permite construir e controlar o comportamento da aplicao de banco de dados. Por exemplo: O event handler BeforePost valida os campos de um registro antes de inserir ou atualizar os dados O evento AfterPost til para gravar um registro de auditoria quando necessrio. O evento OnDelete til para escrever cdigo que efetue a deleo em cascata quando apropriado.
24
_______________________________________________________________________________
Passo 1 2 Ao Abra um novo projeto e grave-o. Quando solicitado, grave a unit como EX7SQL.PAS e o projeto como EX7P.DPR. Utilizando a pgina Data Access page da Component Palette, adicione os seguintes ao seu form: Um componente Query Um componente DataSource Defina as propriedades dos componentes Query e DataSource, como segue:
Passo 4
Ao Utilizando a pgina Data Controls da Component Palette, adicione os seguintes ao seu form: Um componente DBGrid Um componente DBNavigator Utilize a tabela a seguir para definir propriedades dos componentes DBNavigator e DBGrid para que utilizem o componente DataSource do form:
Crie um event handler OnActivate para o form utilizando o Object Inspector. Digite o cdigo abaixo no handler OnActivate: Query1.SQL.Add (Select * from customer); Query1.Open; Este cdigo adiciona uma instruo SQL propriedade SQL do componente Query. Voc pode definir esta instruo SQL como uma propriedade utilizando o Object Inspector. Aps adicionar a instruo SQL, seu event handler deve ser: Query1.SQL.Add( Select * From Customer ); Query1.Open; 7 8 Quando sua aplicao for compilada satisfatoriamente. grave-a. Depois, execute sua aplicao e teste-a utilizando o Navigator para atualizar e inserir linhas no dataset. Quando tiver terminado, feche a aplicao.
25
_______________________________________________________________________________
Utilize a informao da tabela a seguir para definir propriedades destes componentes:
Passo 3
Ao Adicione o seguinte cdigo para o evento OnClick do Button1: Edit1.Visible : = True; Label1.Visible : = True; Adicione o seguinte cdigo ao evento OnClick do Button2 Query1.Close; Query1.SQL.Clear; Query.SQL.Add (Select * from customer where +CustNo = + Edit1.Text); Query.Open; Edit1.Visible : = False; Label1.Visible : = False;
Passo 5
Ao Compile e grave sua aplicao. Execute e teste-a atravs do seguinte: Selecione um nmero de cliente da lista de clientes e d um clique em Query. Digite o nmero e d um clique em Exec Query para exibir um nico cliente no grid.
26
_______________________________________________________________________________
Opes do DBGrid
DgTitles DgIndicator
27
_______________________________________________________________________________
As colunas podem ser reajustadas. As linhas entre as colunas ficam visveis As linhas entre as linhas ficam visveis. Os usurios podem pressionar a tecla Tab e Shift+ Tab para se moverem entre as colunas da grade.
28
_______________________________________________________________________________
Para testar sua mscara de edio, digite um valor no campo Test Input.
Editor de Mscara
29
_______________________________________________________________________________
Chaves de Acesso
As chaves so campos do banco de dados para agilizar sua manipulao. As chaves podem ser classificadas como: chaves primrias: estabelecem as chaves principais de acesso aos campos de uma tabela; chaves secundrias: estabelecem chaves auxiliares de acesso aos campos de uma tabela; chaves estrangeiras: estabelecem chaves de acesso aos campos de outras tabelas.
Chaves Primrias
As chaves primrias so as principais chaves de acesso a um banco de dados. As principais caractersticas das chaves primrias so: definindo-se uma chave como primria garante-se que ela no estar duplicada dentro de um banco de dados; a definio de chaves primrias, em bancos de dados dBase e Paradox, cria automaticamente um ndice para acesso aos dados das chaves; a definio de chaves primrias faz com que o banco de dados seja automaticamente ordenado pelas chaves; para definir uma chave como primria em bancos de dados DBase e Paradox, basta colocar um * no campo Key, utilizando o Database Desktop; importante ressaltar que um banco de dados pode ter vrios campos definidos como chaves primrias.
Chaves Secundrias
As chaves secundrias estabelecem chaves auxiliares de acesso aos campos de uma tabela. Elas devem ser utilizadas em campos onde se fazem pesquisas ou classificaes eventuais sobre uma tabela. Para se definir uma chave secundria, atravs do Database Desktop, deve-se seguir os passos abaixo: 1. Abra o Database Desktop e a tabela onde se quer definir uma chave secundria. 2. Entre na opo Restructure Table. 3. Selecione, na caixa Table properties, a opo Secondary Indexes. 4. Selecione o boto Define.
30
_______________________________________________________________________________
5. Selecione o campo que quer utilizar como chave secundria, de modo que ele aparea na lista Indexed Fields. 6. Clique em OK, d um nome a nova chave secundria e clique novamente em OK. 7. Salve a tabela utilizando o boto Save.
Os campos definidos como chaves secundrias tambm possuem ndices relacionados a eles.
Chaves Estrangeiras
As chaves estrangeiras permitem o acesso e validao a outros banco de dados. Suas principais caractersticas so: as chaves estrangeiras permitem que se faa o relacionamento entre os bancos de dados; as chaves estrangeiras, em um banco de dados, armazenam chaves de outros bancos de dados; as chaves estrangeiras devem ter o mesmo tipo de sua correspondente chave em um outro banco de dados. Para se definir uma chave estrangeira, atravs do Database Desktop, deve-se seguir os passos abaixo: 1. Abra o Database Desktop e a tabela onde se quer definir uma chave estrangeira. 2. Entre na opo Restructure Table. 3. Selecione, na caixa Table properties, a opo Referential Integrity. 4. Selecione o boto Define. 5. Selecione o campo que quer utilizar como chave estrangeira na coluna Fields e clique na seta para a direita para definir o campo Child Fields. 6. Selecione a tabela com a qual quer estabelecer o relacionamento e clique na seta para a esquerda para definir o campo Parents Key. 7. O relacionamento est estabelecido entre as chaves definidas em Child Fields e Parents Key, que devem ter o mesmo tipo. 8. Clique em OK, d um nome a nova chave secundria e clique novamente em OK. 9. Salve a tabela utilizando o boto Save. A restrio desta definio que o relacionamento pode ser definido apenas com o primeiro campo da outra tabela. Em tabelas Paradox para ser definida como chave estrangeira uma chave tem que ser definida como primria ou secundria.
Integridade Referencial
Integridade referencial um conjunto de regras e de consistncias entre os registros de duas tabelas que se relacionam. Como foi visto no modelo relacional, quando duas tabelas se relacionam, a chave primria de uma copiada para a outra e se esses dados forem alterados ou excludos da tabela original necessrio verificar o que ser feito com os dados e registros duplicados na outra tabela. Quando se define uma integridade referencial, est se definindo o procedimento que ser tomado quando esses processos ocorrerem. Sejam duas tabelas A e B que se relacionam atravs de uma coluna c que a chave primria de A e portanto foi repetida em B para se fazer o relacionamento. Quando se define uma integridade referencial para esse relacionamento, est se definindo que a coluna c da tabela B s pode conter valores j cadastrados na coluna c da tabela A.
31
_______________________________________________________________________________
Tabela A *c d e . .
Tabela B *a b c
Integridade Referencial Existem trs formas de se manter essa regra quando registros da tabela A so excludos: Restrict: Define que se o valor da coluna c de A existir em algum registro de B, o registro no poder ser excludo e uma mensagem de erro retornar para a aplicao; Cascade: Define que se o valor da coluna c de A existir em algum registro de B, todos os registros que possurem esse valor sero tambm excludos; Set Null: Define que se o valor da coluna c de A existir em algum registro de B, os valores de c em todos os registros sero transformados para Null;
Em todos os casos, se o usurio tentar inserir um registro em B com um valor de c que no exista na tabela A, um erro ser reportado aplicao. Alguns bancos, tambm permitem fazer o mesmo tratamento quando a chave da tabela for alterada, ao invs de excluda. Entretanto, essa alterao de chaves no deve ser um processo comum nas aplicaes, sendo normalmente proibidas. Os bancos de dados possuem formas diferentes de disponibilizar esses servios. Alguns possuem at mais de uma forma de fazer o mesmo processo. Mas de maneira geral existem duas possibilidades de implementao:
32
_______________________________________________________________________________
3. FORM WIZARD
O Form Wizard uma ferramenta do DELPHI que permite criar um formulrio padro para a manipulao de banco de dados. Sua principal vantagem est na automatizao do processo de criao de formulrio, o que permite ganhar tempo no desenvolvimento da aplicao. EXEMPLO: neste exemplo ser criado um formulrio para manipular os dados da tabela criada no exemplo apresentado no Database Desktop.
PASSO 1
Inicie um novo projeto, clicando na opo File no menu principal do DELPHI, e, em seguida, na opo New Application. Neste momento ser aberto um novo projeto.
PASSO 2
Clique na opo Database no menu principal do DELPHI, e, em seguida, na opo Form Wizard. Neste momento ser aberto uma tela para iniciar o processo de criao do formulrio.
PASSO 3
Na tela inicial do Form Wizard deve-se selecionar o tipo do banco de dados e o tipo do conjunto de dados. Os tipos de banco de dados so: Simple: banco de dados simples, onde todos os dados esto armazenados em uma mesma tabela. Master/Detail: banco de dados relacional J o tipo de conjunto de dados pode ser: TTable: quando os dados forem manipuladas diretamente na tabela. TQuery: quando os dados forem manipulados a partir de uma consulta. Para o exemplo apresentado selecione Simple Form, TTable e em seguida clique no boto Next. Neste instante dever aparecer a tela para seleo do banco de dados.
PASSO 4
Esta tela permite que se selecione a tabela onde esto armazenados os dados. Selecione a tabela criada no exemplo do Database Desktop e pressione o boto Next. Neste instante dever aparecer a tela de seleo dos campos a serem editados.
PASSO 5
Esta tela permite selecionar os campos que podero ser editados. Todos os campos que estiverem na coluna Ordered Selected Fields podero ser manipulados no formulrio. Selecione todos os campos (boto >>) e clique em Next. Neste instante dever aparecer a tela de layout do formulrio.
PASSO 6
Esta tela permite selecionar a forma de apresentao dos dados, que poder ser na Vertical, Horizontal, ou em linhas de grade. Selecione a opo Horizontal e clique em Next. Neste instante dever aparecer a tela final de criao do formulrio. PASSO 7 Na ltima tela da criao do formulrio deve-se definir se o formulrio o formulrio principal da aplicao e se na gerao do formulrio deve ser criado ou no um Data Module. Ative a opo Generate main form e selecione a opo Form and Data Module e clique no boto Finish. Neste instante deve aparecer na tela o formulrio criado pelo Form Expert, de acordo com as definies selecionadas (Erro! A origem da referncia no foi encontrada.).
33
_______________________________________________________________________________
34
_______________________________________________________________________________
O termo lookup em cada nome de componente refere-se s tabelas de busca. O termo lookup tables refere-se s tabelas que contm informao descritiva sobre um valor codificado. Esta seo discute a utilizao destes componentes. Eles se encontram na pgina Data Controls da Component Palette.
Componente DBLookuplistBox
O componente DBLookuplistBox um componente ListBox data-aware projetado para buscar valores em uma tabela baseado no valor de uma segunda tabela. O DBLookuplistBox contm um conjunto finito de dados, o usurio deve selecionar uma das opes da lista. Um DBLookuplistBox permite exibir um conjunto de opes baseado no valor em outra tabela. O componente DBLookuplistBox difere do componente DBListBox porque permite coordenar o valor selecionado do DBLookuplistBox com a linha corrente de outra tabela do banco de dados.
Componentes DBLookupComboBox
O componente DBLookupComboBox um componente ComboBox dataware similar ao BDLookupListBox, exceto que um usurio pode selecionar um valor na lista ou digitar um novo valor. Um ComboBox de onde o DBLookupComboBox derivado combina as capacidades de um ListBox com as capacidades de um componente Edit.
Adicionar um componente database lookup envolve o seguinte processo: Estgio 1 2 Processo Adicionar o componente database lookup e lig-lo a um componente DataSource existente e propriedade DataField Adicionar um novo componente Query ou Table (TDataSet) e DataSource, e utilizar este DataSource para buscar valores codificados no primeiro DataSource
35
_______________________________________________________________________________
4 5 6 7
Passos
O processo do tutorial envolve os seguintes estgios: Estgio 1 2 3 Processo Criar um form que exiba uma lista esttica dos campos de uma tabela de banco de dados utilizando um componente Table, DataSource, DBGrid e DBNavigator Adicionar e conectar um componente TDBLookuplistBox aplicao Adicionar cdigo para coordenar aes do componente TDBLookuplistBox quando o sistema insere ou atualiza uma linha
36
_______________________________________________________________________________
True Table1 False DataSource1 DataSource1
DataSource DataSource
Passo 5
Ao Utilize o Fields Editor para adicionar os seguintes campos ao dataset Table1: OrderNo CustNo SaleDate ItemsTotal AmountPaid Arranje os campos no Fields Editor para que OrderNo seja o primeiro campo e CustNo seja o segundo. Compile e grave a aplicao.Execute e teste-a.
6 7
Passo 3
Ao Adicione um novo componente Table e DataSource ao seu form. Defina as propriedades para cada componente, como mostrado na tabela a seguir:
DataSource2
Passo 4
Ao Utilize o Fields Editor para adicionar os seguintes campos ao dataset Table2: CustNo Company Conecte o componente DBLookuplistBox ao segundo DataSource utilizando a tabela a seguir:
37
_______________________________________________________________________________
Nome do Componente DBLookuplistBox1 Propriedade ListSource KeyField ListField Valor DataSource2 CustNo Company
Passo 6
Ao Compile e grave a aplicao. Execute e teste-a. O componente DBLookuplistBox destaca a empresa que corresponde ao valor de CustNo na linha do DBGrid.
38
_______________________________________________________________________________
O Database Desktop Crie uma nova tabela como mostra a figura a seguir.
39
_______________________________________________________________________________
Tipo da Tabela Criada Digite o nome para o primeiro campo (CODIGO) e mude para tipo de campo (Type) usando a tecla Tab. Com o campo Type selecionado, de um clique com o boto direito do mouse nele, para ser exibido o menu pop-up com todos os valores para o tipo de campo. As letras sublinhadas correspondem letra de atalho para cada tipo de dado. O nosso campo CODIGO ser definido como tipo Alpha. Apesar de ser um campo com nmeros ns no iremos realizar nenhum clculo matemtico com ele, por isso o definimos como Alpha.
Criando os campos da tabela O campo CODIGO ser a nossa chave primria para a identificao dos clientes na tabela Clientes. Para definir um campo como chave primria, pressione qualquer tecla quando o campo Key estiver selecionado, marcando este campo com um * - asterisco.
40
_______________________________________________________________________________
Tornando o Campo CODIGO Chave primria D continuidade entrando com outros campos, seguindo o modelo apresentado abaixo.
41
_______________________________________________________________________________
Salvando a Tabela Paradox Logo aps, abra uma nova tabela no mesmo formato, e construa-a como mostrado abaixo.
Criando a Tabela Vendas Para que a tabela Vendas se relacione com a tabela Clientes, deveremos definir o campo CODIGO como ndice secundrio na tabela Vendas. No ComboBox Table properties, selecione a opo Secondary Indexes e clique no boto Define..., aparecendo o quadro de dilogo Define Secondary Index. Na janela Define Secondary Index, selecione o campo CODIGO e d um clique na seta para introduzi-lo como campo ndice, e finalmente d um clique no boto OK para aceitar a opo. Ser ento solicitado um nome para este ndice, digite INDCODIGO.
42
_______________________________________________________________________________
Salvando os ndices Salve a tabela como Vendas.db. Saia do Database Desktop, atravs do menu File, opo Exit. O Delphi possui o assistente Form Wizard para a construo de formulrios de acesso a Banco de Dados, ns iremos utiliz-lo para construirmos o nosso projeto, que utiliza as tabelas de Clientes e Vendas construdas anteriormente. Volte ao Delphi, e exclua o formulrio Form1 que o Delphi cria junto com um novo projeto. No menu Project, ) na barra de ferramentas, e exclua Form1 no escolha a opo Remove from Project..., ou o boto ( salvando o arquivo. Pois o Form Wizard criar um novo formulrio automaticamente.
43
_______________________________________________________________________________
Excludo o formulrio, inicie o wizard escolhendo a opo Form Wizard do menu Database. O Database Form Wizard o assistente para a criao de Formulrios envolvendo banco de dados. Este assistente ajudar na definio dos campos a serem mostrados e o layout do formulrio, alm de incluir um componente DBNavigator, que ser usado para a navegao entre os registros das tabelas.
DBNavigator O nosso primeiro formulrio ter duas divises, uma para cada tabela. A primeira conter os dados relativos a um cliente, e a segunda as compras realizadas por este cliente. Inicie o Form Wizard, seguindo as opes mostradas nas figuras a seguir; pressionando o boto Next para continuar com o assistente.
44
_______________________________________________________________________________
Estas opes criam um formulrio com duas divises, usando componentes TTable. Um componente TTable realiza a conexo entre o formulrio e uma tabela do banco de dados. Ele um componente visvel somente em tempo de projeto - semelhante ao componente TTimer.
Tabela Master
Inclua a tabela Clientes.db, como sendo a master query. Ou seja, a tabela que ir comandar a apresentao do dados.
Incluindo a tabela Clientes como Master Query Selecione o boto >> para incluir todos os campos da tabela Clientes.db no formulrio.
45
_______________________________________________________________________________
Selecionando a Opo Vertical para Mostrar os Campos Alinhamento Left, posiciona as legendas ao lado esquerdo dos quadros de Edit.
46
_______________________________________________________________________________
Tabela Detail
Defina a tabela Vendas.db como a tabela de detalhes.
Definindo a Tabela Vendas Como Detalhe Inclua todos os campos da tabela Vendas, e a seguir, escolha o formato Grid para a apresentao da tabela Vendas.
Mostrando os Campos do Detalhe em Grid Selecione os campos que faro a ligao entre as duas tabelas, escolhendo INDCODIGO como ndice. Em Detail Fields e Master Fields, selecione o campo CODIGO como campo de juno em ambas as tabelas e pressione Add. Como mostrado a seguir.
47
_______________________________________________________________________________
Concluindo a Ligao entre Tabelas Pressione Next e finalize o Form Wizard. O seu formulrio estar como a figura a seguir.
48
_______________________________________________________________________________
49
_______________________________________________________________________________
Para formatar a entrada de dados, ou seja, definir o formato do dado, para a tabela Clientes.db, d um clique duplo em Table1 para acessar o editor de campos (Fields Editor). Selecione o campo CEP e no Object Inspector, procure a propriedade Edit Mask. Esta propriedade abre o quadro de dilogo Input Mask Editor onde poderemos escolher uma mscara para o campo CEP, escolha Long Zip Code e na caixa Input Mask elimine um dgito 9, como mostra as figuras a seguir.
Mascarando o Campo CEP Faa o mesmo para o campo Telefone, escolhendo a mscara Phone. Feche a Input Mask Edit. Selecione o campo CODIGO em Table2, e mude a propriedade Visible:=False, para no aparecer o cdigo do cliente no componente DBGrid, pois ele j ser exibido por um componente Edit. Selecione o EditEstado e altere a propriedade Charcase:=ecUpperCase, para que os caracteres neste TEdit sejam apresentados em maiscula. Insira um boto BitBtn no Formulrio com as seguintes definies de propriedades: 1 - Caption:=Sai&r; Kind:=bkCLose A propriedade Kind do BitBtn determina qual desenho ser mostrado na face do boto. Esta propriedade tambm implementa algumas funes ao boto eliminando linhas de cdigo, neste caso no ser necessrio nenhuma linha de cdigo para fechar o formulrio. Finalmente, mude a propriedade Active dos dois componentes TTable (Table1 Table2) de False para True. Isto tornar o Table ativo tanto em tempo de projeto quanto em tempo de execuo. Ao ativarmos o Table, os controles TEdit mudaro seu contedo, passando a exibir o primeiro registro da tabela a eles ligada.
50
_______________________________________________________________________________
O formClientes Aps as Mudanas O prximo formulrio ser construdo manualmente, sem o uso do Form Wizard. No utilizaremos o Form Wizard apenas por questes didticas, mas este novo Formulrio tambm poderia ser construdo utilizando este assistente. Este segundo formulrio servir para cadastrar vendas. O usurio selecionar um nome de cliente j cadastrado, a partir de um quadro combo, digitar a data da venda e escolher um produto, atravs de botes de opo, definindo tambm a quantidade de itens de um mesmo produto e o valor total da venda. Insira um novo formulrio ao projeto escolhendo a opo New Form do menu File ou o boto ( este novo formulrio utilizando os componentes descritos na figura abaixo. ). Monte
Fazendo o Formulrio de Vendas Altere as propriedades, de alguns componentes, indicadas na tabela a seguir:
51
_______________________________________________________________________________
Propriedade DatabaseName TableName Name Active DataSource1 Table2 DataSet Name DatabaseName TableName Name Active DataSource2 DbNavigator DataSet Name DataSource Name ShowHint Valor C:\Curso Delphi 5 Vendas.db tblVendas True tblVendas dsrVendas C:\Curso Delphi 5 Clientes.db tblClientes True tblClientes dsrClientes dsrVendas navVendas True
Selecione todos os TDBEdit, dando um clique em cada um enquanto pressiona a tecla Shift, e altere a propriedade DataSource de todos ao mesmo tempo para dsrVendas. Depois selecione um por vez e altere a propriedade DataField correspondente a cada TEdit. D um clique duplo em tblVendas para editar o campo Data. Repare que a janela Fields Editor aparece vazia sem nenhum campo listado. Clique com o boto direito do mouse no Fields Editor e escolha a opo Add Fields..., selecione todos os campos e pressione Ok, para inserir todos os campos da tabela Vendas.db no Fields Editor.
Adicionando os Campos da Tabela Vendas Voltando ao Fields Editor, selecione o campo DATA e altere o formato da propriedade EditMask para Date. Aps a insero de todos os campos da tabela Vendas no componente tblVendas, as propriedades destes campos podem ser acessadas diretamente atravs do Object Inspector. Como ilustra a figura a seguir.
52
_______________________________________________________________________________
Acessando os Campos Diretamente do Object Inspector O componente DBLookupComboBox, exibe os valores de um campo em uma lista, onde o usurio poder escolher um valor para este campo. Os valores exibidos pertencem a uma tabela e quando o usurio fizer uma escolha, o valor escolhido ser vinculado a uma outra tabela. No formulrio que estamos projetando - Vendas, o nome dos clientes vir da tabela Clientes e quando inserirmos a venda, o nome do cliente escolhido ser vinculado a esta venda na tabela Vendas atravs da chave primria CODIGO. Portanto o DBLookupComboBox trabalha com duas tabela simultaneamente, uma que fornece os dados para a lista e outra que est associada ao DbLookupComboBox. A tabela abaixo explica as propriedades relativas a esta vinculao. Propriedade DataSource DataField ListSource KeyField ListField Uso Indica qual tabela associada. Indica o campo associado. Determina a tabela que fornecer os dados para a lista. Indica qual o campo da tabela acima ser usado como vnculo. Indica qual campo ser mostrado na lista do quadro combo.
Siga a tabela abaixo para determinar as propriedades do nosso DBLookupComboBox. Propriedade Data Source Data Field ListSource KeyField ListField Valor dsrVendas CODIGO dsrClientes CODIGO NOME
A lista de clientes ser vinculada atravs do campo CODIGO mas estar exibindo ao usurio, o campo NOME. O componente DBRadioGroup apresenta uma srie de opes pr-definidas a serem selecionadas pelo usurio, contendo um boto para cada opo. Estas opo so determinadas pela propriedade Items. O valor do campo na tabela associada ao DBRadioGroup, ser o mesmo valor do boto selecionado. Selecione o DBRadioGroup e edite a propriedade Items, configurando trs opo para produtos vendidos, seguindo o modelo a seguir.
53
_______________________________________________________________________________
Configurando o DBRadioGroup com 3 RadioButtons Altere outras propriedades conforme a tabela mostrada abaixo: Propriedade DataSource DataField Columns Caption Valor dsrVendas PRODUTO 3 vazia
Salve este Formulrio com o nome de frmVendasUnt.Pas. O Formulrio final mostrada abaixo.
O Formulrio frmVendas Finalizado O prximo formulrio ser a abertura do programa. A partir dele sero chamados os dois formulrios construdos anteriormente. Acrescente um formulrio vazio File e New Form, e construa-o da seguinte forma:
54
_______________________________________________________________________________
O Formulrio de Apresentao frmControle A propriedade Hint dos SpeedButtons, contm o texto que ser mostrado quando o mouse ficar parado por alguns instantes sobre o boto. Define ShowHint:=True, para ativar esta funo. Com isto conclumos a construo de nossa interface grfica com o usurio. Salve o formulrio com o nome frmControleUnt.pas Temos ento em nosso projeto trs formulrios - frmControle, frmClientes e frmVendas. Todos foram salvos no disco com o mesmo nome da sua propriedade Name mais "Unt". Comearemos o cdigo pelo frmControle. implementation uses frmVendaUnt, frmClientesUnt; {$R *.DFM} procedure TfrmControle.SpeedButton3Click(Sender: TObject); begin Close; end; procedure TfrmControle.SpeedButton2Click(Sender: TObject); begin frmVenda.Show; end; procedure TfrmControle.SpeedButton1Click(Sender: TObject); begin frmClientes.Show; end;
55
_______________________________________________________________________________
procedure TfrmVenda.BitBtn1Click(Sender: TObject); begin frmVenda.Hide; {o mtodo Hide esconde o Formulrio, mas no a elimine da memria, enquanto que Close retira o Formulrio da memria } end; Antes de compilar o projeto, verifique se o formulrio inicial do programa mesmo o frmControle. No menu Project do Delphi, escolha a opo Option..., e defina como o Main Form o formulrio frmControle.
56
_______________________________________________________________________________
6. RELATRIOS
Para a gerao de relatrios no Delphi usamos as ferramentas do QuickReport presentes na paleta QReport da barra de ferramentas. Com estes controles poderemos construir relatrios que sero compilados diretamente em nosso projeto sem a necessidade de carregar outras ferramentas de relatrio. Poderemos tambm incluir cdigo a vrios eventos relatrios proporcionando uma grande flexibilidade em nossos projetos. O Delphi nos proporciona alguns modelos de relatrios, tambm um assistente para a criao destes relatrios. Selecione File | New | Form e observe que existem trs modelos de relatrios:
Modelos de Relatrios QuickReportLabels - Utilizado na criao de etiquetas. QuickReport List - Permite a criao de relatrios simples, a partir de dados de uma tabela ou query. QuickReport Master/Detail - um modelo de relatrio que obtm dados a partir de duas tabelas.
Primeiro vamos criar um relatrio com as informaes clientes partindo da tabela Customer.db. Na caixa de dilogo New Items, escolha QuickReport List.
QuickReport List
57
_______________________________________________________________________________
O Delphi nos apresenta um modelo de relatrio com alguns componentes j inseridos. Um dos tipos destes componentes so as bandas, elas nos do funcionalidade como ttulos, cabealhos, rodaps, detalhes, e subdetalhes para dados do relatrio - representam o componente QRBand. Outros componentes que iremos utilizar so o QRLabel e o QRDBTex. O primeiro exibe informaes estticas no relatrio, enquanto o segundo exibe informaes dinmicas vindas do banco de dados, pois est ligado a um campo de determinada tabela.
O Relatrio Configurado Este formulrio possui um pop-menu que nos d acesso a uma caixa de dilogo onde poderemos alm de outras coisas, configurar a apresentao do nosso relatrio e tambm a opo de visualizao antes dele estar vinculado ao aplicativo. As opes so: Report Settings e Preview. Faa uma visualizao do relatrio e, se tudo estiver de acordo com o seu gosto, inclua um boto na pgina Clientes do nosso projeto, com o seguinte cdigo para exibir o relatrio. No se esquecendo de incluir o nome da unidade do relatrio na seo uses do formulrio principal. procedure TForm1.RelatorioBtnClick(Sender: TObject); begin ClientesRep.Preview; end;
58
_______________________________________________________________________________
Relatrio Master/Detail Este novo formulrio possui a mais, duas tabelas, um DataSource e uma faixa de sub-detalhes em comparao ao anterior. Ele tambm pertence a outro tipo de componente o TQRMDForm, sendo um formulrio especfico para a construo de relatrios Master/Detalhe. Altere as seguintes propriedades do formulrio: Name = VendasRep ReportTitle = Vendas As duas tabelas esto nomeadas como MasterTable e DetailTable, e o DataSource como MasterDS. O DataSource est presente apenas para criar uma vinculao entre as tabelas. Altere suas propriedades associando-as s tabelas Customer.db e Orders.db, e tornando-as ativas. V at a DetailTable e selecione a propriedade MasterFields para exibir a caixa de dilogo Field Link Designer, vista anteriormente no curso, utilizada para a vinculao de tabelas. Vincule as duas tabelas pelo ndice CustNo.
A tabela de Detalhe Na banda Column Header, coloque dois componentes QRLabel com as legendas Nome do Cliente e Cdigo. Na banda Detail, insira dois QRDBText associados aos campos Company e CustNo da MasterTable. Aumente a largura desta faixa, e inclua mais dois QRLabel com as legendas Nmero do Pedido e Valor Pago. Na quarta banda - SubDetail - coloque dois QRDBText, para os detalhes das compras, associados aos campos OrderNo e AmountPaid da tabela Orders.db - DetailTable.
59
_______________________________________________________________________________
Altere a propriedade DataSet da banda SubDetail para DetailTable. Ao final, o seu formulrio dever se parecer com o da figura a seguir:
Relatrio Master/Detail Final Inclua mais um boto no formulrio principal para a exibio deste ltimo relatrio. E teste o seu programa. Os relatrios construdos anteriormente tambm poderiam ser construdos partindo-se de um formulrio comum, desde que inclussemos o componente QuickRep neste formulrio, dimensionando-o na rea de cliente de acordo com as necessidades. E a partir da colocaramos os demais componentes existentes de modo semelhante nos relatrios construdos como exerccios.
60