Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de...

48
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação

Transcript of Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de...

Page 1: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Laboratório de Programação I

Carlos Oberdan Rolim

Ciência da ComputaçãoSistemas de Informação

Page 2: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Aplicação com Bancos de dados usando dbExpress

Parte I

Page 3: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Introdução teórica

O C++ Builder oferece uma série de ferramentas e recursos que possibilitam a criação de aplicações de bancos de dados de forma rápida e fácil.

A seguir serão introduzidos os conceitos básicos na manipulação com bancos de dados em C++ Builder, oferecendo uma visão geral dos componentes de acesso a dados mais corriqueiramente utilizados.

Page 4: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Bancos relacionais e não relacionaisRelacionais

É um conceito abstrato que define maneiras de armazenar, manipular e recuperar dado estruturados na forma de tabelas

Segue o modelo relacional

Usa um RDBMS (Relational Database Management System) que implementa a absração

Linguagem padrão de consulta é o SQL

Ex.: Mysql, SQLServer, Oracle

Não relacionais

Mantém tudo agrupado em uma única tabela

É uma lista simples que não se refere a outros dados

Simples de manter

Não usa SQL

Ex.:Paradox, dBase, Big Table (google)

Page 5: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

O inicio: BDE

Por muito tempo foi o coração das aplicações de bancos de dados do C++ Builder está no Borland Database Engine (BDE),

Ele é uma camada de software que realiza o acesso a bancos de dados baseados em arquivos como Paradox e dBase ou a servidores de bancos de dados locais ou remotos como InterBase, Informix, Oracle, SyBase, etc.

Os componentes de bancos de dados do C++ Builder oferecem uma forma simplificada, que usa programação visual baseada em Propriedades, Métodos e Eventos para acessar a API do BDE.

Page 6: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

DBE com relação a base de dados

Page 7: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Situação antes do BDE

Linguagens diferentes

Características diferentes

Falta de portabilidade

Baixa conectividade

Necessidade de importação / exportação de dados

Problema

Dificuldade de manutenção

Dificuldade de formação de pessoal

Page 8: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Características do DBE

Orientado a Objetos

Possui Driver específico para cada SGBD

Os arquivos do BDE devem ser distribuídos junto com a aplicação

Compatível com os principais SGBDs do mercado

Permite navegação com SQL

Page 9: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

A evolução: dbExpress

É uma camada de software independente de base de dados com um conjunto de interfaces que fornecem uma série de métodos para processamento dinamico de SQL.

Considerado como a próxima geração no acesso a dados dos produtos da Embarcadero

Evolução do BDE

Possui melhor performance e menor consumo de recursos que o BDE

Remove uma série de complexidades envolvidas na configuração do BDE

Page 10: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Aba dbExpress

Os componentes dbExpress estão localizados na aba dbExpress

Antes de começar a trabalhar com esses componentes precisamos entender a arquitetura de acesso aos dados...

Page 11: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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

Page 12: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Arquitetura de acesso

dbExpress / BDE

Base de dados

Data Source

Data Set

Componentes

de

acesso

Data Controls

Componentes

visuais

Aplicação

Page 13: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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 (data-controls)

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

Page 14: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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

Page 15: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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.

Page 16: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Dataset no dbExpress

Os principais componentes do tipo dataset utilizados pelo dbExpress são quatro:

TSQLDataSet classe TDataSet

TSQLQuery classeTQuery

TSQLStoredProc classe TStoredProc

TSQLTable classe Ttable

São datasets unidirecionais. Eles podem enviar comandos para a base de dados e se retornar um conjunto de dados obtem-se um cursor apontando para esse dados. Não é feito buffer dos dados, isso impossibilita a edição direta dos registros (pois isso necessita bufferizar os dados). Para editar pode-se usar diretamente um sql de update nos dados ou então associar o dataset a um “Client Dataset” visto adiante. Em um dataset Você só pode navegar usando os métodos First e Next.

IMPORTANTE

Page 17: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLDataSet

Representa qualquer dado obtido pelo dbExpress

O SQLDataSet permite mostrar o resultado de uma consulta ou de uma StoredProcedure, executar StoredProcedures que não retornem dados, ou obter os parâmetros disponíveis no banco(tabelas, StoredProcedures, campos de uma tabela).

Ele não suporta atualização de dados na memória, atualizações devem ser feitas utilizando-se a sintaxze SQL diretas no servidor.

Page 18: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLDataSet

Propriedade Significado

Active Define se o componente está ativado, e executando o comando passado em CommandText, visto logo abaixo.

CommandText Define o comando em linguagem SQL a ser passado. Podem ser passadas consultas, inclusões e etc..

CommandType Define o tipo do comando que foi passado em CommandText. Seus valores são ctQuery, ctStoredProc e ctTable.

DataSource Define qual será o objeto TDataSource que será conectado ao SQLDataSet.

SQLConnetion Define qual será o componete do tipo TSQLConnection que proverá acesso ao banco.

Params Para passar parametros a query

Page 19: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLQuery

O SQLQuery executa comandos SQL no banco de dados, retornando resultados de consultas, inclusões, exclusões e etc..

O SQLQuery também é unidirecional, só suportando a execução de comandos SQL.

Propriedade Significado

Active Define se o componente está ativado

SQL É onde devemos informar qual comando SQL deverá ser executadopela Query.

SQLConnetion Define qual será o componete do tipo TSQLConnection que proverá acesso ao banco.

Params Para passar parametros a query

Page 20: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLStoredProc

O SQLStoredProc é um componte específico para a execução de stored procedures existentes no banco.

Pode armazenar o resultado de uma stored procedure que retorne um cursor(posição).

Também é um componente unidirecional. As execuções das stored procedures são em sintaxe SQL.

Propriedade Significado

Active Define se o componente está ativado

StoredProcName Define o nome da stored procedure a ser executada e seus parâmetros, se existirem.

SQLConnetion Define qual será o componete do tipo TSQLConnection que proverá acesso ao banco.

Params Para passar parametros a query

Page 21: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLTable

O SQLTable representa uma tabela do banco de dados.

O TSQLTable traz todas as colunas e linhas da tabela especificada, mas também é um componente unidirecional, não permitindo a movimentação entre os registros.

Trabalha com uma única tabela de cada vez, podendo realizar alterações, inclusões etc..

Propriedade Significado

Active Define se o SQLTable está conectado à tabela especificada.

SQLConnetion Define qual será o componete do tipo TSQLConnection que proverá acesso ao banco.

TableName É onde definimos qual o nome da tabela a ser acessada.

Page 22: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Client DataSet

Armazena os dados de uma tabela em memória (buffer dos dados)

Utilizado para fazer edição de dados de uma tabela

É um componente muito útil pois habilita a edição, pesquisa, filtros, etc nos campos de uma tabela (lembre-se que datasets unidirecionais não possibilitam isso)

Propriedade Significado

Active Ativa o Dataset

ProviderName Liga o componente a um DataSet Provider

Page 23: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

DataSet Provider

Armazena todos enviados pelo um ClientDataSet em memória, efetua os logs e dispara o comando SQL de Update quando o método ApplyUpdates do ClientDataSet for invocado

Se for usar um ClientDataSet na aplicação deve-se usar um DataSetProvider

É o intermediário entre uma tabela e um ClientDataSet

Propriedade Significado

Dataset Define a que dataset o componente está ligado

UpdateMode Define como será determinado se outro usuário atualizou o registro que está tentando-se atualizar desde que ele foi lido:-upWhereAll: Faz o update falhar se o registro foi atualizado por outro usuário-upWhereChanged: atualiza somente os campos que você alterou-upWhereKeyOnly: vai usar somente as chaves primárias na claususa WHERE do SQL

Page 24: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

SimpleDataSet

SimpleDataSet combina um SQLDataSet, DataSetProvider e um ClientDataSet em um único componente

Proporciona uma conexão bidirecional (suporte a navegação completa e edição)

Se deseja-se visualizar ou editar dados de uma única tabela ou stored procedure o SimpleDataSet é a solução mais rápida

O SimpleDataSet pode trabalhar desconectado mas os dados mostrados não serão mais atuais

Page 25: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

SimpleDataSetPropriedade Significado

Active Define se o componente está conectado ao SQLConnection, e portanto com as informações atualizadas.

Connection Define qual será o componente que proverá acesso ao banco de dados.

DataSet Esta propriedade refere-se a classe DataSet interna do SimpleDataSet. Suas subpropriedades são:

DataSet.Active: define se o dataset interno está ativo.DataSet.CommandText: define qual será o comando SQL passado ao dataset.DataSet.CommantType: define qual é o comando passado em CommandText. Seus valores são ctQuery, ctStoredProc e ctTable.Atente que são os mesmos conceitos do já vistos noSQLDataSet.

Page 26: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLMonitor

O SQLMonitor é um componente utilizado para fazer a depuração da comunicação entre a aplicação e o servidor de banco de dados.

Ele grava em log os comandos SQL de uma conexão, adicionando à uma StringList.

Page 27: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLMonitor

Propriedade Significado

Active Define se o SQLMonitor está ativo e monitorando as mensagens passadas ao banco.

AutoSave Define qual será o arquivo no disco que receberá os logs da conexão

FileName É onde definimos qual o nome da tabela a ser acessada.

SQLConnetion Define qual será o componete do tipo TSQLConnection que proveráacesso ao banco.

TraceList É a propriedade utilizada para se acessar a lista de comandos logados. É do tipo StringList. A lista é automaticamente atualizada quando o componente de conexão passa alguma mensagem aobanco.

Page 28: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLConnection

Responsável pela conexão física com o bando de dados

É através dele, que obtemos o acesso aos dados, mas não acesso direto ao conteúdo das tabelas, pois isto é feito utilizando-se os outros componentes.

Exemplo de conexão em um banco mySQL

Page 29: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TSQLConnection

Propriedade Significado

Connected Define se o componente está conectado ao banco.

ConnectionName Define o nome da conexão a ser utilizada

Driver Define o driver que vai ser usado para acesso ao banco. No nosso caso vamos usar Mysql. Clicando no + abre parâmetros de configuração, destacam-se:

+ Hostname Endereco onde está o banco mysql+ Username Nome do usuario mysql+ Password Senha

LoginPrompt Define se o componente vai requerer o nome do usuário e a senha no nomento da conexão.

Name Nome do componente. Vai ser referenciado por outros componentes para manipular os dados

Page 30: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Componentes Data Access

Os componentes Data Access estão na página Data Access da Component Palette.

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.

O componente Data Access que mais vamos utilizar é o TDataSource

O Data Source deve ser utilizado como “meio de campo” sempre que um dataset retornar um cursor que será manipulado por um componente 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).

Page 31: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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, ligam-se 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.

Page 32: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Data Source

Relacionamento entre os componentes

Page 33: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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.

Page 34: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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.

Page 35: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Componentes Data Control

Page 36: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Componentes Data Control

Page 37: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Componentes Data Control

Page 38: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Componentes Data Control

Page 39: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

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

A vantagem deste tipo de saída de dados é que é possivel ver vários registros ao mesmo tempo.

Pode-se clicar duas vezes e invocar o Column Editor para editar as colunas do grid

Deve ser ligado a um componente data source

Page 40: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TDBNavigator

Permite navegar pelos registros de uma tabela

Pode-se mover o ponteiro de registro da tabela para frente ou para trás

Iniciar o modo Insert ou Edit

Efetuar inserção de novos registros ou modificados (post)

Cada um dos botões do DBNavigator chama um método do Componente Table ao qual está ligadoDeve ser ligado a um componente data source

Page 41: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

TDBNavigator e comandos equivalentes

Atenção: <Tabela> corresponde a um componente DataSet, como por exemplo um SimpleDataSet

Page 42: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Prática

Vamos implementar um programa que permite visualizar os dados de um tabela

Page 43: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Formulário principal

Crie o formulário do slide anterior com os seguintes componentes:

DBGrid

DBNavigator

Page 44: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Criar a base de dados no Mysql

CREATE DATABASE cadastro;

USE cadastro;

CREATE TABLE `usuarios` ( `id` int(4) NOT NULL AUTO_INCREMENT, `nome` varchar(255) DEFAULT NULL, `cidade` int(11) DEFAULT NULL, PRIMARY KEY (`id`));

CREATE TABLE `cidade` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`));

INSERT INTO `usuarios` VALUES (1,'Ober',1),(2,‘Maria’,1);INSERT INTO `cidade` VALUES (1,'Santo Angelo');

Page 45: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Criar o Data Module

Em aplicações de banco de dados é uma boa prática utilizar um Data module para os componentes de banco

Para incluir usar o seguinte caminho “File / New / Other / C++ Builder File / Data module”

Inclua no datamodule um SQLConnection, um SimpleDataSet e Um DataSource

Não esqueça de dar um Use Unit no Data Module no Form1 (Alt + F11)

Page 46: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Ajuste as seguintes propriedades

SQLConnection

Driver: mysql

Database: cadastro

Password: root sua senha

UserName: root seu usuario

LoginPrompt: false

Muda a propriedade Connect para true para efetuar a conexão

Page 47: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Ajuste as seguintes propriedades

SimpleDataSet

Connection: SQLConnection1

DataSet

CommandText: select * from `usuarios`

CommandType: ctQuery

Active: true

DataSource

Dataset: SimpleDataSet1

Enable: true

Page 48: Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Ajuste os eventos

Ajuste os seguintes eventos do SimpleDataSet acrescendo as seguintes linhas de código

AfterPost disparado após operação de edit ou insert

SimpleDataSet1->ApplyUpdates(0); // Esse metodo envia comando para efetivar as alteracoes efetuadas na tabela no banco de dados

AfterDelete disparado após uma deleção

SimpleDataSet1->ApplyUpdates(0);