Microsoft Access: Lomakkeet - Luento 10
Tällä luennolla luodaan Microsoft Accessin avulla muutama lomake tietojen syöttämistä varten.
Luentotaltiointi
Ongelmia videon katselussa?Sarakkeet raporteissa
Normaalisti raporteissa jokaisesta tietueesta tulee uusi rivi. Jos ryhmiin liittyy useita tietueita, niin raportista saattaa tulla usean sivun mittainen. Kompakti raportti saavutetaan, kun pitkät rivilistat järjestetään sarakkeisiin:
- Luo raportti normaalisti
- Valitse raportin luomisen jälkeen File | Page Setup | Columns ja aseta sarakkeita tietty määrä ja anna niille leveys.
- Nyt rivien sijaan kaikki tietueet järjestyvät sarakkeille, mikä ei ole
tavoiteltavaa kaikissa tapauksisas. Mene
raportin design-tilaan View | Design View.
- Valitse ylempien ryhmittelytasojen Header-osille oikealla hiiren napilla Properties ja sieltä kohtaan New Col or Row arvo Before Section.
- Valitse vastaavasti Footer-osille arvo After Section.
- Jos Footer-osa ei ole käytössä, niin valitse Before & After
- Siirrä kaikkien osien sisällä olevat kentät vasempaan laitaan, koska sisennys voi viedä tekstin pois sarakkeesta.
Aliraportit
Sarakkeiden ongelmana on se, että kaikkien tietojen on mahduttava määrämittaiseen sarakkeeseen. Sarakkeistaminen on aina raporttikohtainen, joten otsikon kentän pituutta ei voi erikseen säätää. Täytyy siis tehdä kaksi raporttia ja yhdistää ne:
- Tehdään ensin aliraportti, jossa on sarakkeittain tulevat tiedot (esim. suutarin tapauksessa tavarat ja niiden ominaisuudet). Mukaan on otettava kenttä, joka yhdistää tietueen pääraporttiin (esim. Tyo_TyoID).
- Piilota aliraportista ID-kenttä napauttamalla oikealla ja valitsemalla Visible- ominaisuuteen arvo No.
- Luodaan pääraportti, jossa on vain otsikkotiedot (esim. kaikkien töiden tiedot). Lisää aliraportti raahamalla se Details-alueelle.
- Avaa tuodun aliraporttiobjektin ominaisuuslistasta Data-välilehti. Valitse Link Child Fields-kohtaan Tyo_TyoID ja Link Master Fields-kohtaan TyoID (aivan kuten kaavioidenkin kanssa).
- Tarkista vielä, että Details-alueen ja tuodun aliraportin ominaisuuksista, että Can Grow-ominaisuudessa on arvo Yes.
Lisämääritykset tauluihin
Ennen lomakkeiden luomista kannattaa varmistaa, että kaikki mahdollinen on määritelty suoraan taulujen ominaisuuksiksi.
Normaalien SQL-tasolla tehtyjen määritysten lisäksi Access osaa mm. seuraavat:
- Kentän esitysmuodon määrääminen esim. numeron muotoilu
- Syöttömaski jolla voidaan rajoittaa kenttään kelpuutettavia arvoja
Kenttien määrityksiin voi vaikuttaa valitsemalla Tables-kohdasta haluttu taulu ja oikealla napilla Design View. Napauta vielä kenttään ja muokkaa alareunassa olevia ominaisuuksia:
Field size | Kentän sisäinen tyyppi tai tekstin maksimipituus (VARCHAR(max)) |
---|---|
Format | Muotoilu, jota käytetään lomakkeilla (tiedon syötössä tai selailussa) |
Decimal Places | Desimaalien määrä lomakkeilla (ei tallennustarkkuus) |
Precision, Scale | Reaalinumeron tarkkuus: numeroiden määrä, desimaalien osuus numeroista |
New Values | Automaattisesti luotavan numeron luontitapa (COUNTER == Increment) |
Caption | Kentän otsikko, jota käytetään lomakkeilla (jos normaali otsikko ei ole sopiva) |
Indexed | Järjestetäänkö taulun tietueet tämän kentän mukaan (mm. hakujen nopeuttamiseksi)
|
Default Value | Oletusarvo |
Input Mask | Rajoitteet, minkä muotoinen syötettävän tekstitiedon pitää olla. |
Validation Rule | Matemaattinen funktio, joka rajoittaa millaisia numerotietoja hyväksytään. |
Validation Text | Virheilmoitus, jos syötetty tieto oli väärän muotoinen |
Required | Onko tieto pakko syöttää (Yes = NOT NULL, No = NULL) |
Allow Zero Length | Sallitaanko tyhjä (nollamittainen) kenttä (huom. NULL <> tyhjä arvo). |
Smart Tags | Määrämuotoiseen tekstiin voidaan liittää toimintoja (esim. jonkin palvelun tai ohjelman avaaminen) |
Unicode Compression, IME | Kansainvälisen merkkitiedon pakkaus, tiedonsyöttötavat aasialaisiin tapoihin |
Lookup
Microsoft Access osaa antaa suoraan oikeat syöttövaihtoehdot sopivasti säädetyille kentille. Hyvä käyttökohde on määritellä viitekentät näyttämään viitattavassa kentässä oleviin vaihtoehtoihin. Tällöin esimerkiksi tietoa syötettäessä voidaan valita sopiva kohde alasvetovalikon tekstivaihtoehdoista ID-numeron syöttämisen sijaan.
- Napauta taulun nimen päällä hiiren oikealla napilla ja valitse Design View
- Valitse kenttä joka toimii viiteavaimena (eli kenttä, joka viittaa toiseen tauluun)
- Valitse Lookup-välilehti
- Valitse Display Control -alasvetovalikosta Combo Box
- Valitse Row Source Type -kohtaan Table/Query
- Valitse Row Source -kohtaan taulu johon viite-eheys kohdistuu
- Bound Column kertoo monesko kenttä viitatussa taulussa sisältää sallitut arvot (annettava numerona)
- Column Count kertoo montako kenttää näytetään alasvetovalikossa (voidaan laittaa kenttien maksimäärä)
- Column Heads määrää näytetäänkö kentille otsikot vai ei
- Column Width kertoo kuinka paljon tilaa kullekin kentälle jätetään. Turhat kentät voi piilottaa määräämällä tilaksi nolla. Esim. 0cm;0cm;5cm
- List Rows kertoo montako riviä vaihtoehdoista näytetään kerrallaan
- List Width määrää alasvetovalikon leveyden
- Limit To List määrää sallitaanko myös sellaisia arvoja joita ei listasta löydy
Lomakkeet
Lomakkeiden luominen on erittäin helppoa lomakevelhon avulla
- Valitse Create Form by using Wizard
- Valitse haluamasi taulu ja sen kentät
- AutoNumber tms. avainkenttiä ei tarvitse ottaa lomakkeelle (koska tiedon syöttäjän ei tarvitse välittää tietokannan sisäisestä toiminnasta)
- Valitse lomakkeen muoto. Järkevät vaihtoehdot ovat:
- Tabular (näytetään yksi tietue kerrallaan, sopii esim. henkilötietoihin)
- Columnar (näytetään sarakemuodossa kaikki tietueet kerrallaan, sopii esim. tyyppien nimien syöttöön)
- Valitse lomakkeen ulkoasu
- Keksi lomakkeelle nimi
Luo lomake jokaista taulua varten. Lomakkeen muotoiluja voidaan säätää lomakkeen Design View-tilassa. Taulujen välisiä yhteyksiä voidaan tehdä Toolbox-työkalupalkista löytyvällä Command Button-painikkeella. Näin voidaan tehdä pieni käyttöliittymä.
Alilomakkeet
Halutaan lomake, jossa voitaisiin samalla kerralla syöttää esimerkiksi yhden henkilön tiedot (Henkilo-taulu) ja henkilöön liittyvät puhelinnumerot.
- Luodaan kaksi lomaketta Henkilo- ja Puhelinnumero-taulujen pohjalta. Henkilo-lomake voi olla Tabular-tyyppinen, Puhelinnumerot Columnar-tyyppinen.
- Avataan Henkilo-lomake ja lisätään Puhelinnumerot alilomakkeeksi Toolbox-valikon Subform/Subreport-työkalulla. Maalataan alue, johon alilomake tulee.
- Valitaan valmis lomake, jossa on puhelinnumerot. Valitaan kytkentä kahden taulun välillä AsiakasID-viite-eheysmäärityksen pohjalta.
- Testaan Form View-tilassa. Nyt pitäisi näkyä vain tiettyyn henkilöön liittyvät puhelinnumerot.
- Napauttamalla SubFormin sisälle vasempaan yläkulmaan saadan valituksi itse lomake. Tämän ominaisuuksia voidaan muuttaa properties-ikkunasta. Voidaan poistaa esimerkiksi näkyvistä Record Selectors, Navigation Buttons ja Dividing Lines, jolloin saadaan hieman kompaktimpi alilomake.
Dynaaminen raportti lomakkeella
Dynaaminen raportti perustuu kyselyyn, jossa jokin tieto tulee lomakkeelta. Suutari saattaisi haluta esimerkiksi tietää juuri katselun alla olevaan työtehtävään liittyvät tavarat ja niiden ominaisuudet tai kyseisessä työtehtävässä jo suoritetut vaiheet.
- Luodaan kysely, jossa on raporttiin haluttavat tiedot. Aluksi raportissa voi olla kaikki tiedot, esim. kaikki tavarat ja niihin liittyvät ominaisuudet:
SELECT LapunNro, Arvo, OminaisuusNimi FROM Tavara, Kuvaillaan, Ominaisuus WHERE Kuvaillaan.Tavara_LapunNro=Tavara.LapunNro And Kuvaillaan.Ominaisuus_OminaisuusID=Ominaisuus.OminaisuusID
- Luodaan raportti tämän kyselyn pohjalta. Esimerkissä voidaan tehdä ryhmittely LapunNron mukaan. Testataan raporttia, missä pitäisi näkyä kaikki tavarat ja näihin liittyvät ominaisuudet.
- Luodaan Tyo-lomake velhon avulla. Otetaan mukaan kaikki normaalit ominaisuudet ja lisäksi TyoID. Avataan Tyo-lomake Design-tilassa, poistetaan TyoID-otsikko ja piilotetaan TyoID-tekstilaatikko. Piilotus onnistuu Properties-ikkunan Visible-ominaisuuden arvoa muuttamalla.
- Lisätään työlomakkeelle CommandButton, joka avaa äskettäin tehdyn raportin Preview-tilaan. Kokeillaan nappia ja raportin pitäisi näyttää edelleen kaikkia tavaroita.
- Tarkista, mikä on TyoID-tekstilaatikon nimi. Tieto löytyy Properties-ikkunan kohdasta Name (yleensä se on sama kuin kentän nimi eli tässä tapauksessa TyoID). Muokataan nyt kyselyä, johon raportti pohjautuu. Avaa Queries-välilehdeltä raportti Design-tilaan ja valitse SQL View, ellei se ole jo päällä. Rajoitetaan näytettäviä tavaroita lomakkeen TyoID-tekstilaatikosta saatavan tiedon perusteella:
SELECT LapunNro, Arvo, OminaisuusNimi FROM Tavara, Kuvaillaan, Ominaisuus WHERE Kuvaillaan.Tavara_LapunNro=Tavara.LapunNro And Kuvaillaan.Ominaisuus_OminaisuusID=Ominaisuus.OminaisuusID AND Tavara.Tyo_TyoID = [Forms]![Tyo]![TyoID];
- Nyt napin painallus antaa vain tiettyyn työhön liittyvät tavarat.
Suutari-esimerkissä työlomakkeelle voidaan tehdä samalla periaatteella myös toinen nappula, joka avaa kirjatut työvaiheet. Aluksi kyselyyn tarvitsee ottaa vain Tehdaan- ja Tyovaihe-tauluista saadut Pvm- ja Kuvaus-ominaisuudet.
Lisätietoa: Omat kontrollit
Halutaan tehdä työlomakkeelle alasvetovalikko, jossa näkyy työhön liittyvät tavarat. Valikosta voidaan ottaa yksi tavara ja näyttää raportti, jossa kerrotaan valitun tavaran ominaisuudet.
- Lisätään Combobox Tyo-lomakkeelle Toolbox-valikosta. Otetaan tiedot taulusta Tavara ja sieltä tieto LapunNro.
- Nyt kytkentä työhön ei vielä toimi, joten muutetaan comboboxin ominaisuuksia. Kohdasta Data | Row Source löytyy tieto
kyselystä, joka hakee comboboxin vaihtoehdot. Lisätään siihen WHERE-ehto:
SELECT Tavara.LapunNro FROM Tavara WHERE Tavara.Tyo_TyoID = [Forms]![Tyo]![TyoID] ORDER BY [LapunNro];
- Huom! Toinen vaihtoehto olisi ollut tehdä kysely, jossa tämä rajoite on huomioitu (ks. edellinen esimerkki)
- Nyt ongelma on se, että comboboxin tiedot eivät päivity, kun vaihdamme
työtä toiseksi lomakkeella. Selvitetään ensin, mikä on Comboboxin nimi (Name-ominaisuus). Valitaan lomakkeelta tyhjä kohta ja sen ominaisuudet, jolloin pääsemme muokkaamaan lomakkeeseen liittyviä tietoja.
Lisätään tapahtumankäsittelijä lomakkeen päivitystapahtumille Event-valikon OnCurrent-kohdasta. Tätä varten joudumme kirjoittamaan muutaman
rivin Visual Basic-koodia, joten valitse Code Builder:
Private Sub Form_Current() ' ajetaan kysely uudelleen eli comboxiin saadaa uudet valintavaihtoehdot Comboboxinnimi.Requery ' asetetaan ensimmäinen vaihtoehto valituksi (Itemdata voi olla myös tyhjä) Comboboxinnimi.Value = Comboboxinnimi.ItemData(0) End Sub
- Lisätään kysely, joka hakee kaikki ominaisuudet ja niiden arvot Kuvaillaan- ja Ominaisuus-tauluista. Luodaan tämän pohjalta raportti.
- Tehdään lomakkeelle CommandButton, joka avaa raportin.
- Lisätään kyselyyn ehto, joka rajoittaa ominaisuudet vain lomakkeelta löytyvään comboboxissa olevaan LapunNro-tietoon:
SELECT Arvo, OminaisuusNimi FROM Kuvaillaan, Ominaisuus WHERE Kuvaillaan.Ominaisuus_OminaisuusID=Ominaisuus.OminaisuusID AND Forms!Tyo!Comboboxinnimi = Kuvaillaan.Tavara_LapunNro;
Käyttäjien kommentit