1 / 48

Laboratório de Programação I

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. Introdução teórica.

gavril
Download Presentation

Laboratório de Programação I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Aplicação com Bancos de dados usando dbExpressParte I

  3. 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.

  4. Bancos relacionais e não relacionais • Relacionais • É 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)

  5. 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.

  6. DBE com relação a base de dados

  7. 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

  8. 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

  9. 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

  10. 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...

  11. 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

  12. Arquitetura de acesso Aplicação Componentes visuais Data Controls Data Source Componentes de acesso Data Set dbExpress / BDE Base de dados

  13. 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

  14. 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

  15. 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.

  16. 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

  17. 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.

  18. TSQLDataSet

  19. 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.

  20. 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.

  21. 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..

  22. 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)

  23. 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

  24. 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

  25. SimpleDataSet

  26. 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.

  27. TSQLMonitor

  28. 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

  29. TSQLConnection

  30. 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).

  31. 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.

  32. Data Source • Relacionamento entre os componentes

  33. 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.

  34. 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.

  35. Componentes Data Control

  36. Componentes Data Control

  37. Componentes Data Control

  38. Componentes Data Control

  39. 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

  40. 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á ligado • Deve ser ligado a um componente data source

  41. TDBNavigator e comandos equivalentes Atenção: <Tabela> corresponde a um componente DataSet, como por exemplo um SimpleDataSet

  42. Prática • Vamos implementar um programa que permite visualizar os dados de um tabela

  43. Formulário principal • Crie o formulário do slide anterior com os seguintes componentes: • DBGrid • DBNavigator

  44. 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');

  45. 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)

  46. 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

  47. Ajuste as seguintes propriedades • SimpleDataSet • Connection: SQLConnection1 • DataSet • CommandText: select * from `usuarios` • CommandType: ctQuery • Active: true • DataSource • Dataset: SimpleDataSet1 • Enable: true

  48. 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);

More Related