Professional Documents
Culture Documents
2013
junho
2013
04
Editorial
05
FIREDAC
Autor: Luciano Pimenta
10
C#
16
Android
Gerenciadores de
Banco de Dados SQLite
20
TValueListEditor
Criando e Manipulando dados
ndice
28
2013
03
Editorial
Ol amigos!
Chegamos sexta edio 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 programao. Graas aos senhores,
ao longo destes ltimos anos, conseguimos produzir uma revista com um
contedo mais ecltico podendo atingir desenvolvedores .Net, Delphi e
Android. Neste ms nosso colunista Joo Marcos Sakalauska d continuidade ao artigo sobre aplicaes Desktop em C# junto com o banco de dados
MySQL,. Nesta segunda parte aborda o uso do driver de conexo MySQL
Connector junto com o Microsoft Visual Studio. J nosso consultor tcnico Jferson Silva de Lima nos preparou um artigo com um assunto abordado em nosso suporte tcnico, o uso do componente TValueListEditor,
servindo de base para todas as verses do Delphi. Neste artigo ele cria e
manipula arquivos do tipo .ini com recursos deste componente. Luciano
Pimenta nos apresenta em primeira mo a nova tecnologia de acesso a
dados, o FireDAC, estando disponvel para usurios do Delphi XE3 e XE4.
Esta tecnologia veio para substituir o DBExpress, ressaltando que o mesmo
ainda ser suportado, apenas no ser atualizado. Eu continuo trabalhando
com o sistema Android, sendo que nesta publicao trago informaes e
tutoriais explicando o uso de aplicativos para gerenciadores de Banco de
dados SQLite, um recurso para ser utilizado junto com o dispositivo mvel,
auxiliando na manipulao e organizao dos dados.
No deixem de ler nossa seo de Dicas, sempre com um contedo rpido
e prtico para ajud-los.
Um grande abrao e at o ms que vem!
Internet
http://www.theclub.com.br
Cadastro: cadastro@theclub.com.br
Suporte: suporte@theclub.com.br
Informaes: info@theclub.com.br
Skype Cadastro: theclub_cadastro
Skype Suporte: theclub_linha1
theclub_linha2
theclub_linha3
www.twitter.com/theclubbr
04
junho
2013
FireDAC
A
Embarcadero divulgou recente uma tima noticia, a aquisio do AnyDAC, framework de acesso a dados .NoDelphi,
ele passou a ser FireDAC e esta disponvel para usurios do
XE3 e XE4 das verses Enterprise, Ultimate ou Architect. Para
quem usa a verso Professional, pode adquirir um pacote
add-on client/server.
FireDAC possui uma engine otimizada para acesso a dados. Alm disso,
existem vrias funes para abstrair o servidor de banco de dados usado, assim,
sua aplicao pode facilmente ser multi-banco. O servidor de banco de dados
fica a cargo de sua escolha ou do seu cliente.
O dbExpress tinha tambm esse objetivo, criar aplicaes multi-bancos,
mas exemplos indicam que projetos que utilizam mais de um servidor de
banco, usando dbExpress, no tem toda essa facilidade. FireDAC ainda tem a
vantagem de acesso a banco de dados no iOS.
Access
DB2
Firebird
Instalao
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 no ser mais atualizado. Se suas aplicaes
com dbExpress (ou at mesmo BDE, que existem hoje em dia), funcionam
normalmente, no h motivos para a troca. Para novos projetos, comece
a utilizar o FireDAC.
MySQL
SQL Server
Oracle
InterBase
PostgreSQL
SQLite
Sybase SQL Anywhere
2013
05
vidores de banco de dados que queremos conectar com o FireDAC (Figura 2).
Alm disso, temos acesso ao Monitor, um trace onde podemos ver como
esto as conexes usadas pela aplicao (Figura 5), ficando fcil encontrar os
gargalos de performance.
Aps a instalao, abra o Delphi e veja que foi adicionado um novo menu
(Figura 3).
Na Tool Palette temos trs novas abas com os controles que poderemos
usar nas aplicaes com acesso a dados (Figura 6).
Figura 3. Menu no Delphi do FireDAC
06
2013
Esse caso igual, basta adicionar o ADGUIxWaitCursor ou no uses uADGUIxFormsWait. Depois, basta executar a aplicao para visualizar o primeiro
exemplo usando FireDAC (Figura 11).
2013
07
Outros componentes
Vamos conhecer outros componentes interessantes do FireDAC.
ADScript: componente que concentra na propriedade SQLScripts vrios
comandos SQLs para serem usados na aplicao (Figura 12), alm de podermos
usar arquivos de script, usando a propriedade SQLScriptFileName.
autenticao do banco de dados. Voc deve configurar o componente na propriedade LoginDialog do ADConnection, lembrando tambm que a propriedade
LoginPrompt deve estar configurada para true.
ADGUIxErrorDailog: componente que mostra uma tela com o erro que a
aplicao executou. Serve apenas para erros com banco de dados.
Backup: a possibilidade de realizar backup do banco esta disponvel 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 (indicao 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 opes 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.
Ainda temos um caixa de dialogo que mostra o que esta sendo feito na
execuo dos scripts (Figura 13), adicionando um ADGUIxScriptDialog e vinculando na propriedade ScriptDialog.
08
junho
2013
Se voc olhou somente para o campo Tempo, ficou espantado e deu a vitria ao FireDAC. Engano seu, note o campo Qtde Registros. O FireDAC, diferente
do dbExpress, no retorna todos os dados da consulta, ele retornou apenas 50.
Para quem trabalhou com BDE, sabe no que me refiro, os dados so
retornados aos poucos, de acordo com a necessidade do usurio (ao usar
o scroll do grid, o restante dos dados apresentado). Assim, aparentemente,
os dados so mostrados instantaneamente em tela.
Para retornar todos os dados, precisamos acessar a propriedade FetchOptions do ADQuery. Nessas opes, 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 comparao 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.
Concluses
Vimos nesse artigo como usar o FireDAC a partir de agora em suas aplicaes no Delphi. Compare com o BDE e dbExpress e tire suas prprias concluses
sobre facilidades, performance etc.
Um grande abrao a todos e at a prxima!
Sobre o autor
Luciano Pimenta
Figura 16. Resultado final da comparao
www.lucianopimenta.net
junho
2013
09
MySQL Connector
Visual Studio 2010
1. MySQL Connector
10
junho
2013
Aps fazer download do MySQL Connector, execute o instalador. A instalao em si no exige nenhuma configurao especial. Apenas na segunda tela
voc dever escolher a opo Complete como mostra a imagem 07. Aps
isso, continue executando o famoso NNF (Next, Next, Finish).
Aps fazer o login, voc ser direcionado para outra tela onde finalmente
voc poder fazer o download do MySQL Connector como mostra a imagem 06.
junho
2013
11
Tela de Login
Comearemos essa etapa retirando o arquivo Form1.cs do Projeto.
Para isso, v at a Solution Explorer, clique com o boto direito do mouse
no arquivo Form1.cs escolha a opo Delete como mostra a imagem 14.
Lembrando que ser solicitada a confirmao de excluso, mas basta clicar
em OK e o arquivo ser deletado permanentemente.
12
junho
2013
Propriedade
Valor
(Name)
frmLogin
Text
Acesso ao Sistema
Start Position
CenterScreen
FormBorderStyle
FixedSingle
MaximizeBox
False
Continuando...
Ainda na Solution Explorer, clique com o boto direito do mouse no projeto,
v at a opo Add -> New item como mostra a imagem 15.
Nesse caso, basta clicar no boto No e observar a aba Error List como
mostra a imagem 18.
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 aplicao.
Valor
(Name)
frmPrincipal
Text
Agenda de Contatos
Start Position
CenterScreen
isMDIContainer
True
MenuStrip
Propriedade
Valor
(Name)
mStrpPrincipal
Aps adicionar o menu (Menu Strip) ao Form Principal (que servir como
container dos demais Forms), adicione os itens de menu deixando conforme
imagem 22.
Tela de Contato
Imagem 22: Tela de Acesso.
14
junho
2013
Concluso
Na segunda parte, ainda foi necessrio focar em alguns aspectos estruturais do prottipo, porm, no prximo artigo ser possvel ver questes prticas
de cdigo, implementao de funcionalidades de acesso e manipulao de
dados utilizando Entity Framework.
Referncias
http://info.abril.com.br/noticias/ti/oracle-ja-estava-de-olho-no-mysql-20042009-18.shl
Tela de Usurio
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
Joo Marcos Sakalauska
31 anos, Analista de Sistemas e atua a mais de 10 anos na rea de
TI. Atualmente Lder Tcnico e Analista de Sistemas na IN3 Software
atuando em projetos que utilizam as tecnologias .NET e Sql Server.
marcos@theclub.com.br
Imagem 25: Tela de Contato.
junho
2013
15
Android
Gerenciadores de Base de Dados SQLite
Linguagem de definio de dados (Data Definition Language
- DDL): linguagem responsvel por especificar contedos, estruturao e
elemento de dados;
Linguagem de Manipulao de dados (Data Manipulation Language - DML): utilizadas para recuperao, incluso, remoo e modificao
de informaes em banco de dados. Temos basicamente dois tipos: As DMLs
Procedurais, que exigem que o usurio especifique quais dados so necessrios
e como obt-los. J as No-Procedurais exigem que o usurio especifique quais
dados so necessrios sem especificar como obt-los.
Dicionrio de dados: definies de elementos de dados e caractersticas.
Dividiremos este artigo em trs tpicos, sendo: SQLite Manager, aSQLiteManager e DB Browser.
16
2013
Run SQL: Tela responsvel por executar instrues SQL de Select, Delete,
Update e Create.
2-) aSQLiteManager
tambm um gerenciador de banco de dados SQLite de cdigo aberto,
sendo que a verso 3.6 que estamos utilizando possui algumas caractersticas,
como:
Permitir mostrar arquivos por nome, tamanho, data ou cone e
classific-los por nome, extenso, tamanho, data;
Filtragem de arquivos;
Ter uma lista de favoritos;
Exportao no formato Csv;
Importao e Exportao das tabelas com triggers.
Este aplicativo bem intuitivo, no primeiro momento possumos quatro
botes, sendo:
2013
17
3-) DB Browser
Este aplicativo exclusivamente para acessar as bases de dados SQLite,
permitindo inserir, editar, apagar, atualizar os registros ali contidos. Permite
a visualizao de toda a estrutura da base de dados, como por exemplo:
Vises, ndices, tabelas ou Gatilhos. Um recurso que achei interessante a
possibilidade de registrar diversas bases de dados. Outro recurso que tambm
facilita a vida do desenvolvedor a criao de um histrico de instrues SQL
j executada. Em seguida irei descrever algumas de suas funcionalidades.
Veremos na Imagem 11 os recursos iniciais.
Voltando na tela de gerenciamento (Figura 08), note que a tabela Produtos foi adicionada na seo Tabelas e a chave primria Id na seo
ndices. Ao clicar sobre a tabela Produtos temos um controle total sobre
a mesma, contando com os botes:
Figura 11: DB Browser, Recursos Iniciais.
18
junho
2013
No primeiro impacto podemos conferir os principais recursos deste aplicativo. Na regio central temos um histrico de tarefas realizadas e na regio
esquerda temos quatro botes, sendo:
Query SQL
Especificamente para executar instrues SQL. Ver Imagem 12.
Search DB
Permite localizar os arquivos de banco de dados em qualquer pasta, para
posteriormente utiliz-los. Ver imagem 15.
Explore DB:
Aqui onde iremos explorar todos os recursos da base de dados, como
tabelas, vises, ndices ou gatilhos. Com a facilidade do Touch Screen podemos visualizar tanto as propriedades como os dados. Imagem 13.
Concluses
Procurei neste artigo abordar um assunto ainda muito cru e de pouqussimas documentaes, 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 trs que apresentaram melhores resultados no mbito
de gerenciamento de banco de dados foram estes. Logicamente que podero
existir outros to bons e fceis de utilizar, mas no momento desconheo.
Fiquem a vontade para nos mandar e-mails com sugestes de artigos ou
dicas para que seja publicado na revista, faremos o possvel e o impossvel
para ampar-los.
Connections
Como o prprio nome j diz, aqui que temos todas as conexes realizadas, todas as bases de dados registradas. Temos a possibilidade de ativar ou
desativar uma conexo 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
Tcnico do The Club. Possui as seguintes certificaes: MCP - Microsoft Certified Professional,
MCTS - Microsoft Certified Technology Specialist, MCAD - Microsoft Certified Application Developer
e MCSD - Microsoft Certified Solution Developer.
thiago@theclub.com.br
Figura 14: Conexes.
junho
2013
19
TValueListEditor
Imagem 2 - Componentes
Vamos comear definindo o evento OnTimer do componente Timer,
ele ser responsvel por definir a ativao e desativao dos botes. Nomeie
os botes conforme imagem 3:
Imagem 3 - Botes
20
junho
2013
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 variveis globais do
nosso projeto conforme Imagem 4:
Imagem 4 - Variveis
Para o uso de alguns componentes ser necessrio adicionarmos
algumas Uses, veja se em seu projeto est conforme a imagem 5:
Imagem 5 - Uses
Em seguida vamos adicionar alguns comandos no prprio formulrio, no evento OnCreate vamos passar a raiz do nosso projeto para a varivel
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 boto Criar
Arquivo ficar desabilitado seno ficar habilitado. Cdigo 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 boto de
criao
if FileExists(FileName)
then
begin
btnCriar.Enabled:=
false;
end
else
btnCriar.Enabled:= True;
end;
Prximo 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, ento na propriedade Filter defina a extenso
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;
Antes de iniciarmos a configurao de cada boto vamos definir
2 aes importantes no nosso projeto. A primeira simples, marque como
True a propriedade ReadOnly do edtpesquisa assim no ser possvel 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
cdigo conforme listagem 4:
Listagem 4. OnSelectCell
Procedure TForm1.ValueListEdito
rSelectCell(Sender: TObject;
ACol, ARow: Integer; var
CanSelect: Boolean);
begin
// Varivel I recebe a linha
selecionada no ValueList
I:= ARow;
end;
A listagem 4 uma parte essencial, pois apenas com o valor adicionado na varivel I podemos aplicar as configuraes que sero definidas
no decorrer do projeto.
Agora j podemos colocar a mo na massa, vamos comear criando
uma funo chamada NovoIni que ser responsvel por definir os valores do
Connect, chame a funo conforme imagem 7:
Como podemos ver a funo cria cada linha que ficar dentro do
TvalueListEditor, neste exemplo alguns valores de conexo so tratados como
padro por isso j esto definidos desde a criao, porm podem ser editados
em tempo de execuo.
Com as variveis e funes criadas podemos comear a definir as
aes dos botes, dentro do evento OnClick do boto Criar Arquivo defina o
cdigo conforme listagem 6:
Listagem 6. Boto Criar Arquivo
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 funo
NovoIni;
end;
// necessrio salvar aps a
criao do arquivo
ValueListEditor.Strings.
SaveToFile(FileName);
btnCriar.Enabled:= False;
end;
end;
Como podemos ver o boto 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 cdigo aps definirmos as linhas iniciais
chamamos a funo NovoIni que j contm os outros campos da nossa
conexo, por fim salvamos os dados para que no haja h possibilidade do
arquivo ficar em branco.
Com o arquivo salvo em nosso projeto o boto carregar fica ativo, ento
j podemos definir sua ao, segue cdigo conforme listagem 7:
Listagem 7. Boto 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 no
encontrado!);
end;
Depois que o arquivo carregado os dados so inseridos no TvalueListEditor e assim j podem ser manipulados. Para salvar as alteraes
realizadas basta adicionar no evento Onclick do boto salvar conforme listagem
8:
Listagem 8. Boto Salvar
Procedure TForm1.
btnSalvarClick(Sender:
TObject);
begin
inherited;
if FileExists(FileName) then
begin
ValueListEditor.Strings.
SaveToFile(FileName);
ShowMessage(Gravao
realizada com sucesso);
edtPesquisa.Text:= ;
end
else
ShowMessage(Nenhum arquivo
para salvar);
end;
Como estamos trabalhando com um configurador de conexo ser
necessrio indicarmos o local onde est nosso banco de dados, portanto vamos
facilitar esta ao, no Onclick do boto 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 tambm no ValueListEditor juntamente
com o local do arquivo conforme listagem 9:
Listagem 9. Boto Database
Procedure TForm1.
btnLocalizarClick(Sender:
TObject);
begin
edtPesquisa.Text:= ;
// I Indica a linha
junho
2013
23
Para que toda esta ao seja executada corretamente necessrio
que o campo Key do ValueListEditor seja igual a Database, ou seja, o campo
que o usurio clicar tem que ser o local onde ser setado o valor do banco de
dados, uma mensagem ser exibida se o usurio 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 conexo dentro do nosso
arquivo Connect.ini foi criado o boto Nova Conexo assim ele gera novas
linhas dentro do nosso TvalueListEditor para que seja preenchido com os
novos dados, segue cdigo na listagem 10:
Listagem 10. Boto Nova Conexo
Procedure TForm1.
btnNovoClick(Sender: TObject);
begin
ValueListEditor.Strings.
Add([NOME]);
ValueListEditor.InsertRow(Dr
iverName,Interbase,True);
// Chama a funo
NovoIni;
end;
Em alguns casos pode haver a necessidade de excluir pelo menos
uma conexo, porm deve obedecer algumas regras, como por exemplo: de
manter pelo menos uma linha no TvalueListEditor, assim nosso projeto no
entra na regra de ativao do Ontimer. Essa ao de excluir s realmente
efetivada se salvarmos as alteraes. Abaixo listagem 11 com a ao de excluso.
Listagem 11. Boto Excluir
Procedure TForm1.
btnExcluirClick(Sender:
TObject);
begin
// Se a linha for maior que
1 a excluso realizada com
sucesso
If I > 1 then
begin
ValueListEditor.
DeleteRow(I);
end;
end;
Para facilitar a manipulao dos dados podemos criar o boto Limpar assim se alguma ao realizada for considerada desnecessria podemos
simplesmente retir-la do ValueListEditor sem ao menos aplicar no nosso
arquivo Connect.ini. Segue cdigo na listagem 12:
Listagem 12. Boto Limpar
Procedure TForm1.
btnLimparClick(Sender:
TObject);
begin
inherited;
FileName := ;
edtPesquisa.Text:= ;
ValueListEditor.Strings.
Clear;
// Inativa alguns Botes
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
boto de criao
if FileExists(FileName)
then
begin
btnCriar.Enabled:=
false;
end
else
btnCriar.Enabled:=
True;
end;
end;
Antes de iniciarmos o teste de conexo devemos criar uma opo de
escolha das bibliotecas de banco de dados. Na imagem 9 possvel visualizar
nosso RadioGroup com as possveis bibliotecas que utilizaremos.
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 informaes
corretas, com o componente SQLConnect adicionado no projeto podemos
passar os valores via cdigo para cada campo. Segue abaixo cdigo do boto
conectar:
Listagem 14. Boto 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 Conexo!);
abort;
end
junho
2013
25
else
//Indica a posio 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 Conexo, Verifique as
informaes!);
end;
if Conexao.Connected = True
then
begin
ShowMessage(Conectado!);
btnConectar.Enabled:=
False;
btnLimpar.Enabled:=
False;
end;
end;
Nesta listagem 14 criamos uma varivel para cada campo da nossa
conexo, isso s foi necessrio para que possamos testar mais de uma conexo,
no exemplo acima utilizamos a funo Copy para selecionarmos apenas os
dados partindo do = , ou seja, os valores que sero setados dentro do nosso
SQLConnection so os campos Value do nosso ValueListEditor.
Se todos os dados estiverem corretos a conexo ser concluda,
caso haja algum erro uma mensagem ser exibida. Aps concluirmos o teste
de conexo interessante fecharmos a conexo de teste, portanto na listagem
15 est o cdigo do boto desconectar:
Listagem 15. Boto 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
Concluso
Vimos como criar e manipular arquivos.ini de acordo com nossas especificaes, utilizamos o componente TValueListEditor que segue um formato
muito similar as conexes do prprio Delphi, portanto cria uma facilidade na
visualizao das informaes que sero manipuladas no decorrer do projeto.
Neste caso utilizamos para configurar uma conexo 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
prxima!
Sobre o autor
Jeferson Silva de Lima
Consultor The Club.
suporte@theclub.com.br
junho
2013
27
28
junho
2013
Agora adicione o componente GestureManager, seu form dever ficar idntico ao da figura 03.
Selecione o form, na propriedade Touch na barra ObjectInspector selecione o componente GestureManager. Ver figura 04.
2013
29
Eu vou trabalhar com os controles Dataset (TDataSetFirst, TDataSetPrior, TDataSetNext e TDataSetLast) do componente ActionManager , esses controles
so as aes 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 ao do Dataset como mostra a figura 05.
Agora vou explicar como fazer uma conexo com uma tabela de teste.
Adicione o componente table da aba DBE.
Na propriedade DataBasename escolha a opo DBDEMOS.
Na opo 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 sero adicionados. Coloque true na opo active do componente table.
Concluso
Todas as configuraes esto prontas, agora voc pode testar a navegao 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 prxima.
30
junho
2013
junho
2013
05
junho
2013