Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Aplicação com Bancos de dados Parte II Arquitetura de acesso Para fins de flexibilidade podem ser implementados diferentes formas de acesso através de componentes variados Porém sempre será baseado em uma arquitetura em camadas visando facilitar o desenvolvimento de aplicações A figura a seguir ilustra a forma como iremos acessar os dados em nossas aplicações Arquitetura de acesso Aplicação Data Controls Data Source Componentes visuais Componentes de Data Set acesso BDE Base de dados Classes de componentes Há duas grandes classes de componentes: os componentes de acesso a dados (data-access) e os componentes de controle, visualização e manipulação dos dados (datacontrols) Os componentes de visualização e manipulação de dados são também denominados de componentes data-aware (componentes capazes de mostrar e atualizar os dados armazenados em uma tabela associada) Estes dois grupos de componentes estão localizados, respectivamente, nas paletes Data Access e Data Controls Conceito de Dataset Para manipular um banco de dados é preciso compreender o conceito de dataset Um dataset é um objeto que consiste de uma série de registros, cada um contendo qualquer quantidade de campos e um ponteiro para o registro atual. O dataset pode ter uma correspondência direta, um-para-um, com uma tabela física, ou, como um resultado de uma query, pode ser um subconjunto de uma tabela ou uma junção de diversas tabelas Tipo de objeto TDataSet Um dataset é o tipo de objeto TDataSet e é uma classe abstrata. Uma classe abstrata é uma classe de onde você pode derivar outras classes, mas não pode criar uma variável 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ê não encontrará nenhum componente chamado TDataSet na Component Palette. O TDataSet contém as abstrações necessárias para manipular diretamente uma tabela. É a ferramenta utilizada para abrir uma tabela e navegar por suas colunas e linhas. Componentes derivados de TDataSet Os principais componentes do tipo data-access utilizados na criação de aplicações com bancos de dados em C++ Builder são os componentes derivados da classe abstrata TDataSet, que são: Table da classe TTable, Query da classe TQuery e StoredProc da classe TStoredProc. Qualquer um dos componentes derivados da classe TDataSet podem ser referenciados como datasets. Os componentes Query e StoredProc são mais utilizados em aplicações cliente-servidor O componente Table oferece a forma mais simples de se acessar informações em uma tabela de banco de dados Estados de um dataset Uma aplicação pode posicionar um dataset em determinado estado através de uma chamada explícita a um método ou através da ocorrência de um evento que desencadeie uma troca de estado. Há métodos que sempre levam para determinado estado e são chamados métodos correspondentes aos estados. São eles: Edit, Insert, Append e Setkey. Um outro conjunto de métodos sempre retorna o dataset para o seu estado de Browse como Delete, Cancel, GotoKey e GotoNearest. Há casos em que o sucesso ou insucesso do método define se o dataset volta ao estado de Browse, como o método Post. Estados de um dataset Estados de um dataset Componentes Data Access Os componentes Data Access estão na página Data Access da Component Palette. Estes componentes permitem construir aplicações de bancos de dados. Eles, juntamente com os componentes Data Control, são componentes data-aware. Componentes data-aware são componentes que tem ciência de dados e sua estrutura em um banco de dados. Componentes Data Access Quando você constrói uma aplicação de banco de dados, você insere componentes Data Access em um form e atribui propriedades que especificam o banco de dados, tabelas e registros a serem utilizados com este form. Muito embora componentes Data Access não sejam visíveis durante a execução, eles trabalham em segundo plano para regular o acesso aos dados Componentes Data Access Componentes Data Access Componentes Data Control Os componentes Data Control dão às suas aplicações de banco de dados uma interface visual consistente, quer sua aplicação acesse um arquivo de banco de dados local ou um servidor remoto. Baseado na instalação padrão, os componentes Data Control estão localizados na página Data Controls da Component Palette. Componentes Data Control Estes componentes fornecem um conjunto de componentes data-aware de interface de usuário, que você pode utilizar para criar aplicações baseadas em forms. Como mencionado anteriormente, os componentes Data Control e Data Access são data-aware. Além da função de um componente Standard, componentes Data Control também podem exibir dados de um campo de uma tabela de um banco de dados ou enviar dados à uma tabela de um form. Componentes Data Control Componentes Data Control Componentes Data Control Componentes Data Control TTable O componente Table é um componente DataSet, sendo portanto, a interface entre o Borland Database Engine e os componentes DataSource Como dito anteriormente, o componente DataSource oferece a interface para os componentes data-aware. que irão compor a interface com o usuário. Trabalhando-se com o componente Table usa-se a propriedade DatabaseName para especificar o banco de dados a ser acessado; a propriedade TableName serve para indicar a tabela a acessar; utiliza-se a propriedade IndexName para definir o uso de um determinado índice com a tabela; configura-se a propriedade Active para True ou chame-se o método Open para abrir o dataset, colocando ele no estado Browse; coloca-se a propriedade Active em False ou chame-se o método Close para fechar o dataset. Data Source O componente DataSource é a interface entre um componente dataset e os componentes data-aware nos formulários. O DataSource liga-se a um dataset através da propriedade Dataset. Os componentes Data-aware, como DBEdit e DBGrid, ligamse ao DataSource através de suas propriedades DataSource. Usualmente há apenas um DataSource para cada dataset, no entanto pode-se conectar a um dataset tantos DataSource quantos forem necessários. Para monitorar-se alterações no estado do dataset associado ao DataSource pode-se associar um método ao evento OnStateChange. Data Source Componentes DataSet gerenciam a comunicação com o Borland Database Engine (BDE), e o componente DataSource gerencia a comunicação com componentes data-aware Data Control. Em uma típica aplicação de banco de dados, um componente DataSource é associado com um componente DataSet (Table ou Query) e um ou mais componentes Data Control (tais como DBGrid). Data Source Relacionamento entre os componentes TDBGrid É um componente Data Control Apresentado na interface do usuário Mostra os registros de uma tabela na forma de uma grade Cada coluna é um campo e cada registro é uma linha Deve ser ligado a um componente data source TDBNavigator O DBNavigator permite que o usuário realize operações padrão de controle de dados. Cada um dos botões do DBNavigator chama um método do Componente Table ao qual está ligado Deve ser ligado a um componente data source Prática Vamos implementar um programa que permite visualizar os estados do dataset - Adicionar a um formulário um TTable, um TDBGrid, um TDBNavigator, um TLabel Definir as seguintes propriedades: -TTable: DatabaseName: Agenda TableName: Agenda.DB Name: tbAgenda Active: True -DataSource Dataset: tbAgenda Name: dsAgenda -TDBGrid DataSource: dsAgenda -TLabel Name: lbEstado Caption: deixe em branco Alterar o evento OnStateChange do data source para: switch (tbAgenda->State) { case dsInactive: lbEstado->Caption = "Estado Inativo"; break; case dsBrowse: lbEstado->Caption = "Estado de Browse"; break; case dsEdit: lbEstado->Caption = "Estado de Edição"; break; case dsInsert: lbEstado->Caption = "Estado de Inserção"; break; case dsSetKey: lbEstado->Caption = "Estado de Busca (SetKey)"; break; case dsCalcFields: lbEstado->Caption = "Estado de Campo Calculado"; break; }