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 2


Objetivo: Criao de um formulrio de aluno e seus cursos sendo !ue o mesmo " do tipo Mater#Detalhe$ %a parte superior ser cadastrado os dados do aluno e na parte inferior os cursos deste aluno utili&ando para isto a ta'ela relacionante (lunoCurso$ )$ 2$ ('ra o pro*eto PrjCursos +ra,ado em sua m!uina$ Crie neste pro*eto um no,o formulrio -.ile#%e/ .orm0$ (ltere seu nome para FrmCadAluno sal,ando sua unit como uFrmCadAluno$ (ltere a propriedade .ormSt1le para fsMDIChild$ (ltere a propriedade BorderSt1le para 'sSin+le$ 2em're-se tam'"m do c3di+o do e,ento 4nClose$

Regio Master do Formulrio


5$ 9$ (dicione a este formulrio um componente 6uer1 e 7pdateS62 e um componente DataSource da paleta de componentes$ Confi+ure-os conforme descrito a'ai8o: (ltere a propriedade Data'ase%ame para dbCursos$ (ltere a propriedade Cached7pdates para True$ (ltere seu nome de 6uer1) para r!Aluno e altere a instruo S62 para"
SELECT * FROM ALUNO WHERE 1 = 0 ORDER BY NMALUNO;

Ca#hed$%dates$ 6uando mudamos esta propriedade para :rue estamos redirecionando as altera;es da 6uer1 para a mem3ria cache fa&endo com !ue ao se fechar o formulrio todas as altera;es se*am perdidas$ Para !ue isto no ocorra de,emos escre,er o c3di+o 6r1(luno$(ppl17pdates< no e,ento (fterPost e (fterDelete da 6uer1$ =$ De,emos li+ar ao 6uer1 um componente 7pdateS62 !ue " na realidade o componente !ue efetua as atuali&a;es no 'anco de dados atra,"s de instru;es S62 !ue nele so criadas$ Portanto altere a propriedade 7pdade4'*ect do 6r1(luno com o nome do 7pdateS62)$ Carre+ue os componentes :.ields com um duplo cli!ue na 6uer1 e escolhendo a opo (dd (ll .ields com o 'oto direito do mouse$ (ltere o nome do 7pdateS62) para 7pd(luno$ D@ um duplo cli!ue no 7pd(luno para a'rir uma *anela tal !ual a *anela da fi+ura )$ Ascolha o-s0 campo-s0 cha,e da ta'ela e cli!ue no 'oto &enerate ' ( e depois no 'oto 4B$ Para o componente DataSource altere a propriedade Data'et escolhendo o nome do 6r1(luno ao !ual este DataSource ir se conectar e altere o nome para Dts(luno$
Figura * + Tela de #onfigura,o do $%date' (

>$

?$

C$

D$

(ntes de confi+urar os componentes de controle -D'Adit0 adicione ao formulrio um componente Tool)ar -Euia Fin520$ (dicione a este componente )G -de&0 componentes '%eed)utton -Euia (dditional0 e um componente D'%a,i+ator -Somente os 9 primeiros 'ot;es de,em ficar ha'ilitados0 todos separados por 'e%arator como pode ser ,isto na fi+ura 2$

(utor: ProfH Cludio Portes -profclaudioportesI+mail$com0 - ) de =

)G$ ( confi+urao desta parte do formulrio se d tal !ual a confi+urao dos formulrios anteriores e8ceto !ue e8iste neste formulrio um 'oto a mais do !ue os outros$ Aste 'oto chama-se BtnBuscar$ (s demais confi+ura;es no sero mostradas no,amente$ Am caso de dJ,ida consulte o +uia anterior$ ))$ 4 !ue ,eremos a+ora " como confi+urar os campos CdBairro e CdCidade ,isto !ue am'os so cha,e estran+eira neste formulrio$ Como o pro*eto ,isa diminuir a trfe+o na rede no utili&aremos o componente D'2ooKupCom'oBo8 -Cai8a de com'inao0 pois este componente tra& para a mem3ria todos os re+istros da ta'ela$ Isto no " 'om$ Iremos a!ui utili&ar o recurso de um formulrio de consulta onde o usurio escolher o nome do 'airro ou cidade em uma lista e o pro+rama se encarre+ar de +ra,ar o c3di+o correspondente$ )2$ Portanto adicione L frente dos D'Adit de 'airro e cidade um componente 2a'el$ (ltere o nome deles para 2'l%mBairro e 2'l%mCidade respecti,amente$ (ltere tam'"m os nomes dos D'AditMs para AdtCdBairro e AdtCdCidade$

Figura . / Configura,o do PageControl - Tab'heet

)5$ Copie para seu usurio se ,oc@ ainda no tem para a pasta do pro*eto o ar!ui,o chamado u.rmConsulta$pas e u.rmConsulta$dfm$ Astes so os ar!ui,os do nosso formulrio de consulta$ (p3s copia-los , ao menu Proje#t Add to Proje#t e adicione o formulrio !ue aca'ou de copiar$ )9$ Selecione os dois componentes D'Adit -AdtCdBairro e AdtCdCidade0$ (cesse a +uia A,ents do 4'*ect Inspector e selecione o e,ento 4nAnter$ Com um duplo cli!ue na parte 'ranca do mesmo crie o procedimento para o e,ento 4nAnter dos D'AditMs e escre,a o se+uinte c3di+o: BtnBuscar.Ena !"# $= Tru";$ )=$ Neali&e a mesma operao por"m a+ora para o e,ento 4nA8it dos D'AditMs e escre,a o se+uinte c3di+o: BtnBuscar.Ena !"# $= Fa!s";$ Astes c3di+os faro com !ue o 'oto 'uscar fi!ue ha'ilitado toda ,e& !ue !ual!uer um dos dois D'AditMs rece'er o foco$ A o mesmo 'oto ser desa'ilitado !uando nenhum dos dois D'AditMs esti,er com o foco$ )>$ (+ora ,amos confi+urar a ao do 'oto Buscar$ Primeiramente acesse a propriedade Ana'led do mesmo e altere-a para .alse$ Depois com um duplo cli!ue so're ele a'ra o procedimento de seu e,ento 4nClicK e escre,a o se+uinte c3di+o:
%r&c"#ur" ... 'ar R"t&rn&( S)!$ Str*n+; "+*n tr, *- E#tC#Ba*rr&.F&cus"# t."n "+*n S)! $= /SELECT CDBA0RRO( NMBA0RRO FROM BA0RRO WHERE 1=0/; Fr1C&nsu!ta $= TFr1C&nsu!ta.Cr"at"2S"!-3; R"t&rn& $= Fr1C&nsu!ta.C&nsu!tar2S)!( /Ba*rr&/( /Ta "!a Ba*rr&/3; *- R"t&rn& 45 // t."n "+*n *- n&t 26r,A!un&.Stat" *n 7#sE#*t( #s0ns"rt83 t."n 6r,A!un&.E#*t; 6r,A!un&CDBA0RRO.As0nt"+"r $= Fr1C&nsu!ta.6r,C&nsu!ta.F*"!#s708.As0nt"+"r; L !N1Ba*rr&.Ca%t*&n $= Fr1C&nsu!ta.6r,C&nsu!ta.F*"!#s718.AsStr*n+; "n#; "n# "!s" *- E#tC#C*#a#".F&cus"# t."n "+*n S)! $= /SELECT CDC0DADE( NMC0DADE FROM C0DADE WHERE 1=0/; Fr1C&nsu!ta $= TFr1C&nsu!ta.Cr"at"2S"!-3; R"t&rn& $= Fr1C&nsu!ta.C&nsu!tar2S)!( /C*#a#"/( /Ta "!a C*#a#"/3; *- R"t&rn& 45 // t."n "+*n *- n&t 26r,A!un&.Stat" *n 7#sE#*t( #s0ns"rt83 t."n 6r,A!un&.E#*t; 6r,A!un&CDC0DADE.As0nt"+"r $= Fr1C&nsu!ta.6r,C&nsu!ta.F*"!#s708.As0nt"+"r; L !N1C*#a#".Ca%t*&n $= Fr1C&nsu!ta.6r,C&nsu!ta.F*"!#s718.AsStr*n+; "n#; "n#;

(utor: ProfH Cludio Portes -profclaudioportesI+mail$com0 - 2 de =

-*na!!, Fr1C&nsu!ta.Fr""; "n#; "n#;

)?$ (+ora com um duplo cli!ue so're o componente 6r1(luno a'ra o editor de campos e selecione o campo CDB(INN4$ (tra,"s do 4'*ect Inspector crie o procedimento para o e,ento 4nOalidate deste campo e escre,a o se+uinte c3di+o -!ue ser e8plicado pelo professor0:
%r&c"#ur" ... 'ar 6r,C&ns$ T6u"r,; "+*n *- 6r,A!un&CDBA0RRO.0sNu!! t."n E9*t; 6r,C&ns $= T6u"r,.Cr"at"2s"!-3; :*t. 6r,C&ns #& "+*n Data as"Na1" $= 6r,A!un&.Data as"Na1"; S)!.T"9t $= /SELECT * FROM BA0RRO WHERE CDBA0RRO = / ; 6r,A!un&CDBA0RRO.AsStr*n+; O%"n; *- R"c&r#C&unt = 0 t."n "+*n S.&:M"ssa+"2/D"scu!%"( 1as "st" c<#*+& #" Ba*rr& n=& "9*st"/3; A &rt; "n# "!s" "+*n L !N1Ba*rr&.Ca%t*&n $= 6r,C&ns.F*"!#B,Na1"2/NMBA0RRO/3.AsStr*n+; "n#; "n#; "n#;

)C$ Nefaa o item *0 s3 !ue a+ora para o campo CdCidade$ )D$ Selecione o 6r1(luno e crie o procedimento do e,ento After'#roll e acrescente o se+uinte c3di+o:
6r,A!un&CDBA0RRO>a!*#at"2n*!3; 6r,A!un&CDC0DADE>a!*#at"2n*!3;

Isto far com !ue ao na,e+armos entre os re+istros a descrio do 'airro e da cidade se*a atuali&ada$ 6uando um formulrio fa& refer@ncia a outro -neste caso o formulrio de (luno fa& refer@ncia ao formulrio de Consulta0 ao compilar o c3di+o -.D0 uma mensa+em aparece na tela com as op;es Pes %o e Cancel$ %este caso a opo Pes de,e ser acionada$ Oe*a um e8emplo desta tela na fi+ura 5$

Figura 1 / Mensagem de informa,o 2ue a%are#e na #om%ila,o do %rograma

Regio Detalhe do Formulrio


2G$ 4 !ue ser feito a+ora " confi+urar a parte detalhe do formulrio ,isto !ue este formulrio " do tipo Master#Detalhe onde na parte superior cadastramos os alunos -ta'ela (luno0 e na parte inferior seus cursos -ta'ela (lunoCurso0$ 2)$ (crescente a'ai8o do Pa+eControl um componente EroupBo8$ (ltere sua propriedade (li+n para alClient e sua propriedade Caption para Cursos do Aluno$ 22$ (crescente a este EroupBo8 um componente :oolBar ou copie da parte superior do formulrio o outro :oolBar dei8ando apenas os !uatro primeiros 'ot;es e o na,i+ator$ Oe*a fi+ura 9 a'ai8o$ 25$ (crescente ao formulrio um componente 6uer1 um 7pdateS62 e um DataSource$ (ltere o nome do 6uer1 para r!AlunoCurso$ Confi+ure sua propriedade DataBase%ame$ (ltere sua propriedade S62 para:
SELECT A.*( C.NMCURSO FROM ALUNOCURSO A 0NNER ?O0N CURSO C ON 2A.CDCURSO = C.CDCURSO3 WHERE A.CDALUNO = $CDALUNO ORDER BY C.NMCURSO

(utor: ProfH Cludio Portes -profclaudioportesI+mail$com0 - 5 de =

4'ser,e !ue foi criado um parQmetro -:CD(27%40 para a 6uer1$ Aste parQmetro representa o campo CD(27%4 da ta'ela de aluno$ Ser atra,"s dele !ue iremos li+ar a ta'ela (lunoCurso com a ta'ela (luno$ 29$ Para isto cli!ue na retic@ncia da propriedade Params e a'ra o editor de parQmetros$ .eito isto selecione o parQmetro e8istente ali e mude para ftInteger a propriedade Data:1pe$ (ltere a propriedade DataSource da 6r1(lunoCurso para DtsAluno a fim de completar a cone8o entre (luno e (lunoCurso$ 2=$ Para confi+urar o 7pdateS62 de,emos tomar cuidado com o campo %mCurso pois o mesmo no pertence fisicamente a ta'ela de (lunoCurso$ Portanto selecione como cha,e da ta'ela os campos CD(27%4 e CDC7NS4 e como 7pdate .ields os mesmos campos dei8ando de fora em am'as as listas o campo %MC7NS4$ Figura 4 + Formulrio Aluno e seus Cursos 2>$ Confi+ure o componente DataSource e D'Erid de forma ade!uada$ 2?$ Com um duplo cli!ue so're o componente 6r1(lunoCurso a'ra seu editor de campos e carre+ue-o$ .aa o mesmo para o D'Erid$ (p3s carre+ar os campos no Db&rid e8clua o campo CD(27%4 pois o mesmo no de,e aparecer no +rid -(pa+e-o somente no D'Erid0$ 2C$ Para o e,ento 4nSho/ do formulrio acrescente as se+uintes linhas de c3di+o: 2D$ Nenomeie os 'ot;es da parte inferior com os se+uintes nomes: BtnDIncluir BtnDA8cluir BtnDAditar BtnDCancelar e BtnDEra,ar$ 5G$ (+ora ,amos fa&er com !ue os 'ot;es funcionem$ Com um duplo cli!ue em cada um deles crie a manipulao para o e,ento 4nclicK onde de,ero ser colocados os se+uintes c3di+os:
BtnDIncluir BtnDExcluir 6r,A!un&Curs&.A%%"n#; *- M"ssa+"B&92Han#!"( /E9c!u*r "st" curs&@/( /C&n-*r1aA=&/( MBBOCCANCEL ; MBBDEFBUTTON13 = *#OD t."n 6r,A!un&Curs&.D"!"t"; 6r,A!un&Curs&.Canc"!; 6r,A!un&Curs&.E&st; 6r,A!un&Curs&.C!&s"; 6r,A!un&Curs&.O%"n; 6r,A!un&.O%"n; 6r,A!un&Curs&.O%"n;

BtnDCancelar BtnDGravar

5)$ Como a cha,e primria da ta'ela (lunoCurso " composta pelo c3di+o do aluno e c3di+o do curso ao incluir um no,o curso para o aluno " necessrio incluir automaticamente o c3di+o do aluno ,isto !ue o c3di+o do curso ser fornecido pelo usurio$ Para isto inclua o se+uinte c3di+o no e,ento 4n%e/Necord da 6r1(lunoCurso:
6r,A!un&Curs&CDALUNO.As0nt"+"r $= 6r,A!un&CDALUNO.As0nt"+"r;

Dando mais #onsist3n#ia ao formulrio


4'ser,e !ue !uando o formulrio " a'erto os = -cinco0 primeiros 'ot;es ,@m todos ha'ilitados$ Isto no " correto pois se clicarmos no 'oto BtnEra,ar ocorrer um erro ,isto !ue a 6uer1 de aluno no se encontra no estado de edio ou incluso$ Oe*a os principais estados !ue um DataSet pode assumir na fi+ura 9$

Figura 4 + 5stados da Tabela

(utor: ProfH Cludio Portes -profclaudioportesI+mail$com0 - 9 de =

52$ Construa para o e,ento 4nStateChan+e do componente Dts(luno o c3di+o a'ai8o:


Btn0nc!u*r.Ena !"# $= 6r,A!un&.Stat" = #sBr&:s"; BtnE#*tar.Ena !"# $= 22Btn0nc!u*r.Ena !"#3 an# 26r,A!un&.R"c&r#C&unt 5 033; BtnE9c!u*r.Ena !"# $= 22Btn0nc!u*r.Ena !"#3 an# 26r,A!un&.R"c&r#C&unt 5 033; BtnCanc"!ar.Ena !"# $= n&t Btn0nc!u*r.Ena !"#; BtnFra'ar.Ena !"# $= n&t Btn0nc!u*r.Ena !"#; N'+Ca#astr&.Ena !"# $= Btn0nc!u*r.Ena !"#; T sCa#astr&.Ena !"# $= 6r,A!un&.Stat" *n 7#sE#*t( #s0ns"rt8;

55$ .aa o mesmo para o DtsAlunoCurso pois os 'ot;es da re+io detalhe funcionam da mesma forma$ 59$ 2o+o ap3s faa com !ue o e,ento (fterScroll do 6r1(luno chame o procedimento 4nStateChan+e do Dts(lunoCurso acrescentando o c3di+o: 5=$ .aa o c3di+o de ,alidao de cha,e primria duplicada tal como foi feito nos formulrios anteriores$
DtsA!un&Curs&Stat"C.an+"2n*!3;

(utor: ProfH Cludio Portes -profclaudioportesI+mail$com0 - = de =

Você também pode gostar