Você está na página 1de 32

abril 2011

abril 2011

ndice
04

Para quem trabalha com desenvolvimQuem trabalha com


desenvolvimento de
sistemas e precisa
coordenar o trabalho
de uma ...

DataSnap XE

Autor: Antonio Spitaleri

05

Banco de Dados

Delphi
Trabalhando com SQL Server 2008
Express Edition

Autor:Thiago Cavalheiro
Montebugnoli

Banco de Dados

Delphi

Editorial

18

24

Utilizando Subversion e Tortoise

Autor: Bruno Alcars

10

Criando aplicaes modernas e


profissionais.

Autor:Luciano Pimenta

Dicas
- Dicas Delphi

29

Desafio The Club


- Cruzada

30

Legenda
Iniciante
Intermedirio
Avanado
abril 2011

03

Bem-vindo

uem trabalha com desenvolvimento de sistemas e precisa


coordenar o trabalho de uma equipe envolvida em um
mesmo projeto, se v diante da preocupao de controlar
os vrios arquivos gerados em um projeto e as diversas
verses que cada membro da equipe vai gerar.

Para a soluo desse tipo de problema, de fundamental importncia


fazer uso de uma ferramenta de controle de verses. Entre as tecnologias
mais em voga atualmente, est o SVN, acrnimo de SubVersioN.
Nesse ms, nosso consultor Bruno Alcars nos traz em nosso artigo de
capa, como trabalhar com SubVersion utilizando a ferramenta Tortoise
SVN.
No artigo Utilizando SubVersion e Tortoise, Bruno nos mostra os principais conceitos do SubVersion e as principais funcionalidades do Tortoise
SVN.
No artigo DataSnap XE, mostro para vocs como fazer uso da tecnologia
DataSnap na mais recente verso do Delphi, incluindo acesso ao Firebird
com essa ferramenta.
Nosso colaborador Thiago Montebugnoli segue em sua saga com o Sql
Server Express Edition. Nesse ms ele nos mostra como trabalhar com a
ferramenta no artigo: Trabalhando com Sql Server 2008 Express Edition.
Para finalizar, nosso colaborador Luciano Pimenta nos mostra dicas
importantes a respeito do visual de nossas aplicaes no artigo Criando
aplicaes modernas e profissionais.

Av. Prof Celso Ferreira da Silva, 190


Jd. Europa - Avar - SP - CEP 18.707-150
Informaes: (14) 3732-1529
Suporte: (14) 3733-1588

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
Copyright The Club Megazine 2009
Diretor Tcnico
Marcos Csar Silva
Diagramao e Arte
Vitor M. Rodrigues
Reviso
Tassiane Fileto
Colunistas
Antonio Spitaleri Neto
Bruno Alcars
Eduardo Massud
Felipe Santos
Luciano Pimenta
Thiago Cavalheiro Montebugnoli
Impresso e acabamento:
GRIL - Grfica e Editora
Taquarituba-SP - Tel. (14) 3762-1345

Por esse ms isso. Bom Abril a todos e at Maio.

Antonio Spitaleri Neto - Editor Chefe


antonio@theclub.com.br
04

abril 2011

Reproduo
A utilizao, reproduo, apropriao, armazenamento em banco
de dados, sob qualquer forma ou meio, de textos, fotos e outras
criaes intelectuais em cada publicao da revista The Club
Megazine so terminantemente proibidos sem autorizao
escrita dos titulares dos direitos autorais.

Delphi marca registrada da Borland International,


as demais marcas citadas so registradas
pelos seus respectivos proprietrios.

Delphi

DataSnap XE
Por volta do ano de 1997, com o lanamento da verso 3 do Delphi, a Borland
introduziu uma tecnologia de acesso a
dados atravs de aplicaes distribudas, o
DataSnap.
De incio, a tecnologia DataSnap no se
mostrou vivel devido a sua complexidade
e custo de licena elevados. Era, na poca,
mais fcil ao desenvolvedor Delphi utilizar
acesso remoto via drivers ODBC e comunicao TCP\IP.
Com a verso 6 do Delphi, a tecnologia
DataSnap sofreu importantes alteraes, tanto nos custos quanto na forma de se utilizar
a tecnologia. Com o Delphi 7, a tecnologia
DataSnap dava um importante passo para sua
popularizao, pois se tornava mais acessvel
financeiramente e ainda a complexidade
ficava menor.

Porm para o desenvolvedor Delphi


mdio, utilizar DataSnap para aplicaes
distribudas ainda era difcil devido ao fato
de que certos conceitos no muito populares
entre os desenvolvedores Delphi precisavam
ser aprendidos. Alm disso, os drivers de
acesso a banco de dados contidos no Delphi
no estavam 100% preparados para essa
tecnologia, o que causava alguns erros difceis
de serem contornados.
Aps a verso 7, at hoje considerada
por alguns desenvolvedores Delphi a melhor
verso da ferramenta, o Delphi viveu o que se
pode chamar de Era das Trevas. Exageros a
parte, entre as verses 7 e 2009 do Delphi,
poucas mudanas foram incorporadas ao
Delphi. Some-se a isso s tentativas frustradas
de incorporar a tecnologia .NET da Microsoft
diretamente ao Delphi, que acabaram atra-

sando o desenvolvimento da ferramenta em


vrias frentes.
A tecnologia DataSnap no passou ilesa
por esse perodo obscuro da histria do Delphi. Durante o perodo entre as verses 7 e
2009 do Delphi, a tecnologia DataSnap, antes
promissora, praticamente caiu no ostracismo,
sendo quase que totalmente deixada de
lado pelos desenvolvedores que utilizavam
Delphi. Nessa poca muitos desenvolvedores ficaram na dvida se no era mais vivel
migrar suas aplicaes que necessitavam de
acesso remoto para tecnologias que na poca
poderiam oferecer maiores recursos, como
.NET e Java.
Com a chegada do Delphi 2009, uma
nova poca comeou para o Delphi e consequentemente para o DataSnap. O DataSnap
2009 trouxe uma forma de trabalho muito

abril 2011

05

mais amigvel e ainda assim robusta, o que


permitiu que o desenvolvedor Delphi mdio
pudesse utilizar a tecnologia para a criao
de aplicaes distribudas.

DBExpress:

UserName e Password podem ser deixados


como padro. Clique em Test Connection e se a
conexo ocorrer com sucesso clique em OK.

O fato de ter se tornado mais amigvel


no significa que DataSnap, a partir da verso 2009, tenha se tornado uma tecnologia
no confivel. A robustez da tecnologia foi
mantida e novas funcionalidades foram
acresecentadas.
Na verso 2010, DataSnap, alm das
melhorias anteriores, ganhou suporte a
Tunneling e HTTP, ampliando o leque de
possibilidades com a tecnologia.
Na nova verso do Delphi, Delphi XE,
DataSnap segue sua evoluo. Agora, alm de
maior consistncia com relao a HTTP, DataSnap ganhou suporte a Cloud, podendo acessar
servidores Cloud para busca de dados.
Os novos drivers de acesso a dados presentes no Delphi XE esto melhor integrados
com DataSnap, permitindo o desenvolvimento de aplicaes ligadas aos principais
bancos de dados do mercado, como Firebird,
Interbase, Sql Server, entre outros.
Seguindo em nossa srie de artigos
sobre o novo Delphi XE, nesse artigo estarei mostrando o desenvolvimento de uma
aplicao simples cliente\server utilizando
DataSnap XE.

Com a conexo criada, podemos ir ao passo


seguinte.

Criando o servidor DataSnap


Com a conexo criada, faremos em seguida a
criao do servidor DataSnap.
Todos esse drivers podem ser utilizados em
conjunto com a tecnologia DBExpress, alm disso,
o uso de DBExpress possibilita o uso de drivers de
terceiros que podem facilmente incorporados ao
DBExpress.

Ser exibida a seguinte tela com as opes de


servidor DataSnap disponveis no Delphi XE:

Com a conexo criada, temos de passar os


parmetros para a mesma. Ainda no Data Explorer,
clique no sinal + ao lado do driver Firebird e aps
isso clique com o boto direito sobre a conexo
EMPLOYEE. Selecione Modify Connection. Ser
exibida a seguinte tela:

Como possvel ver na imagem, temos trs


opes de servidor DataSnap:

Veja a imagem 2.

Mos a obra!

Montando a conexo
Para nosso exemplo, vamos utilizar o banco
Employee.fdb que acompanha a instalao do
Firebird.

06

abril 2011

No Delphi XE, acesse o menu File New


Other. Na rvore de opes a esquerda, selecione
Delphi Projects DataSnap Server. Selecione na tela
a opo DataSnap Server e clique em Ok.

Clique com o boto direito sobre o driver Firebird e escolha Add New Connection. Ser exibida
uma tela pedindo o nome da conexo. Coloque o
nome EMPLOYEE.

O banco de dados que utilizarei no exemplo o Firebird, um dos mais populares entre
os desenvolvedores Delphi.

Abra o Delphi XE e acesse o menu View


DataExplorer. Ser exibida a lista de drivers do

Em DataBase Name coloque o caminho onde


se encontra a base de dados. No exemplo utilizarei
C:\Employee.fdb.

Imagem 2.

Veja a imagem 3.

VCL Forms Application: Servidor com a aparncia tradicional de uma aplicao Win32, com janela
e demais componentes visuais.
Console Application: Servidor rodando em

modo texto, estilo aplicaes para MS-DOS.


Service Application: Servidor rodando como
servio, em background na mquina.
Para nosso exemplo utilizaremos a opo VCL
Forms Application. Selecione e clique em Next.
Ser exibida a prxima tela de configurao do
servidor DataSnap:
Nessa tela escolhemos os protocolos que
nosso servidor suportar para conexo, TCP e
HTTP so as opes. Ambas podem ser escolhidas
ou uma delas. Para nosso exemplo utilizaremos
apenas TCP.
Podemos tambm definir se nosso servidor
ser autenticado, ou seja, se o cliente precisar de
Login e senha para se conectar. No utilizaremos
essa opo em nosso exemplo.
E por fim escolhemos se iremos adicionar os
mtodos do servidor em uma classe e se essa classe
ter os mtodos EchoString e ReverseString, em
nosso exemplo marcaremos ambas as opes.

Imagem 3.

Clique em Next. Na tela seguinte, escolhemos


a porta TCP na qual o nosso servidor ir operar. No
exemplo mantemos 211 como nmero da porta. Se
em sua mquina houver outra aplicao utilizando
a porta 211, pode escolher outro nmero.
Na prxima tela iremos definir de qual classe
nossa classe de mtodos no servidor ir herdar.
Para o nosso exemplo escolheremos TDataModule.
Clique em Finish. Nosso servidor DataSnap
est pronto.
Veja que como escolhemos VCL Forms Application como tipo de servidor, as entidades contidas no servidor DataSnap so todas Formulrios
Delphi padro. Em execuo, esse formulrios
tero comportamento idntico ao de qualquer
formulrio Win32.
Alm do formulrio principal da aplicao,
criado com o nome de Form1, temos outros dois

Imagem 4.
abril 2011

07

formulrios em nosso Server:


ServerContainer: Nesse formulrio esto os
componentes que realizam o transporte e colocam
as conexes do server a disposio das aplicaes
clientes. Nesse formulrio, por padro, so colocados os componentes:
- DSServer: Principal componente dos servidores DataSnap, controla a criao e ciclo de vida das
classes com os mtodos do server DataSnap.

Colocamos os componentes responsveis pela


conexo com o banco e por trazer os dados no
ServerMethods porque esse formulrio que ir
conter os mtodos para a exportao dos dados.
Quando criamos nosso servidor DataSnap, j
inclumos entre esses mtodos os mtodos ReverseString e EchoString.
Incluiremos mais dois mtodos: GetEmployees, para retornar a tabela Employee para o cliente e
GetCustomers, para retornar para o mesmo cliente
a tabela Customer.

- DSTCPServerTransport: Componente responsvel pelo transporte de dados via TCP entre Server
e Client DataSnap.

Veja a unit do formulrio ServerMethods j


com as funes citadas:

Anteriormente, criamos nossa conexo de


nome EMPLOYEE com o banco de dados Firebird.
Iremos agora fazer uso dessa conexo.
No formulrio ServerMethods, coloque um
componente SQLConnection da aba DBExpress.
Em sua propriedade Connection Name escolha a
conexo EMPLOYEE. Nossa conexo com o banco
est criada.
Agora iremos trazer os dados das tabelas.
Coloque no formulrio principal da aplicao dois
componentes SQLDataSet. Altere suas propriedades Name para sdsEmployee e sdsCustomer
respectivamente. Aponte suas propriedades SQLConnection para o SQLConnection que inserimos
no formulrio anteriormente.
As propriedades CommandText dos componente sdsEmployee e sdsCustomer ficaro
respectivamente:

SELECT * FROM EMPLOYEE;


SELECT * FROM CUSTOMER;
08

abril 2011

implementation
{$R *.dfm}
uses StrUtils, Unit1;

- DSServerClass: Esse componente o responsvel por publicar os mtodos do server para serem
invocados pelo cliente DataSnap.

ServerMethods: Esse formulrio no ir


conter nenhum objeto visual. Sua unit abrigar a
classe com os mtodos do Server DataSnap. Nesse
formulrio tambm colocaremos os componentes
de acesso aos dados.

GetEmployees:TDataSet;
function
GetCustomer:TDataSet;
end;
{$METHODINFO OFF}

unit ServerMethodsUnit1;
interface
uses
SysUtils, Classes,
DSServer,DB, DBXFirebird,
FMTBcd, SqlExpr;
type
{$METHODINFO ON}
TServerMethods1 =
class(TDataModule)
SQLConnection1:
TSQLConnection;
sdsEmployee:
TSQLDataSet;
sdsCustomer:
TSQLDataSet;
private
{ Private declarations
}
public
{ Public declarations
}
function
EchoString(Value: string):
string;
function
ReverseString(Value:
string): string;
function

function TServerMethods1.
EchoString(Value: string):
string;
begin
Result := Value;
end;
function TServerMethods1.
GetCustomer: TDataSet;
begin
sdsCustomer.Open;
Result:=sdsCustomer;
end;
function TServerMethods1.
GetEmployees: TDataSet;
begin
sdsEmployee.Open;
Result:=sdsEmployee;
end;
function TServerMethods1.
ReverseString(Value:
string): string;
begin
Result := StrUtils.
ReverseString(Value);
end;
end.

Os mtodos GetEmployees e Get Customers


que sero os responsveis por disponibilizar o
acesso do cliente DataSnap as tabelas representadas pelos objetos SqlDataSet.

Criando o Cliente DataSnap


Com o Servidor DataSnap devidamente criado,

faremos agora a construo do cliente DataSnap,


que a aplicao que ir acessar os dados provenientes do servidor.
O cliente DataSnap uma aplicao simples,
nos moldes padro das aplicaes Win32 Delphi.
Para cria-la, acesse o menu File New VCL
forms Application.
Ser criada uma aplicao com um Formulrio. Antes de modificar o layout desse formulrio,
temos de adicionar um DataModule para abrigar
nossos componentes de acesso aos dados.
Acesse o menu File New Other Delphi
Files Data Module.
No DataModule, insira os seguintes componentes:
-SqlConnection:
Driver:DataSnap;
Port:211;
HostName:localhost;
-SqlServerMethod:
Name:GetEmployees;
SqlConnection:SqlConnection1;
Server Method: TServerMethods1.GetEmployees;
-SqlServerMethod:
Name:GetCustomers;
SqlConnection:SqlConnection1;
Server Method: TServerMethods1.GetCustomers;
-DataSetProvider:
Name:provEmployees;
DataSet:GetEmployees;
-DataSetProvider:
Name:provCustomers;
DataSet:GetCustomers;
-ClientDataSet:
Name:cdsEmployees;
ProviderName:provEmployees;

Imagem 5.

Name:cdsCustomers;
ProviderName:provCustomers;
Com o DataModule pronto e acessando os
dados, faremos agora a montagem do formulrio
principal da aplicao.
Usaremos dois componentes DataSource ligados cada um a um ClientDataSet do DataModule.
Em seguida iremos utilizar um PageControl
com duas abas, cada uma com um DBGrid ligado
a um DataSource.

Coloque os componentes ClientDataSet em


Active=True e veja que os dados iro aparecer
nos Dbgrids.
Salve as alteraes no cliente DataSnap.

Concluso:
A tecnologia DataSnap, aps renascer com a
verso 2009 do Delphi, vem ganhando melhorias a
cada nova verso, se consolidando assim como uma
alternativa bastante razovel aos acessos remotos
a bancos de dados.

Veja o layout na imagem 5:


Espero que tenham gostado e at a prxima!

Sobre o autor
Antonio Spitaleri Neto
Consultor Tcnico The Club.

antonio@theclub.com.br

-ClientDataSet:
abril 2011

09

Criando aplicaes modernas e


profissionais
Dicas para turbinar o visual de suas aplicaes

Todo desenvolvedor acredito eu, gosta


que seu trabalho seja de qualidade e bem
elogiado, tanto por parte do cliente (o elogio
mais importante) como por parte de quem
conhece o projeto desenvolvido (usurios,
outros desenvolvedores etc.).
Sempre gosto de frisar que o mais importante em um sistema a parte funcional,
pois no adianta que a aparncia do projeto
seja boa, se ele no cumpre as necessidades
do cliente. Ento, tomamos por base que
nosso sistema funcione de acordo com o
que o cliente pediu, assim vamos melhorar o
visual do mesmo.
Se voc deseja criar projetos com layouts
profissionais, voc precisa usar componentes
para isso. Criar seus prprios componentes
pode despender muito tempo, o que o
desenvolvedor ou empresa onde trabalha,
no tem. Ou, voc pode usar uma sute de
componentes profissional que lhe de tudo
que precisa de maneira rpida e fcil.
Neste artigo, veremos o melhor dos dois
mundos: componentes nativos do Delphi
e componentes de terceiros. No primeiro
exemplo, vamos criar uma aplicao que
10

abril 2011

utiliza uma pgina de boas-vindas usando


HTML e interagindo com formulrios Delphi
(semelhante a novas verses do Delphi e de
outras ferramentas de desenvolvimento).
Para componentes de terceiros vamos
conhecer a melhor, em minha opinio, sute
de componentes: DevExpress, que possui
componentes que tornam barra de ferramentas, menus e o novo Ribbon fcil de
implementar em aplicaes Delphi.

informaes do sistema, alm de links para acesso


aos formulrios. Alm disso, a pgina poder ser
usada para navegar na internet, afinal o WebBrowser tem essa finalidade.
Para iniciar o projeto, crie um novo projeto
Win32 no Delphi (qualquer verso) e adicione
um PageControl com uma aba. Dentro dessa aba,
adicione um Panel (para adicionar botes de navegao) e um WebBrowser. Veja na Figura 1 como
ficar o projeto inicialmente.
Veja a Figura 1.

Pgina de boas-vindas
Para essa funcionalidade, usaremos o WebBrowser, onde vamos carregar um arquivo HTML com

Figura 1. Formulrio principal do projeto

Colocamos como botes, uma Toolbar dentro


de outro Panel. O cdigo dos botes ser o contido
na Listagem 1.

Listagem 1. Cdigo dos botes


Boto Voltar
WebBrowser1.GoBack;
Boto Avanar
WebBrowser1.GoForward;
Boto Home
var
aFile: string;
begin
aFile :=
ExtractFilePath(
Application.ExeName) +
'index.htm';
if FileExists(aFile)
then
begin
WebBrowser1.
Navigate(aFile);
Edit1.Text := 'index.
htm';
end
else
ShowMessage('Arquivo
no encontrado');
end;

Veja que os mtodos para avanar e retornar


do WebBrowser so bem simples. Para o Home,
vamos carregar um arquivo HTML que estar no
diretrio da aplicao. Faa a chamada ao evento Click do boto, tambm no evento OnShow,
para quando abrirmos a aplicao, seja exibido
o arquivo.
Se quisermos navegar em sites, basta digitar
o endereo na caixa de texto e clicar no boto.
No cdigo a seguir, carregamos a pgina no WebBrowser:
WebBrowser1.
Navigate(Edit1.Text);

Teste, abrindo o projeto e digitando uma URL


no Edit e aperte ENTER (Figura 2). Poderamos
implementar um navegador .
Veja a Figura 2.

Arquivo HTML

Figura 2. Navegando na internet, usando o WebBrowser


Vamos criar um arquivo HTML para ser a
pgina inicial. Essa pgina ter links e informaes
sobre o sistema. Vamos mostrar apenas alguns
links, mas para uma aplicao comercial, voc pode
dividir a aplicao em mdulos, inclusive com mais
arquivos HTML.
Voc pode usar qualquer editor de HTML para
criar esse arquivo, mas o mais importante esta no
cdigo dos links, como no exemplo a seguir:
<a href=clientes:>

Veja que no usamos o caminho pra o arquivo,


como por exemplo, clientes.html. Utilize isso para
todos os links, veremos a seguir como modificar
esse cdigo para abrir formulrios. No vamos abrir
formulrios ainda, por que vamos criar os mesmos
nas abas do PageControl, portanto, colocaremos
somente avisos, para entendermos o funcionamento da tcnica.
No evento OnBeforeNavigate2 do WebBrowser
digite o cdigo da Listagem 2.
Listagem 2. Cdigo para abrir formulrios
var
Comando: string;
ColonPos: integer;
begin

ColonPos := Pos(':',
URL);
if ColonPos > 0 then
begin
Cancel := True;
Comando := Copy(URL,
1, ColonPos - 1);
if Comando =
'clientes' then
ShowMessage('Boto
de Clientes')
else if Comando =
'fornecedores' then
ShowMessage('Boto
Fornecedores')
else
Cancel := False;
end;
end;

O cdigo anterior, procura no parmetro URL,


o valor da string at os dois pontos (:), por que o
parmetro retorna o link que foi clicado pelo usurio no HTML. Atravs da funo Copy, armazenamos
o valor da string na varivel Comando e verificamos
seu valor com um simples if, para executar uma
determinada tarefa.
Apenas teremos que fazer essa condio para
cada formulrio usado. Para maiores informaes
sobre o evento OnBeforeNavigate2, consulte o
Help do Delphi. Modificaremos o cdigo anterior,
no final do artigo, depois de criarmos os formulabril 2011

11

rios em abas.
Dica: Pea ajuda a um profissional que
entenda de layouts de pginas HTML (web
designer), pois ele pode criar um layout mais
dinmico e profissional, apenas tomando o
cuidado para a padronizao que fizemos
nos links.

Formulrios em abas
Para a funcionalidade de criar abas com formulrios, vamos criar primeiramente um formulrio
base. Neste artigo, irei trabalhar com herana visual
de formulrios, ou seja, teremos um formulrio
base e herdaremos deste para criar os outros
formulrios de cadastros.
A idia no mostrar a tcnica de herana
visual e sim apenas de criao de formulrios em
abas. Para saber mais sobre o assunto, possuo vrios artigos e aulas publicadas sobre o tema. Veja
na Figura 3 o formulrio base da aplicao.

begin
Form := clsForm.
Create(TabSheet);
TabSheet := TTabSheet.
Create(Self);
with TabSheet do
begin
PageControl :=
PageControl1;
Caption := Form.
Caption;
ImageIndex := Index;
end;
with Form do
begin
Align := alClient;
BorderStyle := bsNone;
Parent := TabSheet;
Show;
end;
PageControl1.ActivePage
:= TabSheet;
end;

Veja que temos dois parmetros, o primeiro


indicando a classe do formulrio que abriremos
e o segundo o ndice do cone que ser mostrado
na aba do PageControl. A seguir, instanciamos a
classe passada por parmetro, usando um varivel
local, passando como owner um TabSheet (aba)
do PageControl.

Figura 3. Formulrio principal do projeto

Com esse formulrio, podemos criar os formulrios de cadastros do projeto. Crie quantos
formulrios forem necessrios. Agora, vamos
comear a parte de criao das abas e visualizao
dos formulrios na mesma. Adicione o cdigo da
Listagem 3 no formulrio principal da aplicao.
Listagem 3. Cdigo para criar abas no PageControl e mostrar o formulrio
procedure
CriarAba(clsForm:
TFormClass; Index:
Integer);
var
TabSheet: TTabSheet;
Form: TForm;
12

abril 2011

no PageControl (Figura 4).

Continuando, instanciamos a varivel TabSheet


e configuramos algumas propriedades: para indicar
o PageControl associado (importantssimo), o Caption da aba e o ndice da imagem. No PageControl,
associe um ImageList com algumas imagens para
poder mostrar as mesmas.
A seguir, configuramos o formulrio, usando a
varivel local e abrimos o mesmo, usando o Show.
Para finalizar, precisamos mostrar a aba criada
usando o ActivePage do PageControl. Para testar,
coloque um Toolbar ou botes no formulrio principal, para abrir os formulrios.
Para chamar o formulrio, use o mtodo criado
na listagem anterior, como por exemplo:
CriarAba(TfrmClientes, 0);

Faa o teste e veja o formulrio sendo aberto

Figura 4. Abrindo o formulrio no PageControl

Veja que no formulrio base, j temos um


PageControl e duas abas. Para no ficar poludo o
layout, voc pode mudar a orientao do PageControl no formulrio base de cadastro. Faa a mesma
tcnica para abrir outros formulrios.
Experimente fazer um teste e clicar novamente
no boto de abrir formulrio para um que j exista
no PageControl. O que temos uma duplicao
de abas, e isso um problema. Para resolver isso,
precisamos criar um cdigo que verifique se a aba j
existe e em caso positivo, no criar outra aba.
O cdigo da Listagem 4 mostra como criar
essa verificao.
Listagem 4. Cdigo para verificar se uma aba
existe
function
AbaExiste(NomeAba:
string): Boolean;
var
i: Integer;
Aba: TTabSheet;
begin
Result := False;
for i := 0 to
PageControl1.PageCount - 1
do
begin
if PageControl1.
Pages[i].Caption = NomeAba
then
begin
Aba := PageControl1.
Pages[i];
PageControl1.
ActivePage := Aba;
Result := True;
break;

end;
end;
end;

No cdigo, percorremos as abas do PageControl e comparamos cada uma com o nome passado
por parmetro. Essa string nada mais do que o
Caption do formulrio que vamos associar a aba.
Se encontrarmos a aba com o mesmo nome, mostramos a mesma usando novamente o ActivePage
e retornarmos True para a funo.
No CriarAba, vamos adicionar esse cdigo da
verificao, aps instanciar a varivel do formulrio
e antes de instanciar a varivel TabSheet, usando
o seguinte cdigo:
if AbaExiste(Form.Caption)
then
Exit;

Essa verificao vai sair do cdigo (Exit), caso


encontre uma aba j existente e assim, mostrar a
mesma para o usurio. Faa o teste, chame o formulrio e aps, tente clicar novamente no boto,
no teremos mais a duplicao de abas.

Fechando o formulrio e aba


Agora precisamos fechar o formulrio e conseqentemente, fechar a aba do PageControl. Para
isso, vamos usar o cdigo da Listagem 5. Lembre-se
de colocar o mesmo na seo Public do formulrio
principal.

Aba := PageControl1.
Pages[i];
Aba.Destroy;
PageControl1.
ActivePageIndex := 0;
break;
end;
end;
end;

Esse cdigo, novamente percorre as abas e


compara com o parmetro. Quando encontra a
aba, ele destri a mesma e coloca como aba ativa
a primeira aba do projeto (Welcome Page). Caso
no queria isso, basta indicar a aba ativa como a
que esta com o ndice menor ou maior (esquerda
ou direita) da aba que esta sendo fechada.
Por fim, devemos chamar esse cdigo no
formulrio base, para quando o usurio fechar
o formulrio, a aba seja removida. No evento
OnCloseQuery do formulrio, devemos chamar o
cdigo anterior:
frmMain.FecharAba(Self.
Caption);

J existe cdigo nesse evento, ento devemos


usar esse cdigo, somente quando o formulrio for
fechado. Veja que para sabermos o nome do formulrio, basta passarmos o Caption do formulrio
base. Essa propriedade ser a do formulrio ativo,

portanto, muito fcil de ser usada, pois estamos


usando herana visual.
No formulrio base, adicione um boto e chame o mtodo Close para fechar o mesmo. Execute
a aplicao e faa os testes (Figura 5).

Figura 5. Aplicao em execuo


Para finalizar, precisamos apenas modificar o
cdigo do evento OnBeforeNavigation2 (Listagem
2) do WebBrowser para chamar os formulrios que
queremos, assim podemos abrir os formulrios
pelo botes ou atravs do arquivo HTML.
Uma dica: crie Actions para a chamada
aos formulrios, onde teremos um local para
o cdigo sem precisar duplicar o mesmo na
aplicao . Veja na Figura 6 como ficou a
aplicao final.
Veja a Figura 6.

Listagem 5. Cdigo para fechar aba


procedure
FecharAba(NomeAba:
string);
var
i: integer;
Aba: TTabSheet;
begin
for i := 0 to
PageControl1.PageCount - 1
do
begin
if PageControl1.
Pages[i].Caption = NomeAba
then
begin

Figura 6. Aplicao final em execuo


abril 2011

13

DevExpress
Para componentes de terceiros, vamos conhecer os principais componentes que auxiliam a
criao de layouts, iniciando pelo NavBar. Quando
o Outlook implementou uma barra lateral com um
layout muito bonito, os desenvolvedores procuraram fazer o mesmo em seus sistemas.
Apareceram vrios componentes que tentaram reproduzir essa barra lateral, mas como um
grande pesquisador de componentes para Delphi,
afirmo que o melhor o NavBar da DevExpress.
Como podemos ver na Figura 7, temos algumas
opes de estilos do componente.
Veja a Figura 7.
Para criarmos um exemplo, vamos adicionar
um dxNavBar no formulrio. A primeira impresso
de um painel cinza, mas basta dar um duplo clique
para abrirmos o editor (Figura 8), onde podemos
criar grupos e itens. Veja que o editor j possui um
NavBar no seu lado esquerdo.
Veja a Figura 8.
No item Groups, vamos adicionar os grupos da
barra. Adicione quantos grupos desejar, usando o
boto Add. No Object Inspector temos acesso s
propriedades de cada grupo. Algumas propriedades que devem ser mencionadas:

Figura 7. Estilos do NavBar (fonte: www.devexpress.com)


Caption: ttulo do grupo;

Hint: dica do grupo;

UseSmallImages: indica se vamos mostrar cones pequenos no grupo;

LargeImageIndex, SmallImageIndex:
indica o ndice da imagem que vamos usar. Caso
UseSmallImages esteja true, use SmallImageIndex,
se no use LargeImageIndex.
Nas propriedades do dxNavBar temos LargeImages e SmallImages para imagens grandes e
pequenas, respectivamente. Adicione as imagens
em dois ImageList e configure-os no controle. As
imagens nos grupos aparecero dependendo do
estilo escolhido no componente. Veja na Figura 9
o projeto em execuo.

Figura 9. Criando grupos no componente


14

abril 2011

Figura 8. Editor do NavBar

Para criar os itens, vamos usar a mesma tcnica, acessando a opo Items no editor. Crie quantos
itens quiser, associando os mesmos com cones de
sua preferncia. Note que nos Items podemos usar
Actions de uma ActionList, isso facilita em muito o
desenvolvimento.
Para associar os itens aos grupos, acesse a opo Link designer e arraste os itens nos respectivos
grupos. Rode a aplicao (Figura 10).

Figura 11. Estilo personalizado no grupo do NavBar

Figura 10. Grupos e itens no NavBar (com estilo


do Office)

Veja que temos muitas possibilidades com o


dxNavBar, pois temos propriedades para modificar
o fundo do controle, mudar visual do itens, mostrar Hint no grupos e itens, entre muitas outras.

Customizando a cor de fundo


Voc pode ainda, mesmo com a grande possibilidade de customizaes, fazer uma cor ou estilo
de fundo de seu gosto, tanto para todo o controle,
como para cada grupo. No editor de grupos do
NavBar, acesse a opo Custom Styles. Adicione
um novo estilo e veja nas propriedades as opes
que temos.
Veja que as possibilidades so grandes, ento
voc pode brincar com todas elas. Aps criado
o estilo, voc pode configurar a propriedade Style
Background, ou qualquer outra propriedade de
estilo, do grupo para o estilo criado. Veja na Figura
11, o estilo criado.

Figura 12. Estilo personalizado em todos os grupos do NavBar

do controle, do boto que faz parte do controle,


entre muitos outros.
Veja a Figura 12.

Menus
Veja a Figura 11.
Para fazer a configurao no componente inteiro, basta selecionar todos os grupos e selecionar
o mesmo estilo. Vrios outros estilos podem ser
configurados separadamente como o cabealho

Alm de uma barra lateral, temos controles


para criao de menus e barras de ferramentas
semelhantes ao Office e outros softwares, tudo isso
usando os controles ExpressBar. Vamos utilizar o dxBarManager, que concentra a criao das barras de

ferramentas e tambm o estilo das mesmas, onde


temos: Office 11, XP, Standard, Flat etc.
Adicione o controle no formulrio e d um
duplo clique. No editor, vamos adicionar Toolbars
usando o New. Cada Toolbar tem um nome que
voc pode digitar, indicando as funcionalidades
da barra, onde esse nome ser mostrado quando
o usurio arrastar a barra de ferramentas.
Precisamos agora apenas criar os itens, para
isso clique com o boto direito na barra e escolha
abril 2011

15

Add Button. Esse boto, pode ser vinculado a uma


ActionList, novamente, poupando trabalho para
concentrar os itens.
Adicione quantos itens quiser. Acesse a propriedade PaintStyle e escolha o tipo de visualizao
do boto (somente rtulo, somente imagem ou os
dois). As imagens do dxBarManager devem ser configuradas na propriedade ImageOptions>Images.
Caso deseje criar um boto que possua um
menu, como o Open do Delphi, use a opo New
SubItem ao clicar com o boto direito na barra. Para
os itens desse boto, clique normalmente com o
boto direito e v adicionando botes.
At agora, vimos apenas botes na barra, mas
podemos ter outros tipos de controles, como: Edit,
ComboBox etc. Lembrando tambm que nos itens,
podemos adicionar subitens. Veja na Figura 13 um
exemplo da barra de ferramentas.

Figura 13. Exemplo de itens na barra de ferramentas

Veja a Figura 13.


Dependendo do tipo de controle adicionado
como item, temos os eventos desse controle, como
OnChange ou OnClick para Edit e ComboBox. Para
mudar o estilo da barra, mude a propriedade Style
do dxBarManager, onde temos os estilos citados
anteriormente.
Para o menu, voc usar uma barra, com todos
os itens, como subitens e assim, adicionar os itens
do menu. Para ficar bem identificado o menu da
barra de ferramentas, use cones pequenos para o
menu e grandes para a barra de ferramentas.
Veja que podemos criar uma aplicao semelhante ou igual ao Office com seus menus e barra de
ferramentas, onde ainda temos os editores iguais
do Office, onde podemos arrastar itens etc.

Ribbon

Figura 15. Configurando as abas do Ribbon

No dxRibbon, configure a propriedade BarManager com o dxBarManager. Em


ApplicationButton>Menu configure para dxBarApplicationMenu. Para criar as abas do Ribbon,
acessa o menu Tabs do controle. Nele adicione
quantas abas quiser (Figura 14).

O estilo Ribbon foi trazido com o Office 2007.


Desde seu lanamento, a DevExpress disponibilizou
o componente, que esta presente no Delphi, a
partir da verso 2009. Novamente, podemos criar
uma aplicao igual ao Office 2007.
Suas configuraes so parecidas com o que
j mostramos, mas claro com caractersticas prprias do Ribbon. Para iniciar o exemplo, adicione
no formulrio um dxRibbon, acompanhado de um
dxBarManager, para adicionar as barras e itens (botes), e um dxBarApplicationMenu, para adicionar
o menu quando clicamos no boto do Ribbon.
16

abril 2011

portanto, crie as barras e itens, como fizemos nos


exemplos anteriores.

Figura 14. Editor de abas do Ribbon

Para cada aba (tab), podemos adicionar os


grupos (barras de ferramentas), onde ficaram os
itens (botes). Mas, para adicionarmos os grupos,
devemos ter as barras criadas no dxBarManager,

Aps criado, configure cada barra na propriedade Toolbar na coleo de Grupos (propriedade
Groups). Lembrando que uma barra no pode estar
vinculada em grupos diferentes, cada barra como
ser fosse nica. Veja na Figura 15 o exemplo em
execuo
Veja a Figura 15.

Note que podemos adicionar qualquer tipo


de item (boto, Edit, Combo), como fizemos nos
exemplos mostrados at aqui. Tambm, podemos
adicionar quantas barras e grupos quisermos. Voc
deve estar sentindo falta do boto do Ribbon, para
mostrar o mesmo, mas para mostr-lo, temos que
criar uma nova barra para mostrar os itens ao lado
do boto.
Aps criar a barra e adicionar os itens,
configure a mesma na propriedade
QuickAccessToolbar>Toolbar. Assim, teremos o
boto do Ribbon com os itens de acesso rpido
(Figura 16).

Figura 16. Boto e itens de acesso rpido

Veja a Figura 16.


Para finalizar, podemos criar um menu para
quando clicarmos no boto do Ribbon. Para isso,
utilize o dxBarApplicationMenu, acessando a
propriedade ItemLinks e adicionando (arrastando)
os itens do dxBarManager. Experimente usar um
ActionList e uma barra apenas para os itens do
menu, assim, poder usar cones maiores.
Veja na Figura 17 temos o menu de acesso
rpido.

Concluso
Vimos neste artigo como criar aplicaes
Win32 com um layout que chame a ateno do
usurio e que d mais funcionalidade ao mesmo,
ficando assim seu projeto com muita qualidade
e valor agregado. Ainda poderamos adicionar
mais algumas caractersticas como um menu de
contexto para fechar a aba ou colocar um X na
aba para fech-la.
Vimos tambm que com os componentes da
DevExpress, podemos criar layouts profissionais em
nossas aplicaes, disponibilizando para o usurio
finais, estilos onde ele mesmo pode optar o que se
adapta melhor. Podemos criar aplicaes completas
ao estilo das principais ferramentas do mercado.
Um grande abrao a todos e sucesso em seus
projetos!

Figura 17. Menu de acesso rpido, configurado no boto do Ribbon

Sobre o autor
Luciano Pimenta
Tcnico em Processamento de Dados, desenvolvedor Delphi/C# para aplicaes
Web com ASP.NET e Windows com Win32 e Windows Forms. Palestrante da 4 edio
da Borland Conference (BorCon).
Autor de mais de 60 artigos e de mais de 300 vdeos aulas publicadas em revistas
e sites especializados. consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra
cursos de programao e banco de dados. desenvolvedor da Paradigma Web Bussiness em Florianpolis-SC.

www.lucianopimenta.net

abril 2011

17

Trabalhando com
o SQL Server 2008
Express Edition
Parte 1
Neste artigo estarei demonstrando como
trabalhar com o SQL Server 2008 junto com
sua Ferramenta de gerenciamento de Banco
de Dados. Explicarei alguns tpicos importantes e essenciais para administrao e criao
do mesmo.
Antes de comearmos, gostaria de
informar que estaremos com o SQL Server
Management Studio aberto, rodando em uma
mquina local. No Pesquisador de Objetos
(Object Explorer) encontraremos vrios itens
do Banco de Dados, especificamente neste
artigo abordaremos alguns subitens do Item
Banco de Dados. Segue abaixo as principais
caractersticas do mesmo.

Criando uma Base de Dados


Podemos conferir o Item Banco de Dados do
Sistema, onde ficam as informaes internas do
SQL Server, como por exemplo: o Banco master,
model, msdb e tempdb. importante informar que estes Bancos contm dados internos do
SQL Server que estaremos estudando em uma
aula posterior. Voltando ao assunto, no nosso
caso, criaremos uma Base de Dados de usurio,
para isto clique com o boto direito sobre o item
Bancos de Dados e escolha a opo Novo Banco
de Dados.
01.

Veremos uma janela parecida com a Figura

18

abril 2011

Figura 01: Novo Banco de Dados.

Definimos assim no Nome do Banco de Dados:


DB_THECLUB e automaticamente ser criado um
arquivo de Dados e um arquivo de Log. Este arquivo
de Log contm registros das operaes de atualizao que ocorrem em um Banco de Dados, que no
nosso caso ir possuir informaes referentes ao
Banco de Dados DB_THECLUB.

Esta mesma tarefa tambm poderia ser realizada por linha de comando, veja abaixo:
CREATE DATABASE [DB_
THECLUB] ON PRIMARY
( NAME = NDB_THECLUB,

FILENAME = NC:\Program
Files\Microsoft SQL
Server\MSSQL10.SQLEXPRESS\
MSSQL\DATA\DB_THECLUB.mdf
, SIZE = 3072KB , MAXSIZE
= UNLIMITED, FILEGROWTH =
1024KB )
LOG ON
( NAME = NDB_THECLUB_
log, FILENAME = NC:\
Program Files\Microsoft
SQL Server\MSSQL10.
SQLEXPRESS\MSSQL\DATA\DB_
THECLUB_log.ldf , SIZE =
1024KB , MAXSIZE = 2048GB
, FILEGROWTH = 10%)
GO

Explorando as propriedades do Banco


DB_THECLUB
Clique com o boto direito em cima do DB_
THECLUB e escolha Propriedades. Ver Figura 02.
Podemos encontrar algumas propriedades na
regio esquerda desta janela, detalhamos a seguir
as principais caractersticas:

Geral: Informaes de Backup, Nome,
Status, Proprietrio Data da Criao, tamanho entre
outras informaes.

Arquivos: Nesta aba encontraremos
informaes sobre o arquivo de Dados (.mdf) e o de
Log (.ldf), tais como: Grupo de Arquivos, tamanho
em MB, Tipo de Crescimento de dados, Caminho
e Nome do Arquivo.

Figura 02: Propriedades do Banco de Dados.

igura 03: Resultado da Consulta SQL.

Podemos calcular os espaos utilizados para


os Dados e Arquivos de Log. O SQL Server possui
comandos e recursos para isto que estarei demonstrando. O comando abaixo nos retorna os seguintes
resultados: Ver Figura 03.
Figura 04: Resultado da consulta SQL.
DBCC SHOWFILESTATS

FA coluna TotalExtents e UsedExtents indicam


respectivamente o Total de MB reservado para os
Dados e o Total utilizado.
Mas a vem a pergunta, O que significa 48? O
que significa 23? Estes nmeros so chamados Extents. Uma unidade interna que SQL utiliza. Para
sabermos o resultado em MB basta multiplicarmos
por 64, tendo o seguinte resultado:

TotalExtents : 48 * 64 = 3072 (3 MB)


UsedExtents: 23 * 64 = 1472 (aproximadamente 1,5 MB)
J o comando abaixo indica a utilizao do
Arquivo de Log.
DBCC SQLPERF(LOGSPACE)

Veja a Figura 4.

Neste caso, o resultado da instruo SQL


trouxe todos os arquivos de Log utilizados na Base
de Dados. A ltima linha indica a Base de Dados
DB_THECLUB, temos a Coluna Log Size (que
seria o tamanho em MB do arquivo) e a coluna
Log Space Used ( que seria a Porcentagem do
espao utilizado).
Tambm podemos obter estes resultados
utilizando outros recursos do SQL Server, na forma
de grficos. Para isto clique com o Boto direito
sobre o Banco, escolha Relatrios e em seguida
abril 2011

19

Relatrios Padro. Notem que temos vrios tipos de


relatrios, no nosso caso especfico escolheremos
a Primeira Opo, Relatrio do uso do Disco. Ver
Imagem 05.
Veja a Figura 05: Relatrio de Uso do Disco.
Neste Relatrio podemos conferir com clareza
todas as caractersticas acima criadas por linha
de comando. Um detalhe interessante que vale a
pena destacar que podemos imprimir este tipo
de Relatrio.

Grupos de Arquivos: Todo Banco de
Dados possui um grupo de arquivo primrio. Este
grupo de arquivo contm o arquivo de dados primrio e qualquer um dos arquivos secundrios que
no foram colocados em outros grupos de arquivos.
Grupos de arquivos definidos pelo usurio podem
ser criados para agrupar os arquivos de dados para
fins administrativos, de alocao de dados e de
posicionamento. No nosso caso usaremos apenas
um grupo de arquivo Primrio.

Opes: Temos algumas propriedades
importantes nesta aba, como: Tipos de Agrupamento, Modelo de Recuperao e Nvel de
Compatibilidade entre outras Opes. No Nvel de
Compatibilidade podemos mudar at para o SQL
Server 2000.

Tabelas (Tables)
Depois da criao da Base Dados, a criao de
tabelas a parte mais importante de um Banco de
Dados. nela onde armazenamos as informaes
para consultas, alteraes. Para criarmos as Tabelas
podemos utilizar tanto a interface de Comando
quanto a grfica, inicialmente criaremos utilizando
a interface grfica, para isto Clique com o Boto
direito em cima de Tabelas e escolha a Opo
Nova Tabela. Na prxima janela aparecero trs
colunas, com o Nome do campo, o Tipo de Campo
e se permite nulo ou no. Em Tipo de Campos,
observaremos que o SQL Server possui muitos tipos
de dados para se trabalhar. importante conhecer
estes tipos de dados disponveis, para utiliz-los da
melhor forma no seu projeto de Banco de Dados.
Usando corretamente o tipo de dado nas colunas
das tabelas, possibilitar uma boa performance,
escalabilidade e integridade da informao ali
armazenada. Em seguida explicarei alguns campos
mais utilizados no SQL Server 2008.
Tipos Numricos:
- TINYINT: Armazena valores numricos intei20

abril 2011

Figura 05: Relatrio de Uso do Disco.

ros, com variaes de 0 a 256.


- SMALLINT: Armazena valores numricos
inteiros, com variaes de -32768 a 32767
- INT: Armazena valores numricos inteiros, com
variaes de -2.147.483.648 a 2.147.483.647
- BIGINT: Armazena valores numricos inteiros,
com variaes de -9.223.372.036.854.775.808 a
9.223.372.036.854.775.807
- MONEY: Armazena valores numricos decimais, com variaes de - 922,337,203,685,477.5808
a 922,337,203,685,477.5807
- FLOAT: Armazena valores numricos aproximados com preciso de ponto flutuante, variando
de -1.79E + 308 a 1.79E + 308
- REAL: Armazena valores numricos aproximados com preciso de ponto flutuante, variando
de -3.40E + 38 a 3.40E + 38
Para o campo NUMERIC(18,0), temos o armazenamento com preciso. O primeiro nmero entre
os parnteses representa a quantidade de inteiros
a serem armazenados e o segundo nmero indica
a quantidade de casas decimais do nmero. J o
campo DECIMAL(18,0) Possui as mesmas funcionalidades do tipo NUMERIC, a diferena que o
DECIMAL faz parte do padro ANSI e NUMERIC
mantido por compatibilidade.
Tipos Datas:
- DATETIME: Armazena data e hora, com preciso de centsimos de segundos.
- TIME: Armazena somente hora. Pode armazenar segundos at a frao de 9999999.
- DATE: Armazena somente data.

J para os tipos Caracteres:


- CHAR(N): Armazena N caracteres fixos (at
8.000) no formato no Unicode. Independente da
quantidade de caracteres utilizados, ir sempre armazenar o tamanho de caracteres do campo, sendo
preenchido o restante com espaos em branco.
- VARCHAR(N): Armazena N caracteres (at
8.000) no formato no Unicode.
- TEXT: Armazena caracteres no formato
no Unicode. Esse tipo de dado suporte at
2.147.483.647 caracteres e existem funes especficas para trabalhar com esse tipo de dado.
Foram apresentados apenas alguns dos principais tipos de campos do SQL Server. Importante
ressaltar que existem muitos outros para serem
estudados e utilizados.
Depois de conhecermos os tipos de campos,
criaremos duas tabelas para nosso exemplo, uma
de Pedidos de Vendas e outra dos itens do Pedido
de Venda. Veja abaixo os campos utilizados:
Tabela: TB_PED

Nome campo

Tipo campo

COD_PED

INT

COD_CLI

INT

DAT_PED

DATETIME

DAT_ENT

DATETIME

TOT_PED

NUMERIC(18,2)

Tabela: TB_ITE

Nome campo

Tipo campo

COD_ITE

INT

COD_PED

INT

COD_PRO

INT

QUA_PRO

NUMERIC(18,2)

VAL_UNI

NUMERIC(18,2)

TOT_PRO

NUMERIC(18,2)

Um recurso interessante do SQL Server seria


o de auto-incremento. Uma forma fcil para incrementar nosso campo inteiro, economizando cdigo
e outros recursos do Banco de Dados. Utilizaremos
para os campos Primary Key (PK) de nossas tabelas
(COD_PED da tabela TB_PED e COD_ITE da tabela
TB_ITE). Para isto siga os passos abaixo:
Na criao dos campos, clique em Propriedades da Coluna e no item Especificao de Identidade e altere a propriedade para SIM.

Incremento de Identidade: Valor a ser
utilizado para o primeiro valor inserido na coluna,
deixe o valor 1.

Semente de Identidade: Valor a ser
incrementado a cada nova insero, deixe o valor
1.

Figura 06: Propriedades da Coluna.

Segue abaixo a linha de comando referente s


tabelas criadas anteriormente:
Tabela TB_PED

Figura 07: Diagrama de Banco de Dados.

CREATE TABLE [dbo].[TB_


PED](

[COD_PED] [int]
IDENTITY(1,1) NOT NULL,

[COD_CLI] [int] NULL,

[DAT_PED] [datetime]
NULL,

[DAT_ENT] [datetime]
NULL,

[TOT_PED] [numeric]
(18, 2) NULL,
CONSTRAINT [PK_CAD_PED]
PRIMARY KEY CLUSTERED
(

[COD_PED] ASC
)
)
Tabela TB_ITE
CREATE TABLE [dbo].[TB_
ITE](

[COD_ITE] [int]
IDENTITY(1,1) NOT NULL,

[COD_PED] [int] NULL,

[COD_PRO] [int] NULL,

[QUA_PRO] [numeric]
(18, 2) NULL,

[VAL_UNI] [numeric]
(18, 2) NULL,

[TOT_PRO] [numeric]
(18, 2) NULL,
CONSTRAINT [PK_TB_ITE]
PRIMARY KEY CLUSTERED
(

[COD_ITE] ASC
))

Neste caso de Mestre-Detalhe, devemos


criar uma Chave Estrangeira na Tabela TB_ITE,
para isto usaremos o comando ALTER TABLE para
adicionarmos uma CONSTRAINT, observem o
cdigo abaixo.

ALTER TABLE TB_ITE


ADD CONSTRAINT FK_TB_ITE
FOREIGN KEY (COD_PED)
REFERENCES TB_PED (COD_
PED)

Diagrama de Banco de Dados (Database


Diagrams)
Para visualisar graficamente o relacionamento
acima criado podemos usar o recurso de criao de
diagramas. Clique em Diagrama de Banco de Dados e com o boto direito escolha Novo Diagrama
de Banco de Dados. Em seguida aparecer uma
tela com as tabelas criadas anteriormente, selecione as duas e adicione na tela. Ver Imagem 07.
Veja a Figura 07
Todos os relacionamentos criados aparecero
no nosso diagrama. Ressalto tambm que todas as
alteraes realizadas graficamente afetar a tabela
internamente. Podemos criar relacionamentos
facilmente clicando em um campo de uma tabela
e arrastando para a outra. Uma tarefa que se torna
muito fcil e produtiva.

Exibies (Views)
As Views so entidades que permitem a visualizao do contedo das tabelas existentes no
abril 2011

21

Banco de Dados, so tabelas sem existncia fsica.


Seria uma maneira alternativa de visualisao do
contedo de uma ou de vrias tabelas.
No SQL Server, temos vrias Exibies do
Sistema (System Views). Elas podem nos trazer
muitas informaes como de Colunas, Objetos,
Parmetros, Restries, etc.

Criando uma View


O SSMSE nos fornece muitos recursos e facilidades para se trabalhar com Views. Podemos criar
sem nenhuma linha de cdigo, para isto clique com
o boto direito e escolha Nova Exibio. No nosso
caso faremos uma juno da tabela TB_PED com a
TB_ITE usando um JOIN simples. Adicione as duas
tabelas na tela e vejam que automaticamente o
cdigo criado. Adicionaremos alguns campos das
tabelas. Veja Figura 08.
Veja a Figura 08.
Para Executar esta View muito fcil, basta
pressionar F5 ou clicar na exclamao vermelha
na regio superior da tela.
Esta View (Exibio) tambm poderia ser
criada por linha de comando, acompanhe com a
instruo SQL abaixo:

CREATE VIEW [dbo].[View_


Pedido]
AS
SELECT
dbo.TB_ITE.COD_PRO,
dbo.TB_ITE.COD_ITE,
dbo.TB_ITE.QUA_PRO,
dbo.TB_ITE.VAL_UNI,
dbo.TB_ITE.TOT_PRO,
dbo.TB_PED.COD_CLI,
dbo.TB_PED.DAT_PED,
dbo.TB_PED.DAT_ENT,
dbo.TB_PED.TOT_PED
FROM dbo.TB_ITE
INNER JOIN
dbo.TB_PED ON dbo.TB_ITE.
COD_PED = dbo.TB_PED.
COD_PED

Para execut-la utilize o seguinte cdigo:


22

abril 2011

Figura 08: View Criada.

Concluso
SELECT * FROM VIEW_PEDIDO

Nesta primeira etapa foram exploradas algumas das principais caractersticas para se trabalhar
com o SQL Server 2008. Procurei apresentar algumas funcionalidades do SQL Server Management
Studio Express (SSMSE). Vou ficando por aqui, um
forte abrao a todos e at o ms que vem!

Sobre o autor
Thiago Cavalheiro Montebugnoli
Thiago Cavalheiro Montebugnoli tecnlogo, formado pela Faculdade
de Tecnologia de Botucatu SP (FATEC) foi consultor tcnico do The Club, 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. 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

abril 2011

23

Utilizando o
SubVersion e o
Tortoise
Quando trabalhamos ao longo de muito
tempo em um projeto, nos deparamos com
a necessidade de fazer diversas alteraes
no mesmo, seja em decorrncia de corrigir
bugs ou pra adicionar novas funcionalidades
ao sistema. Mas a vem a pergunta, como
resguardar a verso anterior do projeto para
que, em caso de algum problema ela possa ser
recompilada? Um mtodo muito usado criar
um arquivo compactado dos fontes e deixa-lo
guardado em alguma pasta do sistema... Mas
pense no que isso pode acarretar ao longo do
tempo. Um pasta com diversos arquivos ocupando espao em seu HD, entre esses diversos
arquivos existem arquivos que devem ser
preservados durante um longo tempo, outros
que podem ser deletados, ainda alguns, que
com o passar do tempo voc nem se lembrar
de porque foram compactados e guardados
nessa pasta.
24

abril 2011

Agora imagine uma equipe com mais de


10 programadores, mexendo no cdigo ao
mesmo tempo, ser muito fcil uma pessoa
desfazer o que a outra j tinha feito, e uma
alterao importante ser perdida. Existe
tambm a possibilidade de um programador
mexer em alguma parte do cdigo e outro
nem saber no que foi mexido.
Pra resolver esses problemas foram
criados os programas de controle de verso.
Os programas desse tipo visam melhorar a
colaborao entre equipes e ainda guardar o
histrico de atualizaes. O SVN guarda o histrico completo das atualizaes, para cada
commit gerado um nmero, cada nmero
guarda a alteraes feitas, quando necessrio
possvel voltar o projeto pra uma verso
anterior ou ento comparar os cdigos entre
diferentes verses. Entre os mais famosos so
o SubVersionSVN e o Jedi VCS. Nesse artigo

tratarei exclusivamente do SubVersionSVN


usado em conjunto com o Tortoise. Para saber
mais sobre o JediVCS sugiro a leitura de um
artigo de Abril de 2009, esse artigo pode ser
encontrado na revista ou no seguinte endereo em nosso site http://www.theclub.com.
br/REVISTA/CONT0409.ASPX.
Esse artigo ter uma sequencia, nesse
primeiro trarei noes bsicas do TortoiseSVN, como criar repositrios, fazer checkouts,
comitar alteraes entre outras coisas.

Baixando e Instalando o TortoiseSVN


O TortoiseSVN, no a nica, mas a melhor
opo pra se utilizar com o SubVersion. Ele pode
ser baixado gratuitamente no seguinte endereo
http://tortoisesvn.net/downloads.html . Depois de
baixado execute a instalao do aplicativo.

Veja a imagem 1.
A instalao do programa segue o padro americano para instalaes, Next... Next e Next.

Criando um projeto de exemplo


Vamos criar um pequeno projeto no Delphi
para ver como o Tortoise ir nos auxiliar no controle
das alteraes desse projeto.
Inicie um novo projeto no Delphi e insira
trs botes, adicione os seguintes cdigos aos
botes:
Button1:

ShowMessage(The
Club. O maior clube de
programadores do Brasil);

Imagem 01

altera-los.
Button2:

ShowMessage(The Club
Megazine);

Com o repositrio criado, volte a pasta na


qual voc salvou o projeto exemplo para fazermos
a importao inicial, para essa importao clique
com o boto direito na parte branca da pasta, v
a TortoiseSVN e escolha a opo Import, no menu
que se abrir, a seguinte tela ser apresentada:

Button3:

ShowMessage(Avar - SP);

V at o TortoiseSVN, e no menu seguinte


escolha a opo: Create Repository Here.
Salve o seu projeto com o nome e em uma
pasta de sua preferncia.

Criando o primeiro repositrio


Agora que seu projeto j est salvo vamos
import-lo para um repositrio, devemos antes,
claro, criar esse repositrio. Isso feito da seguinte
maneira.
Crie uma nova pasta, por exemplo no disco C:,
chame essa pasta de rep, abra essa pasta e clique
com o boto direito na parte em branco da pasta,
perceba que o ContextMenu j est integrado
com o Tortoise.

Em URL of Repository digite file:///rep/projeto_teste/trunk, isso criar em nosso repositrio


uma pasta projeto_teste, e dentro dessa pasta projeto_teste uma pasta chamada trunk, no prximo
artigo falarei o porqu desse nome e como funciona
a hierarquia de pastas do SubVersion.
Nesse momento sero criados os arquivos
de controle do SubVersion. Esses arquivos so
para controle interno do SubVersion, no convm

possvel tambm adicionar uma mensagem,


que informar outros programadores sobre o
que foi feito nessa etapa do processo, escreva
abril 2011

25

em mensagem Importao Inicial do projeto


de teste, clique em OK para os arquivos serem
importados.
Veja a imagem 6.
Feito! Os arquivos de seu projeto j esto
no repositrio. Se voc for at o repositrio, no
encontrar nenhum arquivo do tipo que espera encontrar, s arquivos de controle do SubVersion.

Fazendo o Checkout dos arquivos

Imagem 6.

Com o repositrio j criado, os arquivos j importados, devemos fazer o checkout dos arquivos
do projeto, para uma pasta de nossa preferncia,
que servir como a pasta de trabalho do nosso
projeto de exemplo.
Criada a pasta clique com o boto direito e
escolha a opo Checkout, a seguinte tela ser
aberta:
Veja a imagem 7.
Nessa tela digite o nome do repositrio de
onde sero buscados os arquivos file:///rep/
projeto_teste/trunk. Checkout Directory j vem
preenchida com o nome do diretrio onde sero
trazidos os arquivos, as opes de Checkout Depth
falarei no prximo artigo, portanto deixe a opo
padro, Fully recursive. Em Revision definida
qual a reviso (verso) ser trazida, deixe Head
revision. Quando clicar em OK os arquivos sero
trazidos a pasta.
Veja a imagem 8.
Perceba que o desenho da pasta e dos arquivos
tem agora um visto em verde, isso indica que essa
pasta uma pasta do TortoiseSVN.

Fazendo as primeiras alteraes no


projeto, comitando e verificando o
Log
Agora que nossos arquivos j esto na nossa
26

abril 2011

Imagem 7

Imagem 8

pasta de trabalho, basta trabalharmos com eles,


abra os arquivos no Delphi para que sejam feitas
alteraes que sero comitadas, o termo comitar
vem de commit e no TortoiseSVN significa que
vamos enviar ao repositrio os arquivos com as
modificaes feitas.
Modifique os textos dos ShowMessage para
textos de sua preferncia e salve as mudanas.
Agora v at a pasta onde est o arquivo, perceba
que o desenho dela j mudou, assim como o dos
arquivos que foram modificados, agora eles tem
uma exclamao vermelha, indicando que existem
modificaes no comitadas. Portanto vamos
manda-las ao repositrio.

Na pasta dos arquivos clique com o boto


direito e escolha a opo SVNCommit, a seguinte
tela ser aberta:

Imagem 9

Veja a imagem 9.
Nessa tela, em Changes made (double-click on
file for diff) esto listados os arquivos que foram
modificados, os arquivos que estiverem marcados
sero os comitados, alguns so marcados como
non-versioned e por padro no so comitados, no
exemplo da tela acima, somente o .pas ser enviado. Agora vem um recurso muito interessante do
TortoiseSVN, caso queira saber o que foi modificado
nesse arquivo, basta dar um dupl clique para abrir
um programinha chamado TortoiseMerge.
Veja a imagem 10.
No programa aparecem as duas verses do
arquivo, a ltima e a que estamos comitando no
momento. As partes que foram alteradas aparecem
destacadas nos dois arquivos. No prximo artigo
me aprofundarei mais nas ferramentas adicionais
desse programa.

Imagem 10

Feche a tela do TortoiseMerge, defina uma


mensagem informando as mudanas entre as
verses em Message e clique em OK. As mudanas
foram aplicadas.
Veja a imagem 11

Imagem 11
abril 2011

27

Caso, em algum momento, deseje saber tudo


que foi feito com o projeto, clique com o boto
direito na pasta, escolha TortoiseSVN e depois
ShowLog, se abrir uma tela com todas as revises feitas at o momento no projeto, voc pode
consulta-las e atravs das mensagens saber o que
foi modificado, ou ento abrir o TortoiseMerge
para ver o que foi modificado na reviso vista em
relao a reviso anterior.
Veja a imagem 12.

Concluso

Imagem 12.

Nessa primeira parte do artigo, apenas dei uma


introduo das funes bsicas do TortoiseSVN,
no prximo artigo me aprofundarei mais nessas
funes e em outras funes que auxiliam muito
o trabalho em equipe.

Sobre o autor
Bruno Alcars
Consultor Tcnico The Club.

E isso tudo pessoal! At mais!!


bruno@theclub.com.br

28

abril 2011

Dicas DELPHI
CRONMETRO
Uma aplicao com grande utilidade em muitos sistemas a utilizao da
marcao de horas, em alguns casos essa marcao deve ser especfica.
Esta uma dica de como criar um cronmetro genrico para adaptao
em qualquer aplicao, sendo simples e facilmente implementvel.
Primeiramente iremos criar uma nova aplicao e nela iremos inserir 2
Panels, 1 Label, 1 Timer e 3 Buttons.
O primeiro passo declararmos algumas variveis, um procedimento e um
tipo enumerado, sendo ele incluso na seo type do formulrio:
ChronometerState = (csRunning,
csStopped, csReset);

J as variveis e o procedimento, declaramos na seo private do formulrio:


State: ChronometerState;
fTime: TTime;
fOldTime: TTime;
fInitialTime: TTime;
procedure ChangeState(vState:
ChronometerState);

J na parte visual do formulrio executaremos alguns processos para o


acesso esses comandos, comeando pelo label deixando-o com a esttica
organizada, para isso primeiramente no Object Inspector, na propriedade
Name, mudaremos para lbCrono, e em sua propriedade Caption, colocaremos
00:00:00:000, para que ao abrirmos nosso formulrio ele traga essa visualizao como padro.

o seguinte cdigo:
tmCronometro.Enabled := False;
ChangeState(csStopped);

E no ltimo boto, em sua propriedade Name, mudaremos para btnZera


e sua propriedade Caption como ZERAR, e, em seu evento OnClick inserimos
o seguinte cdigo:
if (State = csStopped) then
begin
fTime := 0;
fInitialTime := 0;
lbCrono.Caption :=
FormatDateTime(hh:mm:ss:zzz,
fTime);
ChangeState(csReset);
end;

E, para concluir no objeto Timer dessa aplicao vamos mudar as algumas


propriedades, propriedade Name como tmCronometro, Enabled como False
e sua propriedade Interval com o valor 10, e no evento OnTimer, o cdigo:
fTime := fInitialTime + Now fOldTime;
lbCrono.Caption :=
FormatDateTime(hh:mm:ss:zz,
fTime);

Ao concluir, devemos obter um resultado semelhante a este:

No primeiro boto, em sua propriedade Name, mudaremos para btnInicia


e sua propriedade Caption como INCIAR, e, em seu evento OnClick inserimos
o seguinte cdigo:
case (State) of
csStopped:
fInitialTime := fTime;
csReset:
fInitialTime := 0;
end;
fOldTime := Now;
tmCronometro.Enabled := True;
ChangeState(csRunning);

No segundo boto, em sua propriedade Name, mudaremos para btnPara


e sua propriedade Caption como PARAR, e, em seu evento OnClick inserimos

Essa uma aplicao muito til para toda e qualquer aplicao que trabalhe
com preciso cronomtrica, sendo tambm adaptada e desenhada de acordo
com a necessidade da aplicao a ser utilizada.
abril 2011

29

Horizontal

30

abril 2011

Vertical

abril 2011

abril 2011

Você também pode gostar