Você está na página 1de 5

Centro Universitrio do Leste de Minas Gerais

Cursos de Sistema de Informao

Mini-Curso Delphi com Banco de Dados Parte 1


Objetivo: Criao de um projeto de controle de cursos do aluno, utilizando recursos de banco de dados Cliente Servidor ( nterbase, M!S"l, S"lServer, etc# acessado por componentes da paleta $%& e manipulao de menu de op'es( 1. &. Inicie um novo pro eto clicando no menu !ile"#e$ %pplication. %cesse o formul'rio e(istente. D) a ele o nome de FrmPrincipal. %ltere a le*enda para Controle de %lunos e seus Cursos. Como nosso pro eto ser' do tipo MDI+ altere a propriedade !ormSt,le deste form para fsMDI!orm. %ltere a propriedade -indo$State para $sMa(imi.ed. /ale lem0rar deve e(istir somente um formul'rio MDI!orm em todo o pro eto+ sendo os demais do tipo fsMDIChild. Crie em seu usu'rio uma pasta Cursos. Salve o seu pro eto na pasta Cursos+ utili.ando o 2cone Save %ll. Para o pedido de nome da unit+ utili.e uFrmPrincipal e para o pedido de nome do pro eto+ utili.e PrjCursos.

1.

Figura 1 Tela com o

enu Cadastro e Tabelas

3. 7. 9. :.

4tili.ando o componente MainMenu+ crie as op5es de menu de acordo com a fi*ura 1. Por en6uanto iremos construir somente o menu cadastro e ta0elas. %dicione ao form um componente StatusBar da *uia -in1&. %ltere sua propriedade %uto8int para true. Isto far' com 6ue os 8ints apaream na status 0ar. Com um duplo cli6ue a0ra o editor StatusBar.panels. Cli6ue no 0oto %dd #e$s a fim de acrescentar tr)s panels. %0ra o evento ;nSho$ do formul'rio e acrescente o se*uinte c<di*o=
with StatusBar1 do begin Panels[0].Width := FrmPrincipal.Width Panels[1].Width := $0# Panels[!].Width := $0# Panels[1].%e&t := 'ate%oStr()ow*# Panels[!].%e&t := %ime%oStr()ow*# end# 1!"#

>.

%crescente a este formul'rio um componente ?imer @S,stemA. Com um duplo cli6ue so0re o mesmo+ a0ra o manipulador do evento ;n?imer e acrescente a se*uinte linha de c<di*o=
StatusBar1.Panels[!].%e&t := %ime%oStr()ow*#

Criando Acesso s tabelas


B. Cste sistema D um Sistema Cliente"Servidor+ portando o acesso ao 0anco de dados se dar' levando em considerao 6ue o mesmo poder' ficar em um Servidor Inter0ase e todos iro acessar a mesma 0ase de dados.

1E. Csta 0ase de dados dever' ficar em um servidor+ 6ue pode ser a sua pr<pria m'6uina+ desde 6ue o Inter0ase este a instalado na mesma. #o caso deste minicurso+ copie o 0anco de dados Cursos.*d0 para o diret<rio C:\Documents and Settings\All Users. Cste 0anco possui 7 ta0elas com a estrutura apresentada na fi*ura &.

Figura ! " De#ini$%o das Tabelas

11. Colo6ue no FrmPrincipal um componente Data0ase @Fuia BDCA. %ltere seu nome para DbsPrincipal.

%utor= ProfG Cl'udio Portes @profclaudioportesH*mail.comA - 1 de 7

1&. Com um duplo cli6ue a0ra a anela de propriedades e preencha a anela 6ue aparece de acordo a fi*ura 1. 11. Desmar6ue a opo Io*in Prompt+ pois o usu'rio e senha sero passados para o 0anco via formul'rio de lo*in. ; usu'rio 6ue colocamos neste momento servir' apenas para a cone(o ao 0anco 6uando estivermos com o pro eto em tempo de confeco.

Criando um #ormul&rio de 'ogin


13. %cesse o menu File+)ew Form. %ltere seu nome para !rmIo*in e confi*ure-o de acordo com a fi*ura 3 ao lado. 4tili.e dois componentes CditJs comuns. ; Cdit de usu'rio tem o nome Figura 4 " Con#igura$%o do Database (dtUsuario e o de senha (dtSen)a. %ltere a propriedade Pass$ordChar do (dtSen)a para um *. 17. 4tili.e dois componentes Button. ; primeiro de nome Btn;K e o se*undo como BtnCancelar. %ltere a propriedade odal+esult do Btn;K para mr,- e do BtnCancelar para mrCancel. %ltere a propriedade De#ault do Btn;K para True. 19. Com o !rmPrincipal selecionado+ cli6ue no menu !ileL4se 4nit e selecione a unit uFrm'ogin para 6ue a unit do !ormul'rio Principal sai0a 6uem D o !rmIo*in e possa assim utili.'-lo.
Figura 5 " Fomul&rio de 'ogin

1:. %cesse o menu Pro,ect+-ptions. Passe o formul'rios Frm'ogin da lista Auto"create Forms para a lista A.alaible Forms+ dei(ando na primeira somente o !rmPrincipal. 1>. %cesse o evento ;nCreate do FrmPrincipal. Cscreva entre o 0e*in e end o se*uinte c<di*o+ confi*urando a linha em ne*rito para o correto caminho onde se encontra a 0ase de dados=
tr. Frm/ogin := %Frm/ogin.0reate(Sel1*# tr. i1 Frm/ogin.Show2odal = mr-3 then with 'bsPrincipal do begin 0lose# Params.0lear# Params.Add('SERVER NAME=C:\Documents and Settings\All sers\Cursos.gd!'"# Params.4dd(56S78 )427=5 9 Frm/ogin.7dt6suario.%e&t*# Params.4dd(5P4SSW-8'=5 9 Frm/ogin.7dtSenha.%e&t*# -pen# end else 4pplication.%erminate# e&cept Show2essage(56su:rio ou Senha in;:lida. - Programa ser: encerrado<5*# 4pplication.%erminate# end# 1inall. Frm/ogin.Free# end#

Se voc) estiver acessando a 0ase de dados em um servidor @linu(+ por e(emploA+ mude a linha Server #ame para al*o parecido com a linha a0ai(o= 'Ser$er Name=%&.'.&.(:)$ar)li!)inter!ase)dados)cursos.gd!'# onde o endereo IP D o endereo da m'6uina servidora e o caminho representa o local onde se encontra o 0anco tam0Dm na m'6uina servidora.

Criando o #ormul&rio de Cadastro de Cidades do menu Tabelas


1B. /amos *erar o formul'rio de cadastro de Cidades. Portanto+ crie um novo formul'rio @!ile L #e$ L !ormA. Salve a unit deste como u!rmCadCidades. D) ao formul'rio o nome de !rmCadCidades e como t2tulo escreva= MCadastro de CidadesM. %ltere a propriedade /eig)t para &EE e a propriedade 0idt) para 17E. %ltere a propriedade 1orderSt2le para bsSingle. Isso far' com 6ue ao ser a0erto+ a anela venha do tamanho 6ue foi definida. &E. Como o pro eto D MDI+ teremos 6ue alterar a propriedade !ormSt,le para #s D3C)ild. Para 6ue o formul'rio realmente se feche ao invDs de ser minimi.ado+ devemos acessar o c<di*o do evento ;nClose deste formul'rio e escrever o se*uinte c<di*o=
Frm0ad0idades := nil# 4ction := caFree#

&1. %cesse o menu Pro,ect+-ptions. Passe o formul'rios FrmCadCidades da lista Auto"create Forms para a lista A.alaible Forms+ dei(ando na primeira somente o !rmPrincipal.
%utor= ProfG Cl'udio Portes @profclaudioportesH*mail.comA - & de 7

&&. %dicione a este formul'rio um componente Nuer,+ um 4pdateSNI @BDCA e um DataSource @Data%ccessA. Confi*ure-os conforme descrito a0ai(o= &1. %ltere o nome do componente Nuer,1 para 6r2Cidade. %ltere a propriedade Data0ase#ame @respons'vel pela cone(o com o 0ancoA para dbCursos. %ltere a instruo SNI para : S('(CT CDC3DAD(7 8 C3DAD( F+, C3DAD( 0/(+( 1 9 : ,+D(+ 1; 8 C3DAD(<. Procure escrever a instruo SNI em maiOsculo. ,1S= % cl'usula =)ere 1 9 : foi adicionada ao comando SNI visando a0rir a ta0ela sem entretanto+ tra.er para a mem<ria todos os re*istros 6ue e(istam no 0anco. Isto D feito para economi.ar mem<ria+ visto 6ue o usu'rio pode estar 6uerendo a0rir o formul'rio somente para cadastrar uma nova cidade+ no sendo necess'rio visuali.ar tudo 6ue e(iste no 0anco. &3. Carre*ue os componentes ?!ields da Nuer, com um duplo cli6ue so0re a 6uer, e escolhendo a opo Add All Fields com o 0oto direito do mouse. Selecione o campo CDCID%DC e altere a propriedade Displa2 'abel para C>digo. %ltere tam0Dm o campo #MCID%DC para 8ome Cidade. &7. Para 6ue possamos utili.ar um componente Nuer, para atuali.ao de dados devemos alterar sua propriedade Cached4pdates para ?rue e a propriedade 4pdate;0 ect deve ser apontada para um componente 4pdateSNI. Cstas confi*ura5es faro com 6ue a Nuer, *rave os dados em mem<ria cache e aponte para um componente 4pdateSNI 6ue D 6uem far' na realidade a atuali.ao. Portanto+ altere a propriedade UpdateS6' para UpdateS6'1 6ue se encontra no formul'rio.

Figura C " Tela de con#igura$%o do UpdateS6'

Cac)edUpdates. Nuando mudamos esta propriedade para ?rue+ estamos redirecionando as altera5es da Nuer, para a mem<ria cache+ fa.endo com 6ue ao se fechar o formul'rio+ todas as altera5es se am perdidas. Para 6ue isto no ocorra devemos escrever o c<di*o =r.4luno.4ppl.6pdates# no evento %fterPost e %fterDelete da Nuer,. &9. %ltere o nome do 4pdateSNI para UpdCidade. D) um duplo cli6ue no 4pdateSNI para a0rir uma anela tal 6ual a anela da fi*ura 7. Cscolha o@sA campo@sA chave da ta0ela @neste caso CDCID%DCA e cli6ue no 0oto ?enerate S6' e depois no 0oto ,@. &:. Com relao ao componente DataSource+ altere seu nome para DtsCidade. Io*o ap<s+ altere sua propriedade DataSet para Nr,Cidade @Cscolha na listaA. %ntes de confi*urarmos o componente 4pdateSNI+ devemos *erar os componentes ?!ields da Nuer,. /e a item &9. &>. %ntes de confi*urar os componentes de controle @D0CditA+ adicione ao formul'rio um componente Tool1ar @Fuia -in1&A. %dicione a este componente+ B @noveA componentes Speed1utton @%dditionalA e um componente D0#avi*ator @DataControlA. ; D0#avi*ator deve ficar depois dos 7 primeiros 0ot5es @Basta arrastar com o mouseA e somente os 3 primeiros 0ot5es devem ficar ha0ilitados. Para isso+ cli6ue com o 0oto direito+ escolha a opo (ApandA+ e altere para !alse da su0-propriedade n0Insert atD n0Pefresh. %ltere a propriedade -idth para 1EE. Para separar os componentes+ utili.e um Separator como pode ser visto na fi*ura 9 @Boto direito so0re o ?oolBar e escolha #e$ SeparatorA.

PageControl TabS)eet
Figura B " Cadastro de Cidades

&B. Cada componente dever' ser renomeado da es6uerda para a direita= BtnIncluir+ BtnC(cluir+ BtnCditar+ BtnCancelar+ BtnFravar+ #v*Cidade+ Btn%lternar+ BtnCarre*ar+ BtnIrPara e Btn!echar respectivamente. %s ima*ens dos 0ot5es esto no diret<rio fornecido pelo instrutor. 1E. %dicione a0ai(o do ?oolBar um componente PageControl @-in1&A. %ltere seu alinhamento para %lClient. Com o 0oto direito do mouse adicione duas novas p'*inas. %ltere o nome do Pa*eControl @selecione-o com cli6ue onde a seta indicaA para PgcCadastro. %ltere o nome de cada uma das ?a0SheetQs criadas @selecione-as com um cli6ue onde a seta indicaA para TbsCadastro e TbsConsulta.

%utor= ProfG Cl'udio Portes @profclaudioportesH*mail.comA - 1 de 7

/oc) pode criar e confi*urar os componentes D0Cdit de uma s< ve.. Para isto+ d) um duplo cli6ue no componente Nuer, @Nr,CidadeA+ a0ra o seu editor de campos. Se voc) ' carre*ou e confi*urou seus campos @Item &3A+ 0asta selecionar todos eles e arrast'-los para o local do formul'rio onde 6uer 6ue os mesmos fi6uem. 11. %*ora vamos fa.er com 6ue os 0ot5es funcionem. Com um duplo cli6ue em cada um deles crie a manipulao para o evento ,nclic- onde devero ser colocados os se*uintes c<di*os=
*tn+ncluir *tnEditar *tnE,cluir *tnCancelar *tn-ra$ar *tnAlternar =r.0idade.4ppend# =r.0idade.7dit# i1 2essageBo&(>andle? 57&cluir esta 0idade@5? 50on1irmaABo5? 2BC-D04)07/ 9 2BC'7FB6%%-)1* = Ed-3 then =r.0idade.'elete# =r.0idade.0ancel# =r.0idade.Post# i1 Pgc0adastro.4cti;ePage = %bs0adastro then Pgc0adastro.4cti;ePage := %bs0onsulta else Pgc0adastro.4cti;ePage := %bs0adastro# with =r.0idade do begin 0lose# SFl.%e&t := 5S7/70% G F8-2 0E'4'7 -8'78 BH )20E'4'75# -pen# end# 0lose#

*tnCarregar

*tn+rPara *tn.ec/ar

1&. Nuando o formul'rio de Cidade for criado+ devemos ativar a Nuer,+ portanto+ ative o evento ;nCreate do !rmCadCidades e escreva o c<di*o= 6r2CidadeD,pen<. 11. Selecione a *uia de consulta e insira nela um componente D0Frid @DataControlsA. %ltere seu alinhamento para %llClient e confi*ure sua propriedade DataSource. /olte para a *uia de cadastro. 13. Salve o pro eto @opo !ile " Save %llA. 17. /amos testar nossa aplicao para ver se est' tudo funcionandoR 19. Compile e e(ecute o pro eto. ?ente ativar o cadastro de cidades. !uncionouR 1:. Se no funcionou D por6ue no inserimos no #ormul&rio principal+ no evento ;nClicK do 2tem de menu S?a0elas " CidadeM+ os comandos necess'rios. /e a no pr<(imo 2tem como fa.e-lo. 1>. /olte ao pro eto e acesse o evento ;nClicK deste item de menu @0asta clicar na opo de menuA. %dicione neste evento o se*uinte c<di*o=
i1 Frm0ad0idades = nil then Frm0ad0idades := %Frm0ad0idades.0reate(Sel1*# IICria o formul'rio. Frm0ad0idades.WindowState := ws)ormal# II Pestaura o form caso este a minimi.ado. Frm0ad0idades.Bring%oFront# II ?ra. o form para a frente se estiver atr's de outro.

Dando mais consistEncia ao #ormul&rio


1B. %o inserir uma nova cidade+ no podemos dei(ar 6ue o usu'rio entre com um c<di*o 6ue ' e(ista na ta0ela. Para isto+ selecione o formul'rio !rmCadCidade @S$iftT!1&A+ d) um duplo cli6ue no componente Nr,Cidade e selecione o campo CDCID%DC. %cesse o evento ;n/alidade deste campo e faa com 6ue o mesmo fi6ue parecido com o se*uinte c<di*o=
procedure %Frm0ad0idades.=r.0idade0'0E'4'7Jalidate(Sender: %Field*# ;ar =r.0ons: %=uer.# begin tr. =r.0ons := %=uer..0reate(nil*# =r.0ons.'atabase)ame := =r.0idade.'atabase)ame# =r.0ons.S=/.%e&t := 5S7/70% 0'0E'4'7 F8-2 0E'4'7 W>787 0'0E'4'7 = 5 9 =r.0idade0'0E'4'7.4sString# =r.0ons.-pen# i1 =r.0ons.8ecord0ount KL 0 then begin Show2essage(5'esculpe? mas este cMdigo ,: e&iste5*# 4bort# end# 1inall. =r.0ons.Free#

%utor= ProfG Cl'udio Portes @profclaudioportesH*mail.comA - 3 de 7

end# end#

3E. Da mesma forma+ no devemos dei(ar 6ue o usu'rio tente *ravar um re*istro sem preencher os dois campos @C<di*o e #ome da CidadeA. Para isto+ d) um duplo cli6ue no 0oto BtnFravar e altere o c<di*o acrescentando as se*uintes linhas antes do c<di*o 6ue ' e(iste=
i1 EdtCdCidade.%e&t = 55 then begin Show2essage(5Fa;or preencher o cMdigo da 0idade5*# 7dt0d0idade.SetFocus# 7&it# end# i1 EdtNmCidade.%e&t = 55 then begin Show2essage(5Fa;or preencher o nome da 0idade5*# 7dt)m0idade.SetFocus# 7&it# end# =r.0idade.Post#

;0serve 6ue os nomes dos D0CditUs foram alterados para CdtV#ome do CampoW. Isto facilita a pro*ramao. !aa o mesmo em seu formul'rio. 31. %*ora faa os formul'rios de Bairro e Curso se*uinte o mesmo padro do cadastro de cidades.

%utor= ProfG Cl'udio Portes @profclaudioportesH*mail.comA - 7 de 7

Você também pode gostar