DOMU DOMU

Titulky
Progr.jazyky
Databßze
Inter/Intranet
COM
SystΘm(novΘ)
VS 6.0 (novΘ)

Katalog odkaz∙

  • Databßze
  • Internet / Intranet
  • Komponenty
  • Progr. jazyky
  • Win32

    Reklama





  • Aktußlnφ Φlßnky

    Formßtovanie ADODB.Recordset do HTML tabu╛ky

    Sformßtovanie v²sledkov databßzovej po₧iadavky (query) do podoby HTML tabu╛ky je najΦastejÜφm prφkladom vo vÜetk²ch ASP/ADO prφruΦkßch. My sa pok·sime prφklad trocha rozÜφri¥ a ukßza¥ ako si uÜetri¥ kopec duplicitnej roboty.

    Majme Ütandardn· databßzku pubs, dodßvan· ako sampel s MS SQL SQL 6.5. Z nej si vyberieme tabu╛ku authors s nasledovnou Ütrukt·rou:

    data\1999\6\img\166881.GIF (8011 bytes)

    "ètandard²" sp⌠sob v²pisu vÜetk²ch zßznamov by bol asi nasledovn² (select * from authors):

      
          do while not rs.EOF 'iteracia po riadkoch
          Response.Write rs("au_id")
          Response.Write rs("au_lname")
          Response.Write rs("au_fname")
    	.....
    	
        next
        rs.moveNext
        Response.Write ""
      loop

    Povedzme ₧e ste pou₧ili popφsan² k≤d. Ak by ste teraz chceli zmeni¥ query museli by ste zmeni¥ aj nßzvy a poΦet vypisovan²ch stσpcov v k≤de. Naprφklad ak chcete len au_lname, musφte vyhodi¥ dva riadky :

          Response.Write rs("au_id")
          Response.Write rs("au_fname")

    Pok·sme sa vybra¥ z naÜej tabu╛ky vÜetky zßznamy a zobrazi¥ ich ako HTML tabu╛ku, trocha vÜeobecnejÜie:
    NepodstatnΘ (formßtovacie) Φasti k≤du s· ÜedΘ.

    'priklad1
    sqlCommandString="select * from authors" 
    
    ' Connection a Recordset objekty
    Set dc=Server.CreateObject("ADODB.Connection")
    Set rs=Server.CreateObject("ADODB.Recordset")
    
    ' vytvorenie spojenia a otvorenie recordset objektu
    dc.Open "DSN=pubs;UID=sa;PWD="
    rs.Open sqlCommandString,dc,1,3
    
    ' ak neexistuje ziaden zaznam v tabulke
    if rs.EOF and rs.BOF Then
      ' vypis chybovu hlasku
      Response.Write "" 
    
    ' ak existuje nejaky zaznam
    else
      Response.Write "
    " ' napis hlavicku tabulky z menami stlpcov Response.Write "
    " ' iteracia cez vsetky stlpce v tabulke for each field in RS.Fields Response.Write " " ' vypis nazov stlpca Response.Write field.Name Response.Write " " next Response.Write "
    " ' tu je koniec hlavicky a zaciname vypisovat ' "obsah" vsetkych riadkov tabulky do while not rs.EOF 'iteracia po riadkoch Response.Write "
    " for i=0 to RS.Fields.Count-1 'iteracia po stlpcoch Response.Write " " ' vypis obsah(hodnotu) Response.Write rs(i) Response.Write " " next rs.moveNext Response.Write "
    " loop Response.Write "
    "
    end if
    

    V²sledok vyzerß nasledovne:

    au_id au_lname au_fname phone address city state zip contract
    172-32-1176 White Johnson 408 496-7223 10932 Bigge Rd. Menlo Park CA 94025 True
    213-46-8915 Green Marjorie 415 986-7020 309 63rd St. #411 Oakland CA 94618 True
    238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley CA 94705 True
    267-41-2394 O'Leary Michael 408 286-2428 22 Cleveland Av. #14 San Jose CA 95128 True
    274-80-9391 Straight Dean 415 834-2919 5420 College Av. Oakland CA 94609 True
    341-22-1782 Smith Meander 913 843-0462 10 Mississippi Dr. Lawrence KS 66044 False
    409-56-7008 Bennet Abraham 415 658-9932 6223 Bateman St. Berkeley CA 94705 True
    427-17-2319 Dull Ann 415 836-7128 3410 Blonde St. Palo Alto CA 94301 True

    Zme≥me teraz iba prv² riadok prφkladu, naÜu databßzov· query:

       sqlCommandString="select au_lname,phone from authors"

    V²sledok, bez akΘhoko╛vek dopisovania alebo vymazßvania riadkov bude tak²to:

    data\1999\6\img\166882.GIF (3154 bytes)

    K╛·Φov²m prvkom v naÜom prφklade je collection Recordset.Fields . Tßto collection reprezentuje stσpce v tabu╛ke. Ka₧d² stσpec, prvok tejto collection, je objektom typu Field. Tento objekt obsahuje podrobnΘ informßcie o mene, ve╛kosti a dßtovom type stσpca. My sme v prφklade vyu₧ili iba meno (field.Name).Pomocou takto "dynamicky" zφskan²ch mien stσpcov sme vyrobili hlaviΦku (pozri k≤d).
    Fields collection sme pou₧ili aj pri samotnom vypisovanφ jednotliv²ch riadkov tabu╛ky (pozri k≤d).

    No a na zßver eÜte prφklad ako premenova¥ "ÜkaredΘ nßzvy" z datovΘho modelu na peknΘ nßzvy v HTML strßnke. StaΦφ ak zmenφte naÜu query takto:

      sqlCommandString="select 'Priezvisko'=au_lname,'Telef≤n'=phone from authors" 

    a mßte v HTML strßnke miesto au_lname napφsanΘ Priezvisko a miest phone, Telef≤n. Samozrejme, ₧e query m⌠₧ete zmeni¥ na ak·ko╛vek in· tabu╛ku, prφpadne vymeni¥ za volanie stored proced·ry alebo view.

    Nabud·ce: sa mo₧no pozrieme ako pomocou Fileds collection vygenerova¥ dynamicky formulßr na pridßvanie a editßciu ·dajov v SQL tabu╛kßch.

    ╚lßnek nßm poslal marcus@gratex.sk

    Michal Blßha (SPRINX)
    blaha@sprinx.cz
    16.6.1999


    (c) 1998 SPRINX s.r.o. a auto°i Φlßnk∙.
    redakce@developer.cz