Professional Documents
Culture Documents
O componente Query um componente dataset, assim como o Table, especializado em conexes com tabelas. A diferena entre eles est na forma como acessam as informaes. O Table liga se diretamente a uma !nica tabela, atra"s da propriedade TableName. O Query faz suas ligaes atra"s da linguagem #Q$, o %ue l&e possibilita o acesso a "rias tabelas. O Query tambm possui mtodos mais eficientes de acesso aos recursos do ser"idor do %ue o Table. Alm de fazer uso de uma linguagem mais eficiente, permite o ser"idor processar re%uisies mais rapidamente e com menos trfego de rede. Os exemplos conduzidos por este material ser'o baseados em um banco de dados Access contendo duas tabelas( )roduto e *ategoria. As mesmas usadas no material +Uso do Componente ADOConnection,. -ostraremos no"amente o modelo e as especificaes de tabelas a seguir(
10
Cha e
Tamanho &'
(al e a ta)ela com o nome *Cate!oria+, A)ra a ta)ela Cate!oria no modo dados e informe os se!uintes alores para a coluna descricao- Limpe.a/ Alimenta"#o/ 0estu1rio e Be)idas, Para sal ar um re!istro/ )asta pressionar seta para )ai%o ou para cima, O)ser e 2ue o codi!o da Cate!oria inserido automaticamente assim 2ue o re!istro sal o, b) Criao da Tabela Prod !o (elecione a op"#o Criar $a)ela no 3odo Estrutura e informe os se!uintes dados na 4anelaNome do campo codi!o nome esto2ue em)ala!em fr1!il Ori!em 0alor codCat Tipo de dados Autonumera"#o $e%to Inteiro $e%to $e%to $e%to 3oeda Inteiro Lon!o 5' 5 6 75 Tamanho 10
Cha e
(al e a ta)ela com o nome *Produto+ 2) Criando o Projeto CadProdutos Entre no Delphi/ selecione 8ile (a e All e sal e a unit como uProduto na pasta ConsProduto e em se!uida o pro4eto/ como PConsProduto, Altere as se!uintes propriedades do formul1rio9 Name: 8consProduto 9 Caption : Cadastro de Produtos 9 Position:po(creenCenter,
3) Definindo o Mdulo de Dados Para criar o m;dulo de dados/ acesse a op"#o 8ile Ne< Data 3odule, (al e a unit como *UD3+, Em se!uida/ altere o nome do Datamodule =propriedade name> para D3, a) ADOConec!ion Insira um componente ADOConnec!ion =paleta ADO> no data module e altere as se!uintes propriedades
ConnectionString: (elecione a propriedade ConnectionString e cli2ue nas retic?ncias, Na 4anela 2ue se a)rir1/ erifi2ue se a op"#o *Use Connection (trin!+ est1 marcada e cli2ue no )ot#o Build para a)rir a 4anela *Propriedade de 0incula"#o de dados+, Na orelha Pro edor/ selecione o driver *3icrosoft @et &,' OLE DB Provider+ e cli2ue em a an"ar, Na a)a Cone%#o cli2ue nas retic?ncias do item 6 e selecione o )anco de dados =consprod,md)> 2ue ser1 acessado e cli2ue em OA,
Loginprompt( .alse 6inibe a 5anela de sen&a do banco de dados7 Name( A3O*ons)rod 6padr'o A3O 8 nome9do9programa7 Connected( True
10
b) AD !uer"
:nsira um componente AD !uer" 6paleta A3O7 e altere as seguintes propriedades
; Connection( ; Name(
Qr)rod
c) Datasource
:nsira um componente Datasource 6paleta 3ata Access7 e altere as seguintes propriedades
; Dataset( ; Name(
3s*ons)rod
d) AD Table
:nsira um componente AdoTable 6paleta A3O7 e altere as seguintes propriedades
; Connection( ; Name(
T2*at *ategoria
; Tablename( ; Active(
True
e) Datasource
:nsira um componente Datasource 6paleta 3ata Access7 e altere as seguintes propriedades
; Dataset( ; Name(
T2*at<
3s*at
10
Exemplo 1
a> $orne o formul1rio 8consProd ati o, Em se!uida/ fa"a-o usar a unit do data module entrando na op"#o 8ile Use Unit e selecionando UdmB )> insira componente DB"rid =Data Controls> e altere a propriedade Datasource para D3,DsConsProd =nome do datasource li!ado ao 2uerC> c> insira um )ot#o no formul1rio/ altere seu Caption para *0er todos+ e acrescente o se!uinte c;di!o no seu e ento OnClicADM.QrProd.Close; // fecha o query DM.QrProd.SQL.Clear; // apaga contedo da propriedade Sql // adiciona o comando SQL DM.QrProd.SQL. dd!"S#L#C$ % &'(M produto"); DM.QrProd.(pen; // e*ecuta o query
Como oc? pDde perce)er/ o ADO2uerC semelhante ao componente ADOta)le no 2ue di. respeito E cone%#o com os componentes de acesso/ pois am)os s#o datasets, Entretanto/ todo ADO2uerC por padr#o retorna um resultset n#o edit1 el,
10
Para e%emplificar/ iremos construir uma consulta 2ue selecione todos os produtos 2ue possuem uma determinada ori!em, Ao erificarmos os re!istros da ta)ela Produto/ emos 2ue a coluna *OIILE3+ pode assumir os se!uintes alores- (#o Paulo e Belo Hori.onte, Baseado nisso/ iremos inserir um componente de sele"#o na interface 2ue permita a escolha da ori!em, a) Insira um label no form e altere seu Caption para Origem; b) insira um Combobox (paleta Standard) e altere as seguintes propriedades:
Name: Items:
Nos comandos acima/ emos linhas semelhantes Es do e%emplo anterior, As mudan"as ficam por conta das duas linhas 2ue fa.em a inclus#o e da passa!em de um parKmetro, A inclus#o determinada pela linha .. dd!8 +,#'# funcao - .origem9);: onde ori#em o parKmetro, ParKmetros de em ser imediatamente precedidos pelo caractere dois pontos, E a passa!em do
parKmetro feita na linha Parameters.Param4y5ame!"origem").6alue .- C7(rigem.$e*t: onde o parKmetro rece)er1 o te%to da op"#o selecionada no com)o)o%, A anta!em da utili.a"#o de parKmetros 2ue a cada consulta reali.ada/ pode-se trocar o alor do parKmetro informado e o)ter resultados diferentes,
10
=ota se %ue o c>digo do e"ento contm uma parte repetiti"a representada pelo nome da %uery 63-.Qr)rod7. ? poss@"el utilizar o comando #it$ do 3elp&i para e"itar ter %ue escre"er seu nome em todas as lin&as. Obser"e o mesmo c>digo escrito com aux@lio do comando Ait&(
;ith DM.QrProd do 4egin Close; SQL.Clear; SQL. dd!" S#L#C$ % &'(M produto "); SQL. dd!" +,#'# origem - .origem"); Parameters.Param4y5ame!"origem").6alue .- C7(rigem.$e*t; (pen; end;
a) Insira um label no form e altere seu Caption para Categoria; b) insira um +b,oo*upCombobox (paleta +ata Controls) e altere as seguintes propriedades:
Name:
Depois de ter a4ustado essas propriedades/ erifi2ue se a seta para )ai%o do componente D)LooAupCom)o)o% ficou ha)ilitada, (e n#o esti er/ confira se a propriedade Acti e do ta)le D3,$)Cat est1 true, N#o altere as propriedades Datasource e Datafield do componente, Estas s; podem conter alor se a interface for de entrada de dados, Escre a o se!uinte c;di!o no e ento OnClicA do D)LooAupCom)o)o%
with DM.QrProd do begin Close; SQL.Clear; SQL.Add(' SELECT * F !M "rod#to '$; SQL.Add(' %&E E 'od'at ( )'at'$; Para*eters.Para*+,-a*e(''at'$..al#e )( DM.T+'at.Field+,-a*e('Codigo'$..al#e; !"en; end;
10
Podemos er no c;di!o acima 2ue o critrio de sele"#o a!ora determinado pelo campo codCat 2ue contm o c;di!o da cate!oria do produto, Como o D)looAup aponta diretamente para a ta)ela Cate!oria =determinado pela sua propriedade Listsource>/ passamos o pr;prio alor do o)4eto field =codi!o> para o parKmetro *cat+ na linha Parameters.Param4y5ame!"cat").6alue .DM.$4cat.&ield4y5ame!"Codigo").6alue;
10
a) Insira um groupbox (paleta Standard) no form e altere seu Caption para $ar2metros op ionais; b) insira um label e altere seu aption para 3ome. 4di ione tamb5m um (dit e altere: Name: (d3ome Text: deixe em bran o ) insira um label e altere seu aption para fragil. Insira um 6adiobutton altere seu nome para 6bnao e seu Caption para 3#o. Insira um segundo 6adiobutton ao lado do primeiro e altere seu nome para 6bSim e seu Caption para Sim d) insira um +b,oo*upCombobox (paleta +ata Controls) e altere as seguintes propriedades: Name: +blCat (para distinguir do outro +blCategoria 7ue est8 na tela) Listsource: +-.+sCat Listfield: des ri ao Keyfield: odigo e) insira um label e altere o Caption para $re9o (:7ue). 4di ione tamb5m um (dit e altere: Name : (d;alor Text: deixe em bran o. f) insira um %utton e altere o Caption para $es7uisar
10
,ogo no in< io= foi a res entado o )digo >&(6( 1?1 no S@,. (ssa ondi9#o foi olo ada om uma Ani a finalidade: riar uma l8usula B"ere fixa para o sele t. Isso e!ita repetidos testes para !erifi ar se o mesmo possui l8usula B"ere antes de adi ionar ada um dos filtros. O)ser e 2ue para cada teste reali.ado/ inserido um trecho referente ao filtro dese4ado atra s do comando (JL,add=> se!uido da respecti a passa!em de parKmetro, Isso permite 2ue o operador tenha uma total fle%i)ilidade na escolha dos parKmetros da tela, N possM el passar alores fi%os tam)m/ como est1 sendo feito no caso do campo fr1!il, No caso especMfico do filtro do campo nome/ o recurso de passa!em de parKmetros do Delphi n#o suporta a delimita"#o dos corin!as da cl1usula LIOE =caractere *P+> no pr;prio comando/ tendo 2ue ser passados na monta!em do parKmetro/ como pode ser erificado na linha Parameters.Param4y5ame!"nome").6alue ."<"=#d5ome.$e*t="<";
10
") insira um %utton e altere o Caption para 3o!a Consulta. +igite o seguinte tre "o para e!ento OnCli *
#d5ome.Clear; #d6alor.Clear; D7lCat.>ey3alue .- /?; '7S.Chec@ed .- false; '75.Chec@ed .- false;