FireDAC - The Club

Propaganda
junho
2013
junho
2013
04
Editorial
05
FIREDAC
Autor: Luciano Pimenta
10
C#
16
Android
Desenvolva uma Aplicação Desktop em C# e MySQL –
Parte 2
Gerenciadores de
Banco de Dados SQLite
Autor: João Marcos Sakalauska
Autor: Marcos C. Silva
20
TValueListEditor
Criando e Manipulando dados
Índice
Autor: Lucas Vieira de Oliveira
28
Dicas The Club
junho
2013
03
Editorial
Olá amigos!
Chegamos à sexta edição da revista The Club deste ano de 2013, sempre
com a finalidade de suprir todas as necessidades de nossos associados com
dicas e artigos atualizados no mundo da programação. Graças aos senhores,
ao longo destes últimos anos, conseguimos produzir uma revista com um
conteúdo mais eclético podendo atingir desenvolvedores .Net, Delphi e
Android. Neste mês nosso colunista João Marcos Sakalauska dá continuidade ao artigo sobre aplicações Desktop em C# junto com o banco de dados
MySQL,. Nesta segunda parte aborda o uso do driver de conexão “MySQL
Connector” junto com o “ Microsoft Visual Studio”. Já nosso consultor técnico Jéferson Silva de Lima nos preparou um artigo com um assunto abordado em nosso suporte técnico, o uso do componente “TValueListEditor”,
servindo de base para todas as versões do Delphi. Neste artigo ele cria e
manipula arquivos do tipo “.ini” com recursos deste componente. Luciano
Pimenta nos apresenta em primeira mão a nova tecnologia de acesso a
dados, o FireDAC, estando disponível para usuários do Delphi XE3 e XE4.
Esta tecnologia veio para substituir o DBExpress, ressaltando que o mesmo
ainda será suportado, apenas não será atualizado. Eu continuo trabalhando
com o sistema Android, sendo que nesta publicação trago informações e
tutoriais explicando o uso de aplicativos para gerenciadores de Banco de
dados SQLite, um recurso para ser utilizado junto com o dispositivo móvel,
auxiliando na manipulação e organização dos dados.
Não deixem de ler nossa seção de Dicas, sempre com um conteúdo rápido
e prático para ajudá-los.
Um grande abraço e até o mês que vem!
Av. Profº Celso Ferreira da Silva, 190
Jd. Europa - Avaré - SP - CEP 18.707-150
Informações e Suporte: (14) 3732-1529
Internet
http://www.theclub.com.br
Cadastro: [email protected]
Suporte: [email protected]
Informações: [email protected]
Skype Cadastro: theclub_cadastro
Skype Suporte: theclub_linha1
theclub_linha2
theclub_linha3
www.twitter.com/theclubbr
Copyright The Club 2013
Diretor Técnico
Marcos César Silva
Diagramação
Vitor M. Rodrigues
Design
Vitor M. Rodrigues
Revisão
Drielly Cristini Patrinhani
Colunistas
João Marcos Sakalauska
José Antonio P. M. de Paula
Lucas de Oliveira
Luciano Pimenta
Thiago Cavalheiro Montebugnoli
Juninho
Jeferson Silva de Lima
Impressão e acabamento:
GRIL - Gráfica e Editora
Taquarituba-SP - Tel. (14) 3762-1345
Reprodução
Thiago Montebugnoli - Editor Chefe
[email protected]
04
junho
2013
A utilização, reprodução, apropriação, armazenamento em banco
de dados, sob qualquer forma ou meio, de textos, fotos e outras
criações intelectuais em cada publicação da revista “The Club
Megazine” são terminantemente proibidos sem autorização
escrita dos titulares dos direitos autorais.
Delphi é marca registrada da Borland International,
as demais marcas citadas são registradas
pelos seus respectivos proprietários.
FireDAC
A
Embarcadero divulgou recente uma ótima noticia, a aquisição do AnyDAC, framework de acesso a dados .NoDelphi,
ele passou a ser FireDAC e esta disponível para usuários do
XE3 e XE4 das versões Enterprise, Ultimate ou Architect. Para
quem usa a versão Professional, pode adquirir um pacote
add-on client/server.
FireDAC possui uma engine otimizada para acesso a dados. Além disso,
existem várias funções para abstrair o servidor de banco de dados usado, assim,
sua aplicação pode facilmente ser multi-banco. O servidor de banco de dados
fica a cargo de sua escolha ou do seu cliente.
O dbExpress tinha também esse objetivo, criar aplicações multi-bancos,
mas exemplos indicam que projetos que utilizam mais de um servidor de
banco, usando dbExpress, não tem toda essa facilidade. FireDAC ainda tem a
vantagem de acesso a banco de dados no iOS.
•
•
•
Access
DB2
Firebird
No XE4, temos acesso de banco de dados no iOS para os seguintes bancos
de dados:
•
•
InterBase – InterBase ToGo and IBLite
SQLite
Instalação
O instalador é bastante simples, onde apenas temos que informar o que
queremos instalar (ferramentas, exemplos, help etc), como podemos ver na
Figura 1.
Nota: O FireDAC veio para substituir o dbExpress, mas esse continuará a ser suportado, apenas não será mais atualizado. Se suas aplicações
com dbExpress (ou até mesmo BDE, que existem hoje em dia), funcionam
normalmente, não há motivos para a troca. Para novos projetos, comece
a utilizar o FireDAC.
Veja a seguir os principais bancos suportados:
•
•
•
•
•
•
•
MySQL
SQL Server
Oracle
InterBase
PostgreSQL
SQLite
Sybase SQL Anywhere
Figura 1. Instalação do FireDAC
Assim como os exemplos de conexões que vamos utilizar, ou seja, os serjunho
2013
05
vidores de banco de dados que queremos conectar com o FireDAC (Figura 2).
Além disso, temos acesso ao Monitor, um trace onde podemos ver como
estão as conexões usadas pela aplicação (Figura 5), ficando fácil encontrar os
gargalos de performance.
Dica: é necessário codificar para habilitar o monitoramento do trace
na aplicação.
Figura 2. Escolhendo os servidores que iremos utilizar com o FireDAC
Após a instalação, abra o Delphi e veja que foi adicionado um novo menu
(Figura 3).
Figura 5. Monitorando o trace da aplicação
Na Tool Palette temos três novas abas com os controles que poderemos
usar nas aplicações com acesso a dados (Figura 6).
Figura 3. Menu no Delphi do FireDAC
Através do menu, temos acesso a algumas configurações do FireDAC,
como por exemplo o Explorer onde temos os arquivos de configuração de
conexões aos banco de dados suportados. O Explorer é semelhante ao BDE
Admin (Figura 4).
Figura 6. Componentes do FireDAC
Criando o primeiro exemplo
Vamos então, criar o primeiro exemplo com o FireDAC. Adicione um
ADConnection e um ADQuery da aba FireDAC. Dê um duplo clique no ADConnection para abrir o editor de configuração de conexão (Figura 7).
Figura 4. Ferramenta Explorer do FireDAC
junho
06
2013
Agora, basta adicionar um DataSource, um DBGrid e fazer as conexões.
Ativando o ADQuery podemos ver os dados em design-time. Executando a
aplicação temos a mensagem de erro da Figura 9.
Figura 9. Mensagem de erro ao executar a aplicação
Figura 7. Editor de conexões do ADConnection
No editor, escolhemos o driver que vamos usar e todas as configurações
referente a conexão. Algo bem simples, para quem esta acostumado a usar BDE
e dbExpress. No item Connection Definition Name escolhemos as conexões
criadas na ferramenta Explorer.
Essa mensagem ocorre, por que precisamos adicionar na aplicação a unit
ou o componente referente ao driver utilizado (nesse caso o SQL Server).
Isso ocorre por que o FireDAC não usa DLL, tudo esta no fonte da unidade,
então precisamos adicionar um ADPhysMSSQLDriverLink ou colocar no uses
“uADPhysMSSQL”.
Tente novamente executar e acredito que terá o erro da Figura 10.
Após, basta alterar para true a propriedade Connected para testar a
conexão com o banco. No ADQuery vamos fazer a consulta para o exemplo.
Note que não precisamos indicar o Connection, a propriedade Connection
é preenchida automaticamente ao adicionar o componente no formulário.
Na propriedade SQL, digite o código da consulta (“select * from Customers”). Caso seja necessário fazer testes, verificar se estamos selecionando
os dados corretos, basta dar um duplo clique no ADQuery que será aberto
um editor onde podemos fazer consultas no banco, sabendo corretamente
os campos retornados, parâmetros etc (Figura 8).
Figura 10. Mensagem de erro
Esse caso é igual, basta adicionar o ADGUIxWaitCursor ou no uses “uADGUIxFormsWait”. Depois, basta executar a aplicação para visualizar o primeiro
exemplo usando FireDAC (Figura 11).
Figura 11. Primeiro exemplo com FireDAC
Nota: a unit da solução do erro da Figura 9 dependerá do banco
utilizado.
Figura 8. Editor de consultas do ADQuery
junho
2013
07
Na parte referente a manipulação de dados (insert, update, delete), a
utilização é praticamente igual a utilizada com BDE. Temos componente para
transação (ADTransaction) que deve ser configurado nas propriedades Transaction e UpdateTransaction do ADConnection.
Nota: Você pode usar o ADTable ou ADQuery para manipular os
dados. Mas deixo a dica para usar o ADQuery, pois assim, podemos usar
parâmetros, sem a necessidade de trazer todos os registros da tabela,
pois vamos modificar apenas um.
Outros componentes
Vamos conhecer outros componentes interessantes do FireDAC.
ADScript: componente que concentra na propriedade SQLScripts vários
comandos SQLs para serem usados na aplicação (Figura 12), além de podermos
usar arquivos de script, usando a propriedade SQLScriptFileName.
autenticação do banco de dados. Você deve configurar o componente na propriedade LoginDialog do ADConnection, lembrando também que a propriedade
LoginPrompt deve estar configurada para true.
ADGUIxErrorDailog: componente que mostra uma tela com o erro que a
aplicação executou. Serve apenas para erros com banco de dados.
Backup: a possibilidade de realizar backup do banco esta disponível apenas para alguns servidores (que disponibilizam APIs para isso). Podemos fazer
backup de bancos Interbase/Firebird usando o ADIBBackup ou ADIBNBackup.
Nesse caso ainda precisamos indicar o driver que usaremos (ADPhysIBDriverLink). Para realizar o backup, basta configurar as propriedades BackupFiles (indicação do arquivo de backup), Database (arquivo FDB ou IB), Host,
UserName e Password.
Restore: semelhante ao backup, basta adicionar o ADIBRestore ou ADIBNRestore, configurar o driver e as propriedades mencionadas anteriormente.
Tanto o backup como restore, possui opções para as respectivas funcionalidades.
dbExpress x FireDAC
Vamos fazer um pequeno comparativo, bem simples, dbExpress x FireDAC.
Um comparativo que indique a melhor performance, com certeza deve usar
alguma ferramenta para isso. O que vou mostrar no um exemplo, é criar uma
consulta e percorrer a mesma, para indicar o tempo que esse processo levará.
Figura 12. SQLScripts armazenando comandos SQLs
O hardware usado, será o mesmo, então não teremos diferenças. Teremos
o tempo gasto para o processamento da consulta para essa pequena comparação. A tela é bem simples, onde temos um Grid e um botão, assim como
Labels para informações (Figura 14).
Ainda temos um caixa de dialogo que mostra o que esta sendo feito na
execução dos scripts (Figura 13), adicionando um ADGUIxScriptDialog e vinculando na propriedade ScriptDialog.
Figura 14. Tela para comparação entre dbExpress e FireDAC
Teremos uma tela para cada tecnologia (dbExpress e FireDAC), assim
criamos uma conexão para o mesmo banco e mesma consulta para cada
framework. Às informações na parte inferior da tela, indicam a quantidade
de registros, inicio e fim do processo e o tempo gasto.
A consulta será feita em uma tabela com 20 campos e mais ou menos 8
mil registros. Veja na Figura 15 o resultado.
Figura 13. ADGUIxScriptDialog mostrando a execução dos scripts
ADGUIxLoginDailog: componente que mostra uma tela de login para
08
junho
2013
Figura 15. Resultado da comparação
Se você olhou somente para o campo Tempo, ficou espantado e deu a vitória ao FireDAC. Engano seu, note o campo Qtde Registros. O FireDAC, diferente
do dbExpress, não retorna todos os dados da consulta, ele retornou apenas 50.
Para quem trabalhou com BDE, sabe no que me refiro, os dados são
retornados “aos poucos”, de acordo com a necessidade do usuário (ao usar
o scroll do grid, o restante dos dados é apresentado). Assim, aparentemente,
os dados são mostrados instantaneamente em tela.
Para retornar todos os dados, precisamos acessar a propriedade FetchOptions do ADQuery. Nessas opções, temos a propriedade RowsiteSize indicando
a quantidade retornada. Caso deseje, que sempre seja retornado todos os
dados mude Mode para fmAll.
16).
Como comentei, uma comparação precisa deve ser feita com ferramentas
indicadas para isso, quis apenas deixar uma dica para o leitor que sempre fará
a pergunta: qual o melhor? Minha resposta: aquele que você mais gosta ou
se adapta.
Conclusões
Vimos nesse artigo como usar o FireDAC a partir de agora em suas aplicações no Delphi. Compare com o BDE e dbExpress e tire suas próprias conclusões
sobre facilidades, performance etc.
Um grande abraço a todos e até a próxima!
Ao executar a aplicação, nossa comparação é rigorosamente igual (Figura
Sobre o autor
Luciano Pimenta
Figura 16. Resultado final da comparação
Nota: veja que o cálculo de tempo, não leva em conta milésimos
de segundos, assim, o cálculo simples do tempo inicial e final, apresenta
diferente.
Luciano Pimenta (NOVO DOMINIO: www.lucianopimenta.com) é desenvolvedor Delphi/C#
para aplicações Web com ASP.NET, Windows com Win32 e Windows Forms com .NET. Palestrante
da 4ª edição da Borland Conference (BorCon) e da 1ª Delphi Conference.
É MVP Embarcadero, grupo de profissionais que ajudam a divulgar o Delphi no mundo.
Atualmente é desenvolvedor da SoftDesign fábrica de softwares em Porto Alegre-RS.
Autor de mais de 90 artigos e de mais de 600 vídeos aulas publicadas em revistas e sites
especializados, além de treinamentos presenciais e multimídias. É consultor da FP2 Tecnologia
(www.fp2.com.br) onde ministra cursos de programação e banco de dados.
www.lucianopimenta.net
junho
2013
09
Desenvolva uma Aplicação
Desktop em C# e MySQL
Parte 2
N
o artigo anterior, iniciamos a preparação da nossa aplicação
abordando ferramentas voltadas à criação do nosso banco
de dados (XAMPP e Heidi SQL) e também a criação do MER
(Modelo Entidade Relacionamento) com sua respectiva
estrutura de tabelas. Também foram mencionados alguns
aspectos da nossa aplicação, que nesse artigo serão detalhados. Esse artigo
será destinado aos seguintes tópicos:
1.
2.
Logo abaixo da opção “Select Platform” você encontrará o botão para
download, como mostra a imagem 02.
MySQL Connector
Visual Studio 2010
Para começar, vamos detalhar os tópicos desse artigo na ordem em que
foram mencionados.
1. MySQL Connector Imagem 02: Botão de download do MySQL Connector.
Ao clicar no botão “Download”, você será redirecionado para uma página
de Login como mostra a imagem 03.
O MySQL Connector é um driver ADO.NET totalmente gerenciado para
MySQL.
Para baixa-lo, acesse o link: http://dev.mysql.com/downloads/connector/
net/ (na imagem 01 é apresentado a seção de download do MySQL Connector).
Imagem 03: Continuação do Download, Tela de Login ou Registro de Novo Usuário.
Imagem 01: Tela de download do MySQL Connector.
10
junho
2013
Caso você não tenha conta cadastrada no site da Oracle, clique em “Sign
Up”, preencha o formulário apresentado na imagem 04, confirme o cadastro
no e-mail retornado pela Oracle e se necessário, acesse novamente o link de
download do MySQL Connector.
Após fazer download do MySQL Connector, execute o instalador. A instalação em si não exige nenhuma configuração especial. Apenas na segunda tela
você deverá escolher a opção “Complete” como mostra a imagem 07. Após
isso, continue executando o famoso “NNF” (Next, Next, Finish).
Imagem 04: Cadastro de novo Usuário no site da Oracle.
Observação: O MySQL foi comprado pela Oracle, por isso, não
estranhe o fato de você iniciar o acesso no site do MySQL e em seguida
ser direcionado para o site da Oracle. Na verdade, essa etapa de criação
da conta é muito importante para quem ainda não tem acesso, pois, a
grande vantagem disso, está no fato de você poder ter acesso a recursos
de drivers do Oracle, Java, etc.
Caso você já possua cadastro no site da Oracle ou tenha finalizado o cadastro baseado nas instruções desse artigo, clique no link “Login” (imagem 03)
para dar continuidade ao download, provavelmente você seja redirecionado
para a tela apresentada na imagem 05.
Imagem 07: Opção de instalação (escolher “Complete”).
Com o MySQL Connector instalado, passaremos para o protótipo e no
momento oportuno voltaremos a falar sobre como utilizar o MySQL Connector
na nossa aplicação.
2.Visual Studio 2010
Abra o Visual Studio 2010 e vá até a opção File -> New -> Project. Na tela
“New Project” certifique-se deque alguns requisitos estarão sendo atendidos:
1. Em Recent “Templates”, a linguagem utilizada é C# -> Windows
como mostra a imagem 08.
Imagem 05: Tela de Login do site da Oracle.
Após fazer o login, você será direcionado para outra tela onde finalmente
você poderá fazer o download do MySQL Connector como mostra a imagem 06.
Imagem 08: Visual C# -> Windows
Imagem 06: Tela de download do MySQL Connector.
junho
2013
11
2. Que a opção escolhida é “Windows Forms Application” e a versão
do .NET Framework é 4.0 como mostra a imagem 09.
Após isso, o MySQL Connector será adicionado e poderá ser visualizado
na pasta “References” do “Solution Explorer” como mostra a imagem 13.
Imagem 09: Windows Forms Application e .NET Framework 4.0
3. Que o nome e a pasta do projeto foram definidos como mostra a
imagem 10.
Imagem 10: Definição de nome e pasta do projeto
Agora, com o Projeto iniciado no Visual Studio, podemos adicionar a
referência do MySQL Connector ao nosso projeto como mostra a imagem 11.
Imagem 13: Confirmação do MySQL Connector no Projeto.
Agora que temos o ambiente preparado iniciaremos a parte prática.
Imagem 11: Adicionando a referência do MySQL Connector ao projeto.
Na tela “Add Reference”, selecione a aba “.NET” e em seguida procure e
selecione os componentes MySQL.Data, MySQL.Data.Entity e clique em “OK”
como mostra a imagem 12.
Tela de Login
Começaremos essa etapa retirando o arquivo Form1.cs do Projeto.
Para isso, vá até a Solution Explorer, clique com o botão direito do mouse
no arquivo Form1.cs escolha a opção “Delete” como mostra a imagem 14.
Lembrando que será solicitada a confirmação de exclusão, mas basta clicar
em “OK” e o arquivo será deletado permanentemente.
Imagem 12: Adicionando (MySQL.Data e MySQL.Data.Entity) ao projeto.
Imagem 14: Exclusão do arquivo Form1.cs
12
junho
2013
Observação: No primeiro momento, pode parecer confuso a
exclusão do arquivo e também não parece fazer muito sentido. Mas
lembre-se de que algumas pessoas podem estar utilizando esse artigo
como primeiro contato com .NET, pensando nisso, estarei facilitando
alguns pontos já que o intuito do artigo é que todos possam utilizá-lo,
tantos os inexperientes quanto os mais experientes.
Propriedade
Valor
(Name)
frmLogin
Text
Acesso ao Sistema
Start Position
CenterScreen
FormBorderStyle
FixedSingle
MaximizeBox
False
Continuando...
Ainda na Solution Explorer, clique com o botão direito do mouse no projeto,
vá até a opção “Add -> New item” como mostra a imagem 15.
Após alterar as propriedades do Form vamos testar nossa aplicação.Repare
que nesse caso, o sistema enviará uma mensagem de erro no momento da
tentativa de execução (tecla F5) como mostra a imagem 17 e 18.
Imagem 17: Mensagem de erro no momento da compilação (tecla F5).
Nesse caso, basta clicar no botão “No” e observar a aba “Error List” como
mostra a imagem 18.
Imagem 15: “Add -> New Item”.
Imagem 18: Mensagem detalhada do erro ocorrido no momento da compilação.
Na tela “Add New Item”, selecione a opção “Windows Form” e no campo
“Name:” digite “Login.cs” como mostra a imagem 16.
Repare que a mensagem retornada refere-se ao “Form1” que foi excluído
antes de colocarmos o Form de Login no projeto. Para corrigir esse problema,
basta clicar duas vezes na mensagem da “Error List” para que o Visual Studio
abra o código do local onde o erro ocorreu conforme imagem 19.
Imagem 19: Aplicação referenciando objeto que não existe mais no Projeto.
Imagem 16: Form de Login “Login.cs”
Para corrigir esse problema, basta trocar o nome do Form de “Form1”
para “frmLogin” como mostra a imagem 20.
No Form de Login altere as seguintes propriedades:
junho
2013
13
Tela Principal
Da mesma forma que fizemos com Form de Login, adicione um novo Form
ao Projeto com nome de Principal.cs.
No Form Principal altere as seguintes propriedades:
Propriedade
Imagem 20: Acerto na aplicação.
Feito isso, salve o projeto e pressione a tecla “F5” para acessarmos nosso
protótipo. Como resultado, veremos nosso formulário de Login vazio aparecendo no meio da tela conforme imagem 21.
Valor
(Name)
frmPrincipal
Text
Agenda de Contatos
Start Position
CenterScreen
isMDIContainer
True
Insira o controle MenuStrip e configure a propriedade (Name) conforme
tabela a seguir.
MenuStrip
Propriedade
Valor
(Name)
mStrpPrincipal
Após adicionar o menu (Menu Strip) ao Form Principal (que servirá como
container dos demais Forms), adicione os itens de menu deixando conforme
imagem 22.
Imagem 21: Protótipo do Login.
Agora que nos certificamos de que não há problemas no protótipo e que
nossa tela possui as propriedades configuradas anteriormente, continuaremos
o desenvolvimento da tela de Login.
Imagem 22: Itens do Menu.
Observação: Insira os controles correspondentes e configure suas
propriedades conforme achar melhor. Ao término da configuração das
propriedades, a tela deverá parecer com a da imagem 22.
Tela Tipo de Contato
Da mesma forma que fizemos com Form Principal, adicione um novo Form
ao Projeto com nome de TipoContato.cs.
Ao final das configurações, a tela de tipo de Contato deverá estar semelhante à imagem 23.
Imagem 23: Tela de “Tipo de Contato”.
Tela de Contato
Imagem 22: Tela de Acesso.
14
junho
2013
Da mesma forma que fizemos com Form TipoContato, adicione um novo
Form ao Projeto com nome de Contato.cs. A tela de tipo de Contato deverá
estar semelhante à imagem 24.
Conclusão
Na segunda parte, ainda foi necessário focar em alguns aspectos estruturais do protótipo, porém, no próximo artigo será possível ver questões práticas
de código, implementação de funcionalidades de acesso e manipulação de
dados utilizando Entity Framework.
Referências
Imagem 24: Tela de “Tipo de Contato”
http://info.abril.com.br/noticias/ti/oracle-ja-estava-de-olho-no-mysql-20042009-18.shl
Tela de Usuário
Da mesma forma que fizemos com Form TipoContato, adicione um novo
Form ao Projeto com nome de Contato.cs.Ao final, a tela de tipo de Contato
deverá estar semelhante à imagem 25.
Sobre o autor
João Marcos Sakalauska
31 anos, é Analista de Sistemas e atua a mais de 10 anos na área de
TI. Atualmente é Líder Técnico e Analista de Sistemas na IN3 Software
atuando em projetos que utilizam as tecnologias .NET e Sql Server.
[email protected]
Imagem 25: Tela de “Contato”.
junho
2013
15
Android
Gerenciadores de Base de Dados SQLite
P
ara quem não sabe, o sistema Android tem como banco de
dados nativo o SQLite. Todo mundo conhece os denominados
sistemas gerenciadores de Banco de Dados (SGBD), que nada
mais é do que um conjunto de programas responsáveis pelo
gerenciamento de uma base de dados. O foco principal destes
softwares é gerenciar o acesso, manipulação e organização dos dados disponibilizando uma interface amigável e de fácil manuseio, permitindo realizar
a criação e manutenção das bases de dados. Temos algumas características
importantes, sendo:
É importante ressaltar que a instalação destes aplicativos é simples e
intuitiva, por isso não abordaremos detalhes.
•
Linguagem de definição de dados (“Data Definition Language”
- DDL): linguagem responsável por especificar conteúdos, estruturação e
elemento de dados;
•
Linguagem de Manipulação de dados (“Data Manipulation Language” - DML): utilizadas para recuperação, inclusão, remoção e modificação
de informações em banco de dados. Temos basicamente dois tipos: As DMLs
Procedurais, que exigem que o usuário especifique quais dados são necessários
e como obtê-los. Já as Não-Procedurais exigem que o usuário especifique quais
dados são necessários sem especificar como obtê-los.
•
Dicionário de dados: definições de elementos de dados e características.
É considerado um poderoso SGBD, combinando uma interface fácil de
usar e com inúmeros recursos. Podemos executar diversas operações como
criar tabelas, visões, gatilhos e índices. A tela inicial é muito simples e intuitiva,
possuindo um botão para localizar o Banco SQLite e uma lista dos bancos registrados na ferramenta. O SQLite Manager possui um Banco padrão chamado
“defaultdb.db”, o qual poderá ser visto na Imagem 02.
A minha intenção neste artigo é de apresentar alguns aplicativos SGBD
(gratuitos) existentes no mercado para a plataforma Android. Estes aplicativos
são encontrados na própria loja do Google. Com o próprio dispositivo (celular
ou tablet) entre no “Google Play” e pesquise pelo nome “sqlite”. Encontraremos
diversos tipos de aplicativos, Ver Imagem 01.
Dividiremos este artigo em três tópicos, sendo: SQLite Manager, aSQLiteManager e DB Browser.
1-) SQLite Manager
Imagem 02: Tela inicial do SQLite Manager.
Ao clicar no banco desejado, teremos diversas tabelas e dois botões, sendo
“SQL” e “Info”. Para fins de aprendizado focaremos apenas na tabela “Product”,
possuindo os campos: “Id”, “name”, “price”, “description”. Ver Imagem 03.
Imagem 01: Google Play.
junho
16
2013
Imagem 03: Tabelas.
Clicando no botão “SQL” teremos informações como: Caminho da base
de dados e comandos pré-definidos como, por exemplo: instruções de SELECT,
INSERT, UPDATE, DELETE, CREATE, entre outros. Conseguimos gerenciar praticamente tudo. Clicando no botão “Run” obteremos o “result set” do comando
realizado. Já o botão “Hide SQL”, como o próprio nome diz, irá esconder as
sugestões de instruções SQL e deixar a mostra apenas os resultados. Em ”History”, temos um histórico. Ver Imagem 04.
Run SQL: Tela responsável por executar instruções SQL de Select, Delete,
Update e Create.
2-) aSQLiteManager
É também um gerenciador de banco de dados SQLite de código aberto,
sendo que a versão 3.6 que estamos utilizando possui algumas características,
como:
•
Permitir mostrar arquivos por nome, tamanho, data ou ícone e
classificá-los por nome, extensão, tamanho, data;
•
Filtragem de arquivos;
•
Ter uma lista de favoritos;
•
Exportação no formato “Csv”;
•
Importação e Exportação das tabelas com triggers.
Este aplicativo é bem intuitivo, no primeiro momento possuímos quatro
botões, sendo:
Imagem 04: Executando comandos SQL.
Podemos também efetuar alterações diretamente nas tabelas, para isto
clique sobre a “Product” e na região superior direita, no caso do android 4.0,
temos três pontinhos, que são as opções habilitadas para esta tela. Temos
um Menu com os itens: “Insert Row”, “Reload”, “Page Size” e “Run SQL”. Ver
Figura 05.
Abrir Banco de Dados: Localizar e abrir um banco de dados SQLite já
existente;
Novo Banco de Dados: Criar um banco de dados desde o início;
Abertos recentemente: Lista de favoritos contendo todos os bancos de
dados abertos recentemente;
Sobre: Informações sobre o desenvolvedor desta ferramenta.
Ver Imagem 07.
Figura 05: Tabela Product.
Insert Row: Responsável por inserir registros na tabela selecionada. Para
fins didáticos inserimos alguns dados e em seguida clicaremos no botão “ok”
para confirmar. Ver Imagem 06.
Figura 07: Tela Inicial do aSQLIteManager.
Ao contrário do “SQLiteManager” citado anteriormente, este aplicativo
não possui um Banco de dados padrão, sendo necessário criá-lo. Para isto
clique no botão “Novo banco de Dados” e na próxima tela escolha um caminho e um nome para o mesmo clicando no botão “Ok”. Teremos os seguintes
botões, sendo:
Tabelas: Gerenciar as tabelas;
Views: Gerenciar as visões;
Indices: Gerenciar os índices;
Query: Executar comandos SQL.
Figura 06: Inserindo Registros.
Reload: Recarregar/Atualizar os dados na tela.
Page Size: Quantidade de registros que serão mostradas da tela.
Clicando na região superior direita temos também outros itens de menus,
como:
Exportar Banco de Dados: Exportar o banco para uso posterior.
Restaurar Banco de Dados: Restaurar banco já existente.
junho
2013
17
Abrir arquivo SQL: Abrir arquivo com instruções SQL pré-compiladas.
Informações da Base: Informações gerais como versão, codificadores,
tamanho da página, quantidade de paginação, etc.
Nova Tabela: local onde iremos criar uma nova tabela se necessário.
Ver Imagem 08 para maiores detalhes.
Exportar Tabela: Exportar a tabela para uma futura consulta.
Exportar para arquivos do tipo CSV: Exportar para arquivos do tipo CSV
(arquivos que podem ser lidos no Excel, por exemplo).
Importar arquivos do tipo CSV: Carregar arquivos do tipo CSV, permitindo
uma melhor visualização.
Definição da tabela: Contém informações (Instruções de CREATE) da
tabela em questão.
Ver Imagem 10.
Figura 08: Gerenciamento das Tabelas, Visões, Índices e Instruções SQL.
Vamos criar uma tabela de “Produtos” contendo o campo “Id” do tipo
inteiro, único, auto-incremento e chave primária e a “descrição” do tipo texto.
Clique em “Nova Tabela” escolhendo o nome da tabela e em seguida adicione
os campos citados anteriormente. O interessante desta ferramenta é que
temos uma interface muito amigável nos permitindo realizar tarefas desde
inserir valores padrões para os campos até informar chaves estrangeiras e
referenciá-las de acordo com sua utilização. Ver Imagem 09.
Figura 10: Tabela Produtos.
3-) DB Browser
Este aplicativo é exclusivamente para acessar as bases de dados SQLite,
permitindo inserir, editar, apagar, atualizar os registros ali contidos. Permite
a visualização de toda a estrutura da base de dados, como por exemplo:
Visões, Índices, tabelas ou Gatilhos. Um recurso que achei interessante é a
possibilidade de registrar diversas bases de dados. Outro recurso que também
facilita a vida do desenvolvedor é a criação de um histórico de instruções SQL
já executada. Em seguida irei descrever algumas de suas funcionalidades.
Veremos na Imagem 11 os recursos iniciais.
Figura 09: Criando os campos.
Voltando na tela de gerenciamento (Figura 08), note que a tabela “Produtos” foi adicionada na seção “Tabelas” e a chave primária “Id” na seção
“Índices”. Ao clicar sobre a tabela “Produtos” temos um controle total sobre
a mesma, contando com os botões:
Figura 11: DB Browser, Recursos Iniciais.
Campos: Descrição completa dos campos incluindo ordem, nome, tipo,
etc...
Novo: Inclusão de novos dados na tabela.
Dados: Listagem completa dos dados que estão contidos da tabela.
Na região superior direita, outros recursos como:
Primeiro: Irá navegar até o primeiro registro da tabela.
Último: Irá navegar até o último registro da tabela.
Filtro: Filtrar os dados de acordo com o que desejar.
18
junho
2013
No primeiro impacto podemos conferir os principais recursos deste aplicativo. Na região central temos um histórico de tarefas realizadas e na região
esquerda temos quatro botões, sendo:
Query SQL
Especificamente para executar instruções SQL. Ver Imagem 12.
Search DB
Permite localizar os arquivos de banco de dados em qualquer pasta, para
posteriormente utilizá-los. Ver imagem 15.
Figura 12: Query SQL – Executando instruções SQL.
Na região superior temos alguns botões:
Hide SQL: “Esconder” a instrução SQL já executada.
Clear SQL: Limpar a instrução SQL para poder criar outra em seguida.
Clear Grid: Limpar os dados que estão na Grid.
Execute: Executar a Instrução SQL.
Explore DB:
Aqui é onde iremos explorar todos os recursos da base de dados, como
tabelas, visões, índices ou gatilhos. Com a facilidade do “Touch Screen” podemos visualizar tanto as propriedades como os dados. Imagem 13.
Figura 15: Search DB.
Conclusões
Procurei neste artigo abordar um assunto ainda muito “cru” e de pouquíssimas documentações, o uso de gerenciadores de banco de dados SQLite
diretamente de um dispositivo (celular ou tablet) usando o sistema Operacional
Android. Ressalto ainda que foram realizados muitos testes em outros aplicativos gratuitos e os três que apresentaram melhores resultados no âmbito
de gerenciamento de banco de dados foram estes. Logicamente que poderão
existir outros tão bons e fáceis de utilizar, mas no momento desconheço.
Fiquem a vontade para nos mandar e-mails com sugestões de artigos ou
dicas para que seja publicado na revista, faremos o possível e o impossível
para ampará-los.
Figura 13: Explore DB – Explorando a Base de Dados.
Um forte abraço e até o mês que vem!
Connections
Como o próprio nome já diz, é aqui que temos todas as conexões realizadas, todas as bases de dados registradas. Temos a possibilidade de ativar ou
desativar uma conexão facilmente. Ver Imagem 14.
Sobre o autor
Thiago Cavalheiro Montebugnoli
adora aprender novas tecnologias. Formado pela Faculdade de Tecnologia de Botucatu
– SP (FATEC), já desenvolveu softwares utilizando a plataforma .NET, Delphi junto com Banco
de Dados SQL Server e Firebird. Atualmente trabalha no Centro de Processamento de Dados da
Prefeitura Municipal de Itaí-SP é colunista mensal da Revista The Club Megazine e é consultor
Técnico do The Club. Possui as seguintes certificações: MCP - Microsoft Certified Professional,
MCTS - Microsoft Certified Technology Specialist, MCAD - Microsoft Certified Application Developer
e MCSD - Microsoft Certified Solution Developer.
[email protected]
Figura 14: Conexões.
junho
2013
19
TValueListEditor
Criando e Manipulando dados
N
este artigo vamos falar sobre a criação e manipulação de
arquivos.ini através do Delphi 7.
Os aquivos.ini em geral são utilizados para armazenar
informações de configuração. Neste exemplo será feito para
auxiliar na conexão com o banco de dados.
Para este exemplo vamos utilizar o componente TValueListEditor, que
permite aos usuários editarem listas de cadeias. Este editor por padrão recebe
a ‘Key = Value’, ou seja, os nomes aparecem em uma coluna “Key”, e os valores
em uma coluna intitulada “Value”, porém você pode personalizar esses rótulos
além de controlar através das propriedades do componente se os usuários
podem selecionar, adicionar ou editar os dados.
Para o desenvolvimento desta aplicação vamos precisar além do ValueListEditor de alguns componentes conforme listagem abaixo:
- 7 Buttons;
- 1 Edit podemos nomeá-lo de edtpesquisa;
- 1 RadioGroup para definirmos o VendorLib da conexão.
Após adicionar cada componente o formulário deve ficar parecido com
a imagem 1:
Adicione também os componentes conforme Imagem 2:
- Timer para controlar a inatividade dos botões;
- IdIPWatch para capturar o IP da máquina;
- OpenDialog para localizarmos o banco de dados;
- SQLConnection neste caso será apenas utilizado para testarmos a
conexão.
Imagem 2 - Componentes
Vamos começar definindo o evento OnTimer do componente Timer,
ele será responsável por definir a ativação e desativação dos botões. Nomeie
os botões conforme imagem 3:
Imagem 3 - Botões
Imagem 1 - Formulário principal
20
junho
2013
- Caption:= Criar Arquivo / Name:= btnCriar;
- Caption:= Carregar / Name:= btnCarregar;
- Caption:= Salvar / Name:= btnSalvar;
- Caption:= Database... / Name:= btnLocalizar;
- Caption:= Nova Conexão / Name:= btnNovo;
- Caption:= Excluir Linha / Name:= btnExcluir;
- Caption:= Limpar / Name:= btnLimpar;
- Caption:= Conectar / Name:= btnConectar;
- Caption:= Desconectar / Name:= btnDesconectar;
- RadioGroup -> Caption:= VendorLib / Name:= rgLib
No evento Ontimer adicione os comandos conforme listagem 1:
Listagem 1. OnTimer
Procedure TForm1.
Timer1Timer(Sender: TObject);
begin
btnSalvar.Enabled:=
(ValueListEditor.Strings.Count
> 0) and (I > 1);
btnNovo.Enabled:=
ValueListEditor.Strings.Count >
0;
btnCarregar.Enabled:=
ValueListEditor.Strings.Count =
0;
btnLocalizar.Enabled:=
ValueListEditor.Strings.Count >
0;
btnExcluir.Enabled:=
ValueListEditor.Strings.Count >
0;
rgLib.Enabled:=
ValueListEditor.Strings.Count >
0 ;
btnDesconectar.Enabled:=
Conexao.Connected = True;
end;
Para que possamos prosseguir vamos criar as variáveis globais do
nosso projeto conforme Imagem 4:
Imagem 4 - Variáveis
Para o uso de alguns componentes será necessário adicionarmos
algumas Uses, veja se em seu projeto está conforme a imagem 5:
Imagem 5 - Uses
Em seguida vamos adicionar alguns comandos no próprio formulário, no evento OnCreate vamos passar a raiz do nosso projeto para a variável
InitialDir conforme listagem 2.
Listagem 2. OnCreate
Procedure TForm1.
FormCreate(Sender: TObject);
begin
InitialDir:=
ExtractFilePath(ParamStr(0));
end;
Já no evento OnShow faremos uma busca na raiz do nosso projeto
para verificar se já existe o arquivo Connect.ini, caso exista o botão ‘Criar
Arquivo’ ficará desabilitado senão ficará habilitado. Código ficará conforme
listagem 3.
Listagem 3. OnShow
Procedure TForm1.
FormShow(Sender: TObject);
begin
FileName:=
ExtractFilePath(Application.
ExeName)+’Connect.ini’;
InitialDir :=
ExtractFilePath(FileName);
btnLimpar.Enabled:= False;
btnConectar.Enabled:= False;
//Verifica se existe o arquivo
Connect para ativar o botão de
criação
if FileExists(FileName)
then
begin
btnCriar.Enabled:=
false;
end
else
btnCriar.Enabled:= True;
end;
Próximo passo será configurarmos nosso OpenDialog, apenas
vamos definir o tipo de arquivo que ele irá buscar que neste exemplo se trata
de arquivos de Banco de dados, então na propriedade Filter defina a extensão
conforme desejar, no exemplo vamos utilizar o filtro: Arquivos.DAT|*.DAT.
Por fim o último componente a ser configurado será o SQLConnection, vamos alterar apenas duas propriedades conforme imagem 6:
Name:= ‘Conexao’;
DriverName:= Aqui neste exemplo vamos utilizar o ‘Interbase’.
junho
2013
21
begin
ValueListEditor.
InsertRow(‘BlobSize’,’1’,True);
ValueListEditor.InsertRow(‘Co
mmitRetain’,’False’,True);
ValueListEditor.
InsertRow(‘Database’,’’,True);
ValueListEditor.InsertRow(‘Er
rorResourceFile’,’’,True);
ValueListEditor.InsertRow(‘Lo
caleCode’,’0000’,True);
ValueListEditor.InsertRow(‘Pa
ssword’,’masterkey’,True);
ValueListEditor.InsertRow(‘Ro
leName’,’RoleName’,True);
ValueListEditor.InsertRow(‘Se
rverCharSet’,’’,True);
ValueListEditor.InsertRow(‘SQ
LDialect’,’3’,True);
ValueListEditor.
InsertRow(‘Interbase TransIsola
tion’,’ReadCommited’,True);
ValueListEditor.
InsertRow(‘User_
Name’,’sysdba’,True);
ValueListEditor.InsertRow(‘Wa
itOnLocks’,’True’,True);
end;
Imagem 6 - Propriedades da Conexão.
Antes de iniciarmos a configuração de cada botão vamos definir
2 ações importantes no nosso projeto. A primeira é simples, marque como
“True” a propriedade ReadOnly do edtpesquisa assim não será possível editar
valores neste campo, a segunda e mais importante para o decorrer do projeto
fica nos eventos do ValueListEditor, vá ate o evento OnSelectCell e defina o
código conforme listagem 4:
Listagem 4. OnSelectCell
Procedure TForm1.ValueListEdito
rSelectCell(Sender: TObject;
ACol, ARow: Integer; var
CanSelect: Boolean);
begin
// Variável I recebe a linha
selecionada no ValueList
I:= ARow;
end;
A listagem 4 é uma parte essencial, pois apenas com o valor adicionado na variável ‘ I ‘ podemos aplicar as configurações que serão definidas
no decorrer do projeto.
Agora já podemos colocar a mão na massa, vamos começar criando
uma função chamada ‘NovoIni’ que será responsável por definir os valores do
“Connect”, chame a função conforme imagem 7:
Como podemos ver a função cria cada linha que ficará dentro do
“TvalueListEditor”, neste exemplo alguns valores de conexão são tratados como
padrão por isso já estão definidos desde a criação, porém podem ser editados
em tempo de execução.
Com as variáveis e funções criadas podemos começar a definir as
ações dos botões, dentro do evento OnClick do botão ‘Criar Arquivo’ defina o
código conforme listagem 6:
Listagem 6. Botão Criar Arquivo
Imagem 7 - Função NovoIni.
Dentro da função vamos definir o código conforme listagem 5:
Listagem 5. Função Novolni
Function TForm1.NovoIni:
String;
22
junho
2013
Procedure TForm1.
btnCriarClick(Sender: TObject);
begin
path:=
ExtractFilePath(Application.
ExeName);
// Cria o arquivo
Data:= TIniFile.Create(path +
‘Connect.ini’);
// Inseri os primeiros dados
(2 linhas)
Data.WriteString(‘NOME’,’Driv
erName’,’’);
begin
inherited;
FileName:=
ExtractFilePath(Application.
ExeName)+’Connect.ini’;
InitialDir :=
ExtractFilePath(FileName);
if FileExists(FileName)
then
begin
ValueListEditor.
Strings.LoadFromFile(FileName);
ValueListEditor.
SetFocus;
btnConectar.Enabled:=
True;
end;
begin
// Chama a função
NovoIni;
end;
// É necessário salvar após a
criação do arquivo
ValueListEditor.Strings.
SaveToFile(FileName);
btnCriar.Enabled:= False;
end;
end;
Como podemos ver o botão ‘Criar Arquivo’ segue até a raiz do
nosso projeto e gera um arquivo do tipo .ini, para que o arquivo seja criado
corretamente devemos passar pelo menos as 2 primeiras linhas com os dados
do arquivo, para uma economia de código após definirmos as linhas iniciais
chamamos a função ‘NovoIni’ que já contém os outros campos da nossa
conexão, por fim salvamos os dados para que não haja há possibilidade do
arquivo ficar em branco.
Com o arquivo salvo em nosso projeto o botão carregar fica ativo, então
já podemos definir sua ação, segue código conforme listagem 7:
Listagem 7. Botão Carregar
Procedure TForm1.
btnCarregarClick(Sender:
TObject);
begin
inherited;
FileName:=
ExtractFilePath(Application.
ExeName)+’Connect.ini’;
InitialDir :=
ExtractFilePath(FileName);
if FileExists(FileName) then
begin
btnCriar.Enabled:= false;
ValueListEditor.Strings.
LoadFromFile(FileName);
ValueListEditor.SetFocus;
btnConectar.Enabled:= True;
btnLimpar.Enabled:= True;
end
else
ShowMessage(‘Arquivo não
encontrado!’);
end;
Depois que o arquivo é carregado os dados são inseridos no “TvalueListEditor” e assim já podem ser manipulados. Para salvar as alterações
realizadas basta adicionar no evento Onclick do botão salvar conforme listagem
8:
Listagem 8. Botão Salvar
Procedure TForm1.
btnSalvarClick(Sender:
TObject);
begin
inherited;
if FileExists(FileName) then
begin
ValueListEditor.Strings.
SaveToFile(FileName);
ShowMessage(‘Gravação
realizada com sucesso’);
edtPesquisa.Text:= ‘’;
end
else
ShowMessage(‘Nenhum arquivo
para salvar’);
end;
Como estamos trabalhando com um configurador de conexão será
necessário indicarmos o local onde está nosso banco de dados, portanto vamos
facilitar esta ação, no Onclick do botão ‘Database...’ vamos chamar o ‘OpenDialog’ para realizarmos uma busca local, assim que o arquivo for definido o IP
local será setado no campo de texto e também no ValueListEditor juntamente
com o local do arquivo conforme listagem 9:
Listagem 9. Botão Database
Procedure TForm1.
btnLocalizarClick(Sender:
TObject);
begin
edtPesquisa.Text:= ‘’;
// ‘I’ Indica a linha
junho
2013
23
selecionada e captura o valor
da Key e passa para a variável
NomeChave para verificação
NomeChave:= ValueListEditor.
Keys[I];
// Se a linha for a correta o
processo Avança
If (NomeChave <> ‘Database’)
then
begin
ShowMessage(‘Selecione a
Linha com o Database que deseja
Alterar!’);
Abort;
end;
if OpenDialog1.Execute then
begin
// ‘IP’ Indica o IP local e
adiciona no campo EdtPesquisa
+ o nome do arquivo que
encontramos
edtPesquisa.Text:=
IP.LocalIP + ‘:’ + OpenDialog1.
FileName;
end;
if edtPesquisa.Text <> ‘’
then
begin
ValueListEditor.SetFocus;
// Inseri a linha com os
dados no local selecionado em I
ValueListEditor.Insert
Row(‘Database’,edtPesquisa.
Text,False);
// Após o processo de
inserção é necessário tirar a
linha que ficou sobrando
ValueListEditor.Strings.
Delete(I);
end
else
ShowMessage(‘Nenhum Arquivo
Selecionado!’);
end;
Para que toda esta ação seja executada corretamente é necessário
que o campo ‘Key’ do ValueListEditor seja igual a ‘Database’, ou seja, o campo
que o usuário clicar tem que ser o local onde será setado o valor do banco de
dados, uma mensagem será exibida se o usuário tentar inserir os dados em
outra linha. Seu “TvalueListEditor” deve ficar conforme imagem 8:
24
junho
2013
Imagem 8 – TValueListEditor.
Case haja a necessidade de criar uma nova conexão dentro do nosso
arquivo ‘Connect.ini’ foi criado o botão ‘Nova Conexão’ assim ele gera novas
linhas dentro do nosso “TvalueListEditor” para que seja preenchido com os
novos dados, segue código na listagem 10:
Listagem 10. Botão Nova Conexão
Procedure TForm1.
btnNovoClick(Sender: TObject);
begin
ValueListEditor.Strings.
Add(‘[NOME]’);
ValueListEditor.InsertRow(‘Dr
iverName’,’Interbase’,True);
// Chama a função
NovoIni;
end;
Em alguns casos pode haver a necessidade de excluir pelo menos
uma conexão, porém deve obedecer algumas regras, como por exemplo: de
manter pelo menos uma linha no “TvalueListEditor”, assim nosso projeto não
entra na regra de ativação do Ontimer. Essa ação de excluir só é realmente
efetivada se salvarmos as alterações. Abaixo listagem 11 com a ação de exclusão.
Listagem 11. Botão Excluir
Procedure TForm1.
btnExcluirClick(Sender:
TObject);
begin
// Se a linha for maior que
1 a exclusão é realizada com
sucesso
If I > 1 then
begin
ValueListEditor.
DeleteRow(I);
end;
end;
Para facilitar a manipulação dos dados podemos criar o botão ‘Limpar’ assim se alguma ação realizada for considerada desnecessária podemos
simplesmente retirá-la do ValueListEditor sem ao menos aplicar no nosso
arquivo Connect.ini. Segue código na listagem 12:
Listagem 12. Botão Limpar
Procedure TForm1.
btnLimparClick(Sender:
TObject);
begin
inherited;
FileName := ‘’;
edtPesquisa.Text:= ‘’;
ValueListEditor.Strings.
Clear;
// Inativa alguns Botões
btnConectar.Enabled:= False;
btnLimpar.Enabled:= False;
begin
FileName:=
ExtractFilePath(Application.
ExeName)+’Connect.ini’;
InitialDir :=
ExtractFilePath(FileName);
// Verifica se existe o
arquivo Connect para ativar o
botão de criação
if FileExists(FileName)
then
begin
btnCriar.Enabled:=
false;
end
else
btnCriar.Enabled:=
True;
end;
end;
Antes de iniciarmos o teste de conexão devemos criar uma opção de
escolha das bibliotecas de banco de dados. Na imagem 9 é possível visualizar
nosso RadioGroup com as possíveis bibliotecas que utilizaremos.
Imagem 9 - VendorLib – rgLib.
Abaixo o código do evento Onclik do RadioGroup:
Listagem 13. RadioGroup
Procedure TForm1.
rgLibClick(Sender: TObject);
begin
case rgLib.ItemIndex of
0: Conexao.VendorLib :=
‘GDS32.dll’;
1: Conexao.VendorLib :=
‘FBClient.dll’;
end;
end;
Com os valores já indicados no nosso “TvalueListEditor” podemos
realizar o teste se o arquivo Connect que criamos está com as informações
corretas, com o componente SQLConnect adicionado no projeto podemos
passar os valores via código para cada campo. Segue abaixo código do botão
conectar:
Listagem 14. Botão Conectar
Procedure TForm1.
btnConectarClick(Sender:
TObject);
var
Banco, Usuario, Senha,
Drivername, Blobsize, Commit,
ErrorResource, LocaleCode,
RoleName, ServerChar, Dialect,
TransIsolation, WaitOnLocks :
String;
ValorCommit, ValorBlob,
ValorDriver, Valorbd, ValorUsu,
ValorSenha, ValorError,
ValorLocale, ValorRole,
ValorServer, ValorDialect,
ValorIsolation, ValorWaint:
String;
begin
//verifica a dll VendorLib
If Conexao.VendorLib = ‘’
then
begin
ShowMessage(‘Selecione um
VendorLib!’);
abort;
end;
//Verifica se a linha
selecionada é a que se encontra
o Database
Conecta:= ValueListEditor.
Keys[I];
If (Conecta <> ‘Database’)
then
begin
ShowMessage(‘Selecione
a linha com seu database para
testar a Conexão!’);
abort;
end
junho
2013
25
else
//Indica a posição de cada
Valor
ValorDriver:= ValueListEditor.
Strings.Strings[I-4];
ValorBlob:= ValueListEditor.
Strings.Strings[I-3];
ValorCommit:= ValueListEditor.
Strings.Strings[I-2];
Valorbd:= ValueListEditor.
Strings.Strings[I-1];
ValorError:= ValueListEditor.
Strings.Strings[I];
ValorLocale:= ValueListEditor.
Strings.Strings[I+1];
ValorSenha:= ValueListEditor.
Strings.Strings[I+2];
ValorRole:= ValueListEditor.
Strings.Strings[I+3];
ValorServer:= ValueListEditor.
Strings.Strings[I+4];
ValorDialect:=
ValueListEditor.Strings.
Strings[I+5];
ValorIsolation:=
ValueListEditor.Strings.
Strings[I+6];
ValorUsu:= ValueListEditor.
Strings.Strings[I+7];
ValorWaint:= ValueListEditor.
Strings.Strings[I+8];
//Pega apenas o ‘value’ e
remove a ‘Key’
Banco:= copy(Valorbd, Pos(‘=
’,Valorbd)+1,length(Valorbd)Pos(‘=’,Valorbd)+1);
Usuario:= copy(ValorUsu, Pos
(‘=’,ValorUsu)+1,length(ValorU
su)-Pos(‘=’,ValorUsu)+1);
Senha:= copy(ValorSenha, Pos(
‘=’,ValorSenha)+1,length(ValorS
enha)-Pos(‘=’,ValorSenha)+1);
Drivername:=
copy(ValorDriver, Pos(‘=’,Valor
Driver)+1,length(ValorDriver)Pos(‘=’,ValorDriver)+1);
Blobsize:= copy(ValorBlob, Po
s(‘=’,ValorBlob)+1,length(Valor
Blob)-Pos(‘=’,ValorBlob)+1);
Commit:= copy(ValorCommit,
Pos(‘=’,ValorCommit)+
1,length(ValorCommit)-
26
junho
2013
Pos(‘=’,ValorCommit)+1);
ErrorResource:=
copy(ValorError, Pos(‘=’,Valo
rError)+1,length(ValorError)Pos(‘=’,ValorError)+1);
LocaleCode:=
copy(ValorLocale, Pos(‘=’,Valor
Locale)+1,length(ValorLocale)Pos(‘=’,ValorLocale)+1);
RoleName:= copy(ValorRole, Po
s(‘=’,ValorRole)+1,length(Valor
Role)-Pos(‘=’,ValorRole)+1);
ServerChar:=
copy(ValorServer, Pos(‘=’,Valor
Server)+1,length(ValorServer)Pos(‘=’,ValorSenha)+1);
Dialect:= copy(ValorDialect,
Pos(‘=’,ValorDialect)+1
,length(ValorDialect)Pos(‘=’,ValorDialect)+1);
TransIsolation:=
copy(ValorIsolation, Pos
(‘=’,ValorIsolation)+1,
length(ValorIsolation)Pos(‘=’,ValorIsolation)+1);
WaitOnLocks:=
copy(ValorWaint, Pos(‘=’,Valo
rWaint)+1,length(ValorWaint)Pos(‘=’,ValorWaint)+1);
//Passa os valores para cada
campo
Conexao.Params.
Values[‘database’] := Banco;
Conexao.Params.Values[‘user_
name’] := Usuario;
Conexao.Params.
Values[‘password’] := Senha;
Conexao.Params.
Values[‘drivername’]:=
Drivername;
Conexao.Params.
Values[‘blobsize’]:= Blobsize;
Conexao.Params.
Values[‘commitretain’]:=
Commit;
Conexao.Params.
Values[‘errorresourcefile’]:=
ErrorResource;
Conexao.Params.
Values[‘localecode’]:=
LocaleCode;
Conexao.Params.
Values[‘rolename’]:= RoleName;
Conexao.Params.
Values[‘servercharset’]:=
ServerChar;
Conexao.Params.
Values[‘sqldialect’]:= Dialect;
Conexao.Params.
Values[‘interbase
transIsolation’]:=
TransIsolation;
Conexao.Params.
Values[‘waitonlocks’]:=
WaitOnLocks;
Try
Conexao.Open;
Except
ShowMessage(‘Falha
na Conexão, Verifique as
informações!’);
end;
if Conexao.Connected = True
then
begin
ShowMessage(‘Conectado!’);
btnConectar.Enabled:=
False;
btnLimpar.Enabled:=
False;
end;
end;
Nesta listagem 14 criamos uma variável para cada campo da nossa
conexão, isso só foi necessário para que possamos testar mais de uma conexão,
no exemplo acima utilizamos a função ‘Copy’ para selecionarmos apenas os
dados partindo do ‘ = ‘, ou seja, os valores que serão setados dentro do nosso
SQLConnection são os campos ‘Value’ do nosso ValueListEditor.
Se todos os dados estiverem corretos a conexão será concluída,
caso haja algum erro uma mensagem será exibida. Após concluirmos o teste
de conexão é interessante fecharmos a conexão de teste, portanto na listagem
15 está o código do botão desconectar:
Listagem 15. Botão Desconectar
Procedure TForm1.
btnDesconectarClick(Sender:
TObject);
begin
btnLimpar.Enabled:= True;
btnConectar.Enabled:= True;
Conexao.Connected:= False;
Conexao.Close;
ShowMessage(‘Desconectado!’);
end;
Agora que já criamos e manipulamos o arquivo Connect podemos
ver o resultado final na pasta raiz do nosso projeto, seu arquivo deve ficar
parecido com a imagem 10:
Imagem 10 - Connect.ini
Conclusão
Vimos como criar e manipular arquivos.ini de acordo com nossas especificações, utilizamos o componente TValueListEditor que segue um formato
muito similar as conexões do próprio Delphi, portanto cria uma facilidade na
visualização das informações que serão manipuladas no decorrer do projeto.
Neste caso utilizamos para configurar uma conexão com o banco de dados,
contudo este tipo de desenvolvimento pode ser utilizado em outros exemplos
de acordo com suas necessidades.
Bom é isso pessoal espero que tenham gostado dessa dica! Até a
próxima!
Sobre o autor
Jeferson Silva de Lima
Consultor The Club.
[email protected]
junho
2013
27
dicas the club
Delphi XE2 usando Gestures
Nesta dica irei apresentar como desenvolver aplicativos usando gestos do mouse para fazer a interação com os dados de tabelas.Usaremos o componente
ActionManager para poder trabalhar com gestos, na figura 01 e figura 02 estão as configurações que eu vou usar nesse exemplo.
Clique duas vezes sobre o componente ActionManager para abrir as configurações.
Figura01: Clicar na opção New Standard Action para escolher as ações.
Figura 02: Selecionar as ações desejadas.
28
junho
2013
Agora adicione o componente GestureManager, seu form deverá ficar idêntico ao da figura 03.
Figura 03: Os dois componentes no form.
Selecione o form, na propriedade Touch na barra ObjectInspector selecione o componente GestureManager. Ver figura 04.
Figura 04: Selecione o GestureMAnager.
junho
2013
29
Eu vou trabalhar com os controles Dataset (TDataSetFirst, TDataSetPrior, TDataSetNext e TDataSetLast) do componente ActionManager , esses controles
são as ações do mouse para navegar nos dados de uma tabela.
Para configurá-los basta clicar no form na propriedade Standard você vai escolher o movimento do mouse com a ação do Dataset como mostra a figura 05.
Figura 05: Configurando as ações com o gesto do mouse.
Agora vou explicar como fazer uma conexão com uma tabela de teste.
Adicione o componente table da aba DBE.
Na propriedade DataBasename escolha a opção ” DBDEMOS”.
Na opção TableName escolha “Biolife”,clique 2x encima do componente table e depois Addallfields.
Selecione todos os fields e arrastem para o form, todos os campos da tabela serão adicionados. Coloque true na opção active do componente table.
Conclusão
Todas as configurações estão prontas, agora você pode testar a navegação dos dados na tabela usando o movimento do mouse clicando e arrastando em
qualquer área do form. Você pode usar esses componentes de varias formas só depende da sua criatividade!
Espero que tenham gostado e até a próxima.
30
junho
2013
junho
2013
05
junho
2013
Download