Capítulo 10 BANCOS DE DADOS EM DELPHI CONCEITOS INICIAIS



Documentos relacionados
Noções de. Microsoft SQL Server. Microsoft SQL Server

Apostila Delphi V 1.0

Conceito de um DataSet no Delphi

Inserindo Dados no Banco de Dados Paradox.

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

CRIAÇÃO DE RELATÓRIOS EM DELPHI

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Banco de Dados BrOffice Base

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

Como funcionam os comandos de SQL no Logic Basic Por Alan Oliveira

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV

CRIANDO UM BANCO DE DADOS

Android e Bancos de Dados

Crash recovery é similar ao instance recovery, onde o primeiro referencia ambientes de instância exclusiva e o segundo ambientes parallel server.

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Iniciação à Informática

Aula 1 Acesso a Banco de Dados

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Capítulo 7. Arquitetura de Acesso a Dados do Delphi

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela

Banco de Dados Microsoft Access: Criar tabelas. Vitor Valerio de Souza Campos

Status. Barra de Título. Barra de Menu. Barra de. Ferramentas Padrão. Caixa de nomes. Barra de. Ferramentas de Formatação. Indicadores de Coluna

MANUAL DO GERENCIADOR ESCOLAR WEB

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

O programa Mysql acompanha o pacote de instalação padrão e será instalado juntamente com a execução do instalador.

Arquivos e Pastas. Instrutor Antonio F. de Oliveira. Núcleo de Computação Eletrônica Universidade Federal do Rio de Janeiro

Introdução a Banco de Dados em Delphi

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

Table of Contents. PowerPoint XP

Banco de Dados Microsoft Access: Criar tabelas

Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Procedimentos para Reinstalação do Sisloc

ÍNDICE... 2 INTRODUÇÃO... 4

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Microsoft Office PowerPoint 2007

EXEMPLO DE COMO FAZER UMA MALA DIRETA

JDBC Java Database Connectivity

Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado.

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO

Front-End Uso da Linguagem Turbo Delphi para Acesso ao Banco de Dados Mysql

MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Manual AGENDA DE BACKUP

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Iniciando o MySQL Query Brower

Desenvolvendo Websites com PHP

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS

INTRODUÇÃO AO WINDOWS

Dicas para usar melhor o Word 2007

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS

CAPÍTULO 8 Conexões de banco de dados para programadores ASP.NET

SISTEMAS OPERACIONAIS LIVRES. Professor Carlos Muniz

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

Manual Captura S_Line

Programação com Acesso a Banco de Dados

SISTEMAS OPERACIONAIS LIVRES. Professor Carlos Muniz

Data Transformation Services (DTS) por Anderson Ferreira Souza

NetEye Guia de Instalação

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Usando o Conference Manager do Microsoft Outlook

OneDrive: saiba como usar a nuvem da Microsoft

ROTINAS PADRÕES DO SISTEMAS

Veja abaixo um exemplo de como os dados são mostrados quando usamos o

AULA 1 Iniciando o uso do TerraView

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

CONFIGURAÇÃO MINIMA EXIGIDA:

Introdução ao Tableau Server 7.0

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS IMPRESSÃO. Professor Carlos Muniz

SISTEMA DE PRODUTOS E SERVIÇOS CERTIFICADOS. MÓDULO DO CERTIFICADOR MANUAL DE OPERAÇÃO Versão 2.4.6

Trabalhando com banco de dados

Google Drive: Acesse e organize seus arquivos

Usar Atalhos para a Rede. Logar na Rede

Serviço Técnico de Informática. Curso Básico de PowerPoint

WF Processos. Manual de Instruções

Índice: Nitgen do Brasil

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Analisando e comparando as funções do DBNavegator

Agendamento para Importação de Notas Fiscais

EDITORA FERREIRA MP/RJ_EXERCÍCIOS 01

BACKUP ONLINE PASSOS PARA CONFIGURAÇÃO INICIAL DO PRODUTO

MANUAL DO PVP SUMÁRIO

Menu Utilitários. Atualização do Banco de Dados Atualização e organização dos arquivos existentes

Transcrição:

BANCOS DE DADOS EM DELPHI Capítulo 10 O suporte a bancos de dados é um dos principais recursos do Delphi. Este capítulo oferece uma visão geral e simplificada do extenso suporte para programação de bancos de dados em Delphi, veremos os principais componentes e seus usos. NÃO veremos neste curso, a confecção de utilitários cliente/servidor, este item será objetivos do Curso de Delphi Avançado. CONCEITOS INICIAIS É fundamental que o desenvolvedor compreenda os principais conceitos envolvidos na programação de bancos de dados. Existem duas abordagens para armazenar arquivos, a primeira consiste em armazenar o banco de dados inteiro em um único arquivo, a outra consiste em armazenar cada tabela, índice ou quaisquer elementos em arquivos distintos, que compõem um banco de dados. O Delphi pode usar as duas abordagens. A rigor ao se referir a um banco de dados, esta referencia pode ser o nome(ou alias) do Banco ou a um diretório que contém as tabelas e dados. O Delphi não se limita a um formato específico ele pode usar tabelas dbase, Paradox, acessar servidores SQL Server, Oracle, Interbase ou outros bancos via ODBC (Open Database Connectivity). A facilidade de manipular banco de dados apresentada pelo Delphi deve-se a Borland Database Engine (BDE). A BDE também era chamado de Integrated Database Programming Interface (IDAPI), este mecanismo é o mesmo utilizado por alguns produtos da Inprise, por exemplo, Paradox, dbase. Este mecanismo libera o programador de usar o ODBC da Microsoft para fazer acesso a dados. As principais vantagens do BDE são a sua capacidade de acessar uma grande massa de dados, confiabilidade e escalabilidade, e sua principal desvantagem está baseado no fato de que todo este mecanismo deve ser fornecido junto com sua aplicação. NOTA ODBC é uma especificação criada pela Microsoft, para construção de drivers que são usados para acessar uma grande variedade de formatos de bancos de dados. Como regra geral use o BDE pois o acesso aos dados será mais rápido. A BDE permite a comunicação direta com Paradox, dbase, ODBC e servidores de bancos de dados SQL. A BDE permite a navegação em tabelas e consultas SQL, enquanto que ODBC não permite este tipo de navegação. A BDE também pode fazer a interface com o SQL Links da Inprise, este produto permite o acesso a diversos servidores SQL locais ou remotos, O Interbase é um Delphi 4 Pag. 128

servidor local que já vem incluído com o Delphi C/S. Os servidores remotos podem ser: Oracle, Sybase, Informix e Interbase ou mesmo uma interface via ODBC. A CAMADA BDE Os componentes da VCL para acesso a bancos de dados utilizam uma camada intermediária chamada BDE. Esta camada é a mesma usada nos produtos C++ Builder, Paradox, dbase for Windows. A BDE possui um a API, que é conhecida como IDAPI. A IDAPI unifica todo o acesso a dados do tipo ISAM (Indexed Sequential Access Method) e orientados a dados (SQL) em um modelo único cursor. As principais vantagens da BDE são a escalabilidade, eficiência e facilidade no acesso a um grande número de funções para acessos/manipulação de dados. A BDE ainda permite que se navegue por tabelas e queries SQL. Normalmente, dados SQL não são navegáveis, isto é, pode-se apenas mover-se o cursor para frente, nunca para trás. Diferentemente da ODBC, a BDE permite navegação por dados SQL. A principal desvantagem do uso desta camada consiste no fato que toda a BDE deve ser distribuída junto com a sua aplicação. A ARQUITETURA DA BDE-IDAPI A arquitetura da IDAPI é baseada em drivers, existindo para cada SGBD um driver específico. Este modelo é interessante pois permite a instalação de novos drivers a qualquer momento, sem que nenhuma alteração seja feita nem na BDE nem no Aplicativo. Esta arquitetura é 100% orientada a objetos, isso torna toda a infra -estrutura extensível e configurável. A IDAPI também oferece um rico conjunto de serviços como por exemplo gerenciador de buffer, ordenação de drivers de linguagem, etc. A IDAPI suporta dois tipos de drivers: Drivers que entendem a estrutura da linguagem SQL, como por exemplo InterBase SQL driver, MS SQL Driver, Oracle S QL Driver, etc. Drivers sem a estrutura SQL, como por exemplo Paradox, dbase, etc. ALIAS Para acessarmos as tabelas em um servidor de bancos de dados, ou num diretório compartilhado na rede ou local, a BDE usa um Alias, Um Alias é um apelido para a base de dados, logo, sempre que desejarmos acessar bases de dados com o Delphi, devemos utilizar aliases. Delphi 4 Pag. 129

É muito fácil criar um alias, A maneira mais conveniente é utilizar o SQL Explorer: Na figura acima vemos um alias de nome Plantas, este foi criado dentro do SQL Explorer através do comando Explore do Menu Database do Delphi. Para cria um Alias basta selecionar o comando New do SQL Explorer, em seguida é exibida uma janela solicitando qual o tipo de Alias, o valor default é STANDARD (Paradox & dbase). Depois disso basta configurar o path do alias. É possível criar aliases para acessar os tipos de bases de dados abaixo: DBase Paradox FoxPro MS Access Interbase MS SQL Server Informix DB2 Sybase Oracle Qualquer Datasource ODBC 2.0 e 3.0 Delphi 4 Pag. 130

COMUNICAÇÃO REMOTA A BDE permite a implementação de uma arquitetura cliente-servidor, de acordo com a figura abaixo: Paradox Conexão do BDE Remoto Paradox IDAPI IDAPI Paradox Driver/ Engine Requestor Driver Paradox Driver/ Engine dbase Driver/ Engine SQL Driver to Interbase Conexão para Servidor BDE Interbase Server Isso permite que as aplicações cliente de bancos de dados, não precisem ter as bases de dados armazenadas localmente. Assim, várias máquinas podem acessar uma certa base de dados em Paradox ou dbase ou SQL Server sem a necessidade de possuir todos os tipos de drivers necessários para acessar a base de dados. COMPONENTES DE ACESSO A DADOS O Delphi possui diversos componentes relacionados ao trabalho com banco de dados, eles estão disponíveis na guia Data Access, a maioria destes componentes são do tipo Não Visíveis, pois envolvem conexões, tabelas, queries, etc. Na guia Data Control existem componentes que permitem a visualização dos dados em seu formulário, este controle são chamados de data-aware. Delphi 4 Pag. 131

Para acessar um banco de dados no Delphi, você precisa de uma fonte de dados, esta fonte é o DataSource. Este componente não indica os dados diretamente, ele refere-se a uma tabela ou ao resultado de uma query. Logo, você irá necessitar um componente Table ou Query no form. Um componente DataSource pode estar conectado tanto a uma query quanto a um a tabela, normalmente, diversos componentes de um banco de dados estão conectados a uma única fonte de dados. Por exemplo, se você adicionou um TTable ou TQuery no form, use a propriedade DataSet do componente DataSource para referir-se a ele. TABELAS E QUERIES Existem três maneiras de especificar o acesso a dados no Delphi: Tabela Query Store Procedure O acesso via tabela, usa o componente TTable, é mais simples. Basta indicar o nome, um alias ou path para um diretório do banco na propriedade DatabaseName. Na propriedade TableName você deve especificar o nome da tabela a ser acesada. O acesso Via Query é mais complexo que o acesso via tabela, é necessário uma string com uma declaração SQL. O componente TQuery também possui a propriedade DatabaseName, mas não uma TableName. A seleção da tabela dá-se dentro da declaração SQL, que fica armazenada na propriedade SQL. Quando usar TTable ou TQuery? O componente TTable tende a ser mais rápido quando você estiver usando tabelas locais, O componente TQuery tende a ser mais rápido em servidores SQL. O acesso via Strored Procedure, dá-se com o uso do componente TStoredProc, e referese a procedures locais de um servidor de banco de dados SQL, ao executar esta procedure você pode receber os dados sob a forma de tabela. Lembre-se Stored Procedures só podem ser utilizadas com servidores SQL. Os componentes de Acesso a Dados são: TDataSource Faz a interface entre os componentes de acesso a bancos de dados e os de visualização de bancos de dados. Serve de fonte de informação aos componentes de visualização. TTable Uma tabela é uma coleção de registros (linhas), e cada registro é composto de campos (records) que podem ser de diversos tipos (Strings, Integer, Blob, etc..) TQuery Permite qie o programador defina queries através de comandos SQL para operar sobre tabelas na base de dados. São possíveis as operações de SELECT, UPDATE, INSERT e DELETE. TStoredProc Permite a execução de stored procedures que estejam em um outro servidor de bancos de dados. Delphi 4 Pag. 132

TDataBase TSession TBatchMove Universidade Federal do Rio de Janeiro Permite a conexão a um database que é uma coleção de tabelas geralmente é utilizado para controle de transações, segurança e controle de conexão, normalmente é usado para conexão com bancos de dados remotos em aplicativos tipo Client/Server. Fornece controle global sobre as conexões de bancos de dados para uma dada aplicação, inclui-se lista de bancos de dados existentes e aliases. É usado para executar operações em batch em um ou mais banco de dados, como cópia, inclusão, atualização ou remoção de dados, reúne valores a serem passados ao método BatchMove de um TTable. TUpdateSQL Este componente, tornou-se disponível a partir da versão Delphi 2.0, permite que se utilize suporte de cache de atualização. Isto é, você pode escrever algumas declarações SQL para executar diversas operações de atualização no DataSet, mesmo utilizando uma query read-only. Este componente é usado como valor da propriedade UpdateObject da TTable e TQuery. TNestedTables É um componente que encapsula a tabela de um database, qeu está aninhada como um campo em outra tabela. Usa-se TNestedTable para acessar dados aninhados em outro da tabase. Uma tabela aninhada, herda toda a funcionalidade de TBDEDataSet e usa a BDE para acessar dados em tabelas aninhadas. A lista abaixo apresenta alguns termos relacionados a banco de dados que serão usados no decorrer deste capítulo. Dataset Table Query Database Index É uma coleção discreta de registros (records) cada registro é constituído de um ou mais campos (fields), cada campo pode conter um tipo de dado diferente (inteiros, reais, strings, gráficos, etc.). Datasets são representados pela classe abstrata TDataSet. É um tipo especial de dataset. Uma tabela geralmente é um arquivo que contém os registros que estão armazenados em seu disco rígido. Tabelas são representadas pela classe TTable. Também é um tipo especial de Dataset. Uma query (consulta) é gerada através de comandos especiais que manipulam uma tabela ou um conjunto de tabelas. A classe TQuery manipula as queries. Refere-se a um diretório em seu disco (bancos Paradox e dbase) ou a arquivos de banco de dados (SQL Servers( ). Um database pode armazenar várias tabelas. A classe TDatabase manipula os databases. Define uma regra de ordenação de uma tabela. Indexar uma tabela significa, ordenar os registros de uma tabela em função de um dado campo. Não existe uma classe TIndex, as propriedades e métodos de TTable são usados para manipular índices. Delphi 4 Pag. 133

COMPONENTES DE CONTROLE DE DADOS Nesta seção apresentaremos os componentes que permitem o trabalho/visualização de dados de uma tabela ou query. Estes componentes parecem controles normais do Windows, porém estão relacionados a dados. Destes componentes, alguns são conectados á fonte de dados usando a propriedade DataSource, outros através da propriedade DataField, os componentes da guia DataControl são: DBGrid DBNavigator DBLabel DBEdit DBMemo DBImage DBListBox e DBComboBox DBCheckBox DBCtrlGrid. Exibe uma tabela com a totalidade de seus dados em uma planilha, permite rolagem e navegação e edição de seus registros. Conjunto de botões usados para navegar e excetuar ações em um banco de dados. Usado para exibir o conteúdo de um campo não alterável Permite que o usuário visualize e modifique o valor de um campo. Permite que o usuário altere/visualize o conteúdo de um campo do tipo Memo ou Blob Usado para exibir uma imagem armazenada em um campo Blob. Permitem que o usuário selecione um único valor a partir de uma conjunto de valores pré-definidos. Se este valores forem extraídos de uma tabela do banco ou resultantes de uma query, use os componentes DBLookupListBox ou DBLookupComboBox. Permite que o usuário ative/desative opções É uma grade multi-registro, pode acomodar diversos controles relacionados com dados DATABASE DESKTOP (DBD) Existem duas maneiras de criar tabelas no Delphi. A maneira mais simples é usar o Database Desktop (DBD). Se você quer um controle maior na criação de tabelas, use o TQuery e declarações SQL. Delphi 4 Pag. 134

Para iniciar o DBD, selecione o comando Tool/Database Desktop. Após iniciar o DBD, selecione o comando File/New/Table para criar uma tabela, será exibida a caixa de diálogo Table Type, veja a figura abaixo. Na caixa de diálogo Table Type, selecione a versão e o tipo de tabela (Paradox, dbase, Oracle, Interbase, Sybase, etc.). Após especificar o tipo de tabela, o DBD exibe uma dialog box onde você especifica o nome e o tipo dos campos de sua tabela. CUIDADO: Cada tipo de tabela possui um conjunto de características que devem ser respeitadas no momento de sua criação, veja os exemplos abaixo: TABELAS PARADOX Nome de campo com até 25 caracteres. Nome de campo não pode começar por branco, mas pode conter brancos, em nome da portabilidade use nomes com até 9 caracteres e sem espaços. Não inclua os caracteres, [ ], { }, ( ), ->, #. Delphi 4 Pag. 135

TABELAS DBASE Nome de campo com até 10 caracteres. Nome de campo não pode conter espaços. Após escolher o nome dos campos, selecione seus tipos (para obter os tipos de dados use o botão direito do mouse). Caso o campo seja parte da chave primária, marca o campo Chave com asterisco (*). NOTA Tabelas Paradox podem ter chaves compostas, porém o primeiro campo da chave primária deve ser o primeiro campo do registro. Após criar uma Tabela Paradox, você pode associar algumas propriedades a ela, tais como: índice secundário, regras de validação e integridade referencial. Estas características podem ser adicionadas através do comando Utility/Restructure do DBD. Caso sejam adicionadas essas características em uma tabela Paradox, elas serão respeitadas pelo Delphi em runtime. Por exemplo, se você criar tabelas com integridade referencial, ao tentar inserir dados inválidos numa child tabela, o Delphi irá gerar uma exception. CRIANDO TABELAS COM SQL O Delphi permite a criação de tabelas via declarações SQL. A sintaxe para a criação de tabelas depende do servidor que você utiliza, porém as declarações mais elementares são aceitas por quase todos os servidores. Para criar uma tabela com SQL, primeiro adicione um objeto TQuery ao form, crie um Alias válido na propriedade DatabaseName e digite a string semelhante a exibida abaixo na propriedade SQL. Create Table MinhaTabela(PrimNome char(15), UltimoNome char(15)); Ao rodar o seu programa e executar o SQL chamando Query1.Open, o servidor criará a tabela MinhaTabela no banco de dados corrente. DATASETS TDataSet é uma abstração de um conjunto de dados sob forma de linhas e colunas. As colunas de dados são de um determinado tipo, enquanto que as linhas são o conjunto de dados formado pelos tipos de dados de cada coluna. A maioria dos métodos e propriedades para navegação e manipulação de dados está localizado em TDataSet. A VCL representa Datasets através de três componentes: TTable, TQuery e TStoredProc, esses componentes, são descendentes diretos do componente TDBDataSet, que por sua vez descende de TDataSet. TTable é o componente que representa a estrutura e dados da tabela de um banco de dados. TQuery é o componente que representa o conjunto de dados retornados por uma declaração SQL. TStoredProc encapsula uma Stored Procedure de um servidor SQL. Delphi 4 Pag. 136

DATASETS - NAVEGAÇÃO O Dataset é uma coleção de registros e campos. Normalmente, trabalhamos com um registro ou campo por vez, logo teremos que mover (avanços ou retornar) entre registros ou campos. Esta navegação é possível graças aos métodos do componente TDataset. ABRINDO UM TDATASET Antes de efetuar qualquer operação no dataset, você precisa abri-lo. Para abrir um dataset use o método Open( ). Table.Open; Esta declaração equivale a configurar a propriedade do Active do dataset para True. Table1.Active:= True; Uma vez aberto, o dataset pode ser manipulado. Para finalizar o uso do dataset, selecione o método Close( ). Table1.Close; ou configure a propriedade Active para False. Table1.Active:= False; ROTINAS DE NAVEGAÇÃO TDataset possui métodos que permitem a navegação básica através dos registros. Procedure First; Procedure Last; Procedure Next; Procedure Prior; Propriedade BOF : Boolean read FBOF; Propriedade EOF : Boolean read FEOF; Procedure MoveBy (Distance : Integer); Suas funcionalidades são: Table1.First move para o primeiro registro da tabela (dataset). Table1.Last move para o último registro da tabela. Tablel.Next move para o próximo registro da tabela, exceto se você estiver no último registro. Table1.Prior move para o registro anterior, exceto se você estiver no início da tabela. As propriedades booleanas BOF e EOF verificam o início e fim de tabela respectivamente. A Procedure MoveBy move N records (para frente ou para trás) numa tabela. Não existe nenhuma diferença funcional entre (Table1.Move By(1) e Table1.Next) e (Table1.Move By(-1) e Table1.Prior). Delphi 4 Pag. 137

BOOKMARKS Universidade Federal do Rio de Janeiro Os bookmarks permitem que você marque sua posição na tabela, a fim de permitir um rápido retorno quando for necessário. A rigor, o bookmark salva a sua posição relativa no dataset. Existem três métodos para trabalhar com bookmarks. Procedure FreeBookMark(BookMark: TBookMark); function GetBookMark(BookMark: TBookmark); Procedure GotoBookMark (BookMark: TBookmark); O método GetBookMark( ) chama a variável do tipo TBookmark que contém informações que permitem ao Delphi achar a localização referid a, isto é, o método retorna uma instância da classe TBookmark que descreve a posição atual no dataset. Quando você acha um ponto no seu dataset e você deseja ser capaz de retornar facilmente, a sintaxe a ser usada é: var BM: Tbookmark: Begin End; ou então: BM:= Table1.GetBookMark; Procedure Tform1.MarkClick(sender : Tobject); begin if Bookmark = nil then Bookmark :=Table1.GetbookMark; end; O método GotoBookMark( ) volta ao ponto do dataset marcado através de GetBookMark( ), então, para efetuar a movimentação chame GotoBookMark ( ) e passe TBookMark retornado por GetBookMark( ). Table1.GotoBookMark(BM) O método GetBookMark( ) aloca memória principal, então lembre-se de liberá-la ao finalizar o programa. Para liberar memória use o método FreeBookMark( ). Table1.FreeBookMark (BM): ou então: Procedure TForm1.Button2Click (Sender: Tobject): begin if Bookmark < > nil then begin Table1.GotoBookMark(Bookmark); Table1.FreeBookMark(Bookmark); Bookmark := nil; Delphi 4 Pag. 138

end; end; LOOPS DE NAVEGAÇÃO Caso você necessite efetuar uma operação em cada registro do dataset, os métodos mais comuns são: While not Table1.EOF do Begin FazAlguamCoisa; Table1.Next; end; CUIDADO: While not Table1.BOF do Begin FazAlguamCoisa; Table1.Prior; end; Assegure-se de chamar o método Next( ) no interior do While, caso contrário você terá um loop infinito. Evite usar loops Repeat..Until para executar ações no dataset. O código abaixo aparentemente está OK, porém, ocorrem erros em datasets vazios, pois a Procedure FazAlgumaCoisa sempre será executada pelo menos uma vez, independentemente do dataset esteja cheio ou não. Repeat FazAlgumaCoisa; Table1.Next; Until Table1.EOF; CAMPOS (Fields) O objeto Fields permite que você faça acesso a qualquer campo de um dataset. Para acessar campos individuais de um dataset, use uma das propriedades ou método de TDataSet listados abaixo. Propriedade FieldValues [Index : Integer]; Function FieldByName (const FieldName : string):tfield; Propriedade FieldCount; Propriedade Fields; A propriedade FieldValues[ ], retorna os valores de um registro sob a forma de uma variável do tipo variant. Pelo fato de FieldValue[ ] ser o array default, não é necessário o nome da propriedade para acessar o array. Veja o exemplo abaixo, onde se atribui o conteúdo de CustNo a string S. ou ao inteiro I. S:= Table1['CustName']; I:= Table1['CustName']; É possível armazena todos os campos de um registro em um array do tipo variant, analise o exemplo abaixo: Delphi 4 Pag. 139

Const Astr = 'O %S é da %S categoria e seu tamanho é %F polegadas'; Var VarArr : Variant; F : Double; Begin VarArr := VarArray.Create([0,2],varVariant); VarArr := Table1('Nome, Categoria, Lenght'); F := VarArr[2]; ShowMessage (Format(Astr,[VarArr[0],VarArr[1],F)); End; A função Field ByName( ) também é usada para acessar um campo, ela aceita uma string como parâmetro, que corresponde ao nome do campo na tabela. Por exemplo, FieldsByName('OrderNo') retorna um componente do tipo TField cuja representação é o campo OrderNo do registro corrente da dataset. A propriedade FieldCount retorna o número de campos da estrutura do registro. VALORES DOS CAMPOS Dado um objeto TField é possível atribuir/recuperar o valor de um campo usando uma das propriedade de TField descritas na tabela abaixo:. Propriedade AsBoolean AsFloat AsInteger AsString AsDataTime Value Tipo Retornando Boolean Double Long Int String Tdate Time Variant Se o primeiro campo do dataset é uma string, você pode ver seu conteúdo num TEdit. Edit1.Text := Table1.Fields[0].AsString; No código abaixo, a variável I recebe o conteúdo do campo OrderNo do registro corrente. I := Table1.FieldsByName('OrderNo').AsInteger; Delphi 4 Pag. 140

A PROPRIEDADE DATATYPE Esta propriedade indica qual o tipo de um campo pertencente a uma tabela, os tipos NÃO são correspondentes aos tipos do Object Pascal. A propriedade DataType descende de TFieldType, é definida como: TfieldType =( ftunknown, ftsmallint, ftinteger, ftword, ftboolean, ftfloat, ftbcd, ftdate, fttime, ftdatetime, ftbytes, ftvarbytes, ftautoinc, ftblob, ftmemo, ftgraphic, ftfmtmemo, ftgraphic, ftfmtmemo, ftparadoxole, ftdbaseole, fttypebinary) NOMES E NÚMEROS DE CAMPO Para obter o nome de um campo de uma tabela, usa-se a propriedade FieldName, para obter o número do campo, quando se conhece apenas seu nome, usa-se a propriedade FieldNo. Analise os exemplos abaixo. 0} Var Begin S : String; I : Integer; S := Table1.Fields[0].FieldName; {S recebe o nome do campo cujo índice é I := Table1.FiledsByName('OrderNo').FieldNo; {I recebe o número do campo corespondente a OrderNo} End; A propriedade FieldCount indica o números de campos de uma tabela. MANIPULANDO CAMPOS DE DADOS Os métodos abaixo permitem que o usuário manipule dados de uma tabela Procedure Append; Procedure Insert; Procedure Cancel; Procedure Delete; Procedure Edit; Procedure Post; Todas essas rotinas são parte de TDataSet e são herdada e utilizadas por TTable e TQuery. O processo de edição de um ou mais campos do registro corrente é constituído de 3 etapas. 1. Chame o método Edit( ) do dataset, para deixar o data set em edit mode. 2. Atribua o novo valor ao campo desejado. 3. Envie a alteração para o dataset chamando o método Post( ) ou movendo-se para um novo registro (ocorrerá um Post automático). Delphi 4 Pag. 141

Veja um exemplo típico: Table1.Edit; {coloca o database em modo de edição} Table1.['Age'] := 33; Table1.Post; NOTA: {atribui 33 no campo Age} {escreve o dado no disco} É possível que o dado a ser modificado seja não editável (isto é, se a propriedade ReadOnly de TTable ou TQuery seja True) você pode verificar se um registro será ou não modificável através da propriedade CanModifity. Se CanModify é True o dataset é editável. Para inserir ou apendar registros ao dataset: 1. Chame os métodos Insert( ) ou Append( ) do dataset para colocar o dataset em insert mode. 2. Atribua os valores ao campo do dataset. 3. Envie o novo registro para o dataset através do método Post( ) ou mova-se para um novo registro (ocorrerá um Post automático). Veja um exemplo: NOTA Table1.Insert; Table1.['Name'] := 'Sergio Serra'; Table1.['Age'] := 33; Table1.['Job'] := 'Analista de Sistemas'; Table1.Post; As chamadas métodos First( ), Next( ), Prior( ), Last( ) e MoveBy( ) executam um Post automático quando você estiver em edit, insert ou append mode, se você estiver trabalhando com um servidor de dados, as regras acima não se aplicam, pois eles possuem regras próprias. Em algum momento, antes que as edições e modificações em seu dataset sejam efetuadas pelo Post, você pode abandonar as alterações usando o método Cancel( ). Analise o exemplo a seguir: Table1.Edit; Table1.['Age'] := 33; Table1.Cancel; O método Cancel( ) desfaz as alterações no dataset, tira -o de edit mode, append ou insert mode, e coloca o dataset em browse(visualização) mode. O método Delete( ) remove o registro corrente no dataset, veja um exemplo: Tabel1.Last; Table1.Delete; Delphi 4 Pag. 142

REFRESH Universidade Federal do Rio de Janeiro Uma tabela aberta está sujeita a alterações, registros são adicionados, removidos e alterados continuamente no seu dataset, então, regularmente você deve reler as informações do dataset do disco ou memória para atualizar seu dataset. Você pode atualizar seu dataset usando o método Refresh( ), funcionalmente ele faz o mesmo que um Close( ) e Open( ) em seu dataset, porém é muito mais veloz. CUIDADO: A chamada do Refresh( ) pode causar algum efeito colateral para os usuários de seu programa. Se um usuário está vendo um registro deletado e um Refresh( ) é executado, o usuário terá a impressão que o registro desapareceu sem nenhuma razão aparente. A PROPRIEDADE STATE A propriedade State de TDataSet informa se uma tabela ou query está em edit ou append mode ou mesmo se está ativa, os valores de status válidos são: Valor dsbrowse dscalcfields dsedit dsinactive dsinsert dssetkey Significado É o valor default, O dataset está um modo de visualização. É o estado enquanto o evento OnCalcFields está sendo executado. O dataset está em modo de edição, isso significa que o método Edit( ) foi chamado e o registro que está sendo editado. O dataset está fechado. O dataset está em mode de inserção, isso significa que o método Insert( ) foi chamado e a alteração ainda não foi efetuada. Indica que estamos preparando uma pesquisa no dataset. O dataset está em setkey mode, isso significa que SetKey( ) foi chamado, mas o GotoKey( ) ainda não foi chamado. FILTROS Os filtros permitem que você pesquise e filtre dados usando somente código Object Pascal. A grande vantagem do uso de filtros está baseada no fato que eles não usam índices ou qualquer outra preparação do dataset. Delphi 4 Pag. 143

FILTRANDO UM DATASET Um dos usos mais comuns de filtros em Delphi, é limitar o visualização de um conjunto de dados, permitindo que sejam exibidos somente um conjunto de dados específicos. Este processo é muito simples e consistem de duas etapas. 1 - Codifique a procedure de filtragem do data set no evento OnFilterRecord de TTable. 2 - Altere o valor da propriedade Filtered para True. O código abaixo é um pequeno exemplo de uso de filtros. procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean); var fieldval : string; begin fieldval:=dataset['company']; // Filtra os valores do campo company accept:=fieldval[1]='s'; //recebe os elementos que começam com S end; USANDO TTABLE Esta seção descreve não só os principais métodos e propriedades do componente TTable como também sua utilização. Você aprenderá aprender a localizar registros, filtrar registros através de ranges (intervalos) e criar tabelas. PESQUISANDO REGISTROS A VCL possui vários métodos usados para pesquisar registros em uma tabela. Se você estiver trabalhando com tabelas dbase ou Paradox, o Delphi assume que os campos em que você faz a pesquisa são os índices. Em tabelas SQL, sua busca não terá boa performance caso você não possua índices definidos.. Por exemplo, imagine que você possui uma tabela, o primeiro campo é chave primária e é tipo numérico, o segundo campo é alfanumérico. Você pode pesquisar um registro usando uma das técnicas abaixo: FINDKEY ( ) Técnica do FindKey( ) Técnica SetKey( )...GotoKey( ) O método FindKey( ) de TTable permite que você pesquise um ou mais campos numa única chamada da função. A função FindKey( ) aceita um array de constantes (critério de busca) como parâmetro e retorna True quando sua pesquisa é bem sucedida. Por Delphi 4 Pag. 144

exemplo, o código abaixo busca o registro cujo (primeiro) campo possui valor 123 e o segundo a string Hello. if not Table1.FindKey([123, 'Hello']) then MessageBeep(0); Caso a busca retorne False será emitido um beep. SET KEY ( )... GOTOKEY ( ) A chamada do método SetKey( ) coloca a tabela num modo que prepara os campos para serem carregados com os valores representados pelo critério de busca. Uma vez estabelecido o critério de busca, use o método GotoKey( ) para pesquisar os registros coincidentes. Rescrevendo o exemplo anterior teremos: With Table1 do begin SetKey; Fields[0].AsInteger := 123; Fields[1].AsString := 'Hello'; if not GotoKey then MessageBeep(0); end; CLOSET MATCH - Buscas Você pode usar o método FindNearest( ) ou a técnica SetKey( )...GoToKey( ) para pesquisar um valor numa tabela que mais se aproxima ao critério de busca. Por exemplo, para pesquisar o primeiro registro cujo valor mais se aproxima do valor indexado (maior ou igual a 123), use o código abaixo. Table1.FindNearest([123]); FindNearest( ) aceita um array de constantes como parâmetro que contém os valores dos campos a serem procurados. with Table1 do begin SetKey; Fields[0].AsInteger := 123; GotoNearest; end; Caso a pesquisa obtenha sucesso e a propriedade KeyExclusive estiver setada como false, o ponteiro de registro apontará para o primeiro registro coincidente. Se KeyExclusive for true, o registro corrente será o imediatamente posterior ao registro coincidente. Delphi 4 Pag. 145

ÍNDICES Todos os métodos de pesquisa, assumem que você está pesquisando uma tabela com índice primário. Se você deseja pesquisar uma tabela usando um índice secundário, use o parâmetro IndexName com o índice desejado. Por exemplo, se sua tabela possui um índice secundário no campo SobreNome, e seu índice é chamado de LastName, o código abaixo permite que você busque uma pessoa cujo último nome é Serra. with Table1 do begin IndexName := 'LastName'; SetKey; FieldValues['SobreNome'] := 'Serra'; GotoKey; end; USO DE RANGES PARA FILTRAR REGISTROS DE UM DATASET O uso de Ranges permite que você filtre uma tabela, de modo que contenha apenas valores de campo dentro de uma faixa definida. Ranges funcionam de modo semelhante a chaves de procura. Existem vários métodos de utilizar ranges, a saber: Procedure SetRange; Procedure ApplyRange; Procedure SetRangeEnd; Procedure SetRangeStart; Para usar esses métodos: 1. Chame SetRangeStart( ) e depois use a propriedade Fields para definir o início do Range. 2. Chame SetRangeEnd( ) e use a propriedade novamente para definir o fim do Range. 3. As duas ações acima preparam o filtro: agora chame ApplyRange. SETRANGE( ) SetRange( ) aceita duas variáveis do tipo array of const como parâmetro. O primeiro representa o valor de início do range e o segundo, o final do range. Veja o exemplo abaixo. Table1.SetRange([10], [15]); APPLYRANGE ( ) O uso do método ApplyRange( ) constitui-se das etapas abaixo: Delphi 4 Pag. 146

1. Chame o método SetRangeStart( ) e modifique o array da propriedade Fields[ ], estabelecendo um valor de início para o campo chave. 2. Chame o método SetRangeEnd( ) e modifique mais uma vez o array da propriedade de Fields[ ] estabelecendo um valor de término para o campo chave. 3. Chame ApplyRange( ) para estabelecer um novo range. O Range anterior pode ser reescrito como: with Table1 do begin SetRangeStart; Fields[0].AsInteger:= 10; {Range iniciando 10} SetRangeEnd; Fields[0].AsInteger:= 15; {término do Range em 15} ApplyRange; end; REMOVENDO UM RANGE Para remover um ranger de uma tabela e recuperar a tabela ao estado anterior a definição do ApplyRange( ) ou SetRange( ), use o método CancelRange( ) de TTable. Table1.CancelRange; EVENTOS DE TTABLE TTable fornece alguns eventos que ocorrem antes e depois que um registro é deletado, editado e inserido; quando uma modificação é efetivada ou cancelada, ou ainda quando uma tabela é aberta ou fechada. Os eventos de TTable permitem que você tenha controle total sobre sua aplicação de banco de dados. A nomenclatura destes eventos seguem o padrão BeforeXXX e AfterXXX, onde XXX pode ser delete, edit, insert, open, etc. OnNewRecord Este evento ocorre sempre que um novo record é adicionado à tabela OnCalcFields Este evento ocorre se o cursor é movido para fora do registro corrente ou se o regitro corrente foi modificado. Adicionar um evento em OnCalcFields permite que você manipule campos calculados NOTA Um campo calculado é um campo que não necessariamente faz parte da tabela fisicamente, porém está associado logicamente a TTable. Um campo calculado permite que você exiba o valor baseado em um ou mais campos do registro corrente. Delphi 4 Pag. 147