71
Innføring i databaser 1096 - Lars Marius Garshol 2 1. Hensikten med kurset 1.1 Hva er Microsoft Access? Som det står på manualer og disketter er Access en “relasjonsdatabase for Windows”. Det sier kanskje ikke de fleste så veldig mye, men det det egentlig betyr er at Access er en spesiell form for utviklingsverktøy. Access er altså ikke et program som kan brukes til noe nyttig direkte, slik som tekstbehandlere, regneark og annet. Det man gjør med Access er å lage nyttige programmer. 1.2 Hva er et dataprogram? Ifølge Aschehoug og Gyldendals Store Norske Leksikon er det noe som “foreskriver i detalj de operasjoner som skal foretas av maskinen, og forutsettes utført i alt vesentlig uten menneskelig inngripen underveis”. Det er forsåvidt korrekt, men kanskje ikke så veldig opplysende. Poenget er at en datamaskin kan brukes til svært mye forskjellig, forutsatt at man har et program som forteller maskinen hvordan det skal gjøres. Uten programmer får man ikke gjort noe som helst på maskinen, fordi den ikke vet hva den skal gjøre. Alle programmer består av enkle instruksjoner som datamaskinen utfører en for en. Så uansett hva slags programmer du vil lage må de til syvende og sist oversettes til slike instruksjoner. 1.3 Forskjellige typer dataprogrammer Her har jeg bare nevnt de viktigste og vanligste typene dataprogrammer. Det finnes utallige andre typer, men dette er de som er mest brukt i kontorsammenheng. Tekstbehandlere Dette er programmer som lar deg skrive brev, rapporter, bøker, skjemaer og mye annet. Typiske eksempler: MS Word, AmiPro, WordStar, Emacs, WordPerfect. Regneark Programmer som først og fremst er ment brukt til beregninger, for eksempel matematiske modeller, regnskap og lignende. De har etterhvert blitt mer avanserte, og man kan lage enkle databaser i dem. Eksempler: MS Excel, Quattro, Lotus 1-2-3, SuperCalc. Tegneprogrammer/bildebehandlere Her er det mange varianter, men alle går ut på å lage bilder og diagrammer i forskjellige varianter. Eksempler: CorelDraw, Micrografx Designer, Adobe Illustrator, QuarkXpress og PhotoShop. Databaseverktøy Dette er, som nevnt ovenfor, programmer du kan bruke til å utvikle andre programmer. De finnes i mange forskjellige typer, som vi gjennomgår senere. Felles for dem er at de bare kan

1. Hensikten med kurset · Beskjeder som "velg Vis | Skjemadesign" betyr velg valget Skjemadesign i Vis-menyen. Innføring i databaser 1096 - Lars Marius Garshol 4 1.6 Kommentarer

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Innføring i databaser

1096 - Lars Marius Garshol 2

1. Hensikten med kurset

1.1 Hva er Microsoft Access?

Som det står på manualer og disketter er Access en “relasjonsdatabase for Windows”. Det sierkanskje ikke de fleste så veldig mye, men det det egentlig betyr er at Access er en spesiell formfor utviklingsverktøy. Access er altså ikke et program som kan brukes til noe nyttig direkte,slik som tekstbehandlere, regneark og annet. Det man gjør med Access er å lage nyttigeprogrammer.

1.2 Hva er et dataprogram?

Ifølge Aschehoug og Gyldendals Store Norske Leksikon er det noe som “foreskriver i detalj deoperasjoner som skal foretas av maskinen, og forutsettes utført i alt vesentlig uten menneskeliginngripen underveis”. Det er forsåvidt korrekt, men kanskje ikke så veldig opplysende.

Poenget er at en datamaskin kan brukes til svært mye forskjellig, forutsatt at man har etprogram som forteller maskinen hvordan det skal gjøres. Uten programmer får man ikke gjortnoe som helst på maskinen, fordi den ikke vet hva den skal gjøre. Alle programmer består avenkle instruksjoner som datamaskinen utfører en for en. Så uansett hva slags programmer duvil lage må de til syvende og sist oversettes til slike instruksjoner.

1.3 Forskjellige typer dataprogrammer

Her har jeg bare nevnt de viktigste og vanligste typene dataprogrammer. Det finnes utalligeandre typer, men dette er de som er mest brukt i kontorsammenheng.

• Tekstbehandlere Dette er programmer som lar deg skrive brev, rapporter, bøker, skjemaer og mye annet.

Typiske eksempler: MS Word, AmiPro, WordStar, Emacs, WordPerfect.

• Regneark Programmer som først og fremst er ment brukt til beregninger, for eksempel matematiske

modeller, regnskap og lignende. De har etterhvert blitt mer avanserte, og man kan lageenkle databaser i dem. Eksempler: MS Excel, Quattro, Lotus 1-2-3, SuperCalc.

• Tegneprogrammer/bildebehandlere Her er det mange varianter, men alle går ut på å lage bilder og diagrammer i forskjellige

varianter. Eksempler: CorelDraw, Micrografx Designer, Adobe Illustrator, QuarkXpress ogPhotoShop.

• Databaseverktøy Dette er, som nevnt ovenfor, programmer du kan bruke til å utvikle andre programmer. De

finnes i mange forskjellige typer, som vi gjennomgår senere. Felles for dem er at de bare kan

Innføring i databaser

1096 - Lars Marius Garshol 3

lage arkivsystemer: dvs programmer som lagrer store datamengder, og kan utføre søk idisse og trekke statistikk ut av dataene. Eksempler: MS Access, DataEase, dBase III,FoxPro, Clipper, SyBase, Ingres, Oracle, FileMaker Pro, PowerBuilder, Paradox og mangeflere.

• Spesialutviklede systemer Dette er programmer som er spesialutviklet for et bestemt, snevert formål. Ofte er de

spesiallaget for en bestemt bedrift. Typiske eksempler er utlånsregister for bibliotek,AGR/Us soldatdatabase, lagersystemer. Siden programmene er beregnet for merspesialiserte formål har de sjelden særlig stor utbredelse.

Så er spørsmålet: hvilke av disse typene programmer kan vi lage med MS Access? Svaret er:bare den siste typen. Vi kan lage alle mulige former for arkivsystemer, men ikke så veldig myeannet.

Grunnen til at bedrift (eller en enkeltperson) kan ønske å gjøre dette er enkel. Man vil hadatamaskinen til å hjelpe en med å utføre en (eller flere) oppgaver, men kan ikke finne etprogram som er passende. Løsningen er da enkel, man lager et selv.

Det er dette dere skal lære på dette kurset: Hvordan utvikle enkle arkivsystemer ved hjelp avMS Access. Tanken er at dere også skal ha så god forståelse av relasjonsdatabaser generelt atdere lett kan lære dere andre slike systemer på egenhånd

1.4 Hvordan bruke kursheftet

Hensikten fra min side med dette kursheftet er at det skal kunne utfylle undervisningen i timeneslik at dere kan gå tilbake og lese på ting dere ikke fikk med dere i timene. Det er ogsåhensikten at dere skal ha noe dere kan ta med dere videre og bruke senere. Derfor kan detlønne seg å notere i heftet.

I avsnitt 14.1 er det en ordliste som kan være grei å ha når du møter uttrykk i teksten som duikke kjenner.

Å lese før timene anbefales. Det er ikke nødvendig å forstå alt på forhånd, men det kan værelurt å ha sett over det.

Når du jobber med oppgaver vil jeg anbefale at du bruker heftet til å slå opp i når det er ting duer usikker på. Tommelfingerreglene er ment å brukes til å hjelpe deg når du løser oppgaver.

1.5 Konvensjoner

Tastetrykk skrives i dette heftet som f.eks. Alt+F4, som betyr: hold nede Alt mens du trykkerF4.

Beskjeder som "velg Vis | Skjemadesign" betyr velg valget Skjemadesign i Vis-menyen.

Innføring i databaser

1096 - Lars Marius Garshol 4

1.6 Kommentarer

Dette kursheftet er på ingen måte perfekt, ei heller kursopplegget. Jeg tar derfor gjerne imotbåde kritikk og forslag om forbedringer og endringer.

Innføring i databaser

1096 - Lars Marius Garshol 5

Innholdsfortegnelse

1. HENSIKTEN MED KURSET ..................................................................................................... 2

1.1 HVA ER MICROSOFT ACCESS?........................................................................................................ 21.2 HVA ER ET DATAPROGRAM?........................................................................................................... 21.3 FORSKJELLIGE TYPER DATAPROGRAMMER...................................................................................... 21.4 HVORDAN BRUKE KURSHEFTET...................................................................................................... 31.5 KONVENSJONER............................................................................................................................ 31.6 KOMMENTARER............................................................................................................................ 4

2. PROGRAMUTVIKLING............................................................................................................8

2.1 ET PROGRAMS LIVSSYKLUS............................................................................................................ 82.2 ET PROGRAMS EGENSKAPER..........................................................................................................102.3 PROGRAMUTVIKLINGSVERKTØY....................................................................................................102.4 GODT DESIGN..............................................................................................................................11

3. OVERGANGEN FRA IDÉ TIL DATABASE............................................................................12

3.1 HVA ER EN DATABASE? OM STRUKTURERING AV INFORMASJON......................................................123.2 DATAMODELLERING.....................................................................................................................123.3 ET ENKELT SPESIFIKASJONSSPRÅK: ER-LIGHT................................................................................133.4 FORHOLD.....................................................................................................................................143.5 HVORDAN LAGE EN DATAMODELL .................................................................................................143.6 TOMMELFINGERREGLER FOR DATAMODELLERING..........................................................................16

4. RELASJONSDATABASER.......................................................................................................18

4.1 OPPBYGNINGEN AV EN RELASJONSDATABASE.................................................................................184.2 FLERE TABELLER - RELASJONER....................................................................................................184.3 NORMALISERING..........................................................................................................................194.4 TOMMELFINGERREGLER FOR NORMALISERING...............................................................................204.5 SPØRRINGER, SKJEMAER OG RAPPORTER........................................................................................204.6 OPPBYGNINGEN AV DATABASER....................................................................................................204.7 REFERANSEINTEGRITET................................................................................................................214.8 SQL OG BASIC...........................................................................................................................21

5. ACCESS’ OPPBYGNING OG VIRKEMÅTE ..........................................................................23

5.1 ACCESS SETT I FORHOLD TIL ALTERNATIVENE................................................................................235.2 GRENSESNITTET...........................................................................................................................235.3 PROGRAMMENES GRENSESNITT.....................................................................................................245.4 VEIVISERE...................................................................................................................................245.5 HVORDAN NAVIGERE I ACCESS......................................................................................................255.6 STANDARDTABELLEN ...................................................................................................................25

6. TABELLER I ACCESS ..............................................................................................................27

6.1 HVORDAN OPPRETTE EN TABELL...................................................................................................276.2 FELTDEFINISJON...........................................................................................................................276.3 DATATYPER OG FELTEGENSKAPER.................................................................................................286.4 ENDRE FELT.................................................................................................................................306.5 PRIMÆRNØKKEL...........................................................................................................................306.6 FORHOLDENE...............................................................................................................................306.7 ET EKSEMPEL...............................................................................................................................316.8 SE PÅ OG SKRIVE INN DATA...........................................................................................................32

Innføring i databaser

1096 - Lars Marius Garshol 6

7. SPØRRINGER I ACCESS.........................................................................................................33

7.1 HVA ER EN SPØRRING?..................................................................................................................337.2 SPØRRINGER FRA EN TABELL.........................................................................................................33

7.2.1 Spørringer med alle poster ..................................................................................................337.2.2 Spørringer med bare noen av postene..................................................................................35

7.3 SPØRRINGER FRA FLERE TABELLER................................................................................................357.4 KOBLINGSEGENSKAPER................................................................................................................367.5 BEREGNEDE FELT: AGGREGATFUNKSJONER OG UTTRYKK...............................................................37

7.5.1 Uttrykk generelt...................................................................................................................377.5.2 Uttrykk i de forskjellige typene ............................................................................................377.5.3 Aggregatfunksjoner .............................................................................................................387.5.4 Gruppering..........................................................................................................................39

7.6 DATAMANIPULASJON MED SPØRRINGER.........................................................................................41

8. OPPBYGNING AV GRENSESNITT I WINDOWS ..................................................................42

8.1 SKJEMATYPER OG DERES REKKEFØLGE..........................................................................................428.1.1 Hovedmeny..........................................................................................................................428.1.2 Velg post-skjemaet...............................................................................................................428.1.3 Endre data-skjemaet............................................................................................................43

8.2 HVORDAN LAGE ET GRENSESNITT..................................................................................................438.3 TOMMELFINGERREGLER FOR SKJEMAER.........................................................................................438.4 SMÅTIPS ......................................................................................................................................44

9. SKJEMAER I ACCESS: BAKGRUNN .....................................................................................45

9.1 HVA ER ET SKJEMA?......................................................................................................................459.2 HVA BESTÅR ET SKJEMA AV?.........................................................................................................459.3 SKJEMAETS DELER........................................................................................................................469.4 SKJEMAVEIVISERNE......................................................................................................................469.5 JOBBE MED KONTROLLER..............................................................................................................47

9.5.1 Hvordan velge kontroller.....................................................................................................489.5.2 Egenskaper..........................................................................................................................48

10. SKJEMAER I ACCESS: DETALJENE...................................................................................49

10.1 HVORDAN KONTROLLENE FUNGERER...........................................................................................4910.1.1 Hendelser ..........................................................................................................................4910.1.2 Tekstbokser........................................................................................................................4910.1.3 Kombinasjons- og listebokser ............................................................................................4910.1.4 Knapper............................................................................................................................49

10.2 VIKTIGE EGENSKAPER VED KONTROLLER.....................................................................................5010.3 HVORDAN LAGE EN KOMBINASJONSBOKS.....................................................................................5010.4 HVORDAN BYGGE OPP ET SKJEMA................................................................................................51

10.4.1 Endre data-skjema.............................................................................................................5110.4.2 Velg post-skjema................................................................................................................5310.4.3 Hovedmeny-skjemaet .........................................................................................................5510.4.4 Skjema med underskjema...................................................................................................56

11. RAPPORTER I ACCESS.........................................................................................................58

11.1 SKJEMAER/RAPPORTER - FORSKJELLER OG LIKHETER....................................................................5811.2 HVORDAN LAGE RAPPORTER.......................................................................................................5811.3 ET ENKELT EKSEMPEL.................................................................................................................5911.4 HVORDAN BRUKE EN RAPPORT....................................................................................................5911.5 RAPPORTVEIVISERNE..................................................................................................................5911.6 RAPPORTER MED GRUPPERING.....................................................................................................60

11.6.1 Hva er gruppering, og hvorfor bruke det?.........................................................................6011.6.2 Grupperingsveiviseren.......................................................................................................6111.6.3 Bruk av inndelingene.........................................................................................................61

Innføring i databaser

1096 - Lars Marius Garshol 7

11.6.4 Sideinndeling.....................................................................................................................6311.6.5 Gruppering- og sorteringsinnstillingene............................................................................63

11.7 AGGREGATFUNKSJONER.............................................................................................................63

12. FULLSTENDIGE APPLIKASJONER I ACCESS ..................................................................65

12.1 SELVSTARTENDE DATABASER.....................................................................................................6512.2 FEILSJEKKING ............................................................................................................................6512.3 LAGE IKON FOR DATABASEN I PROGRAMBEHANDLING ..................................................................6512.4 SIKKERHET ................................................................................................................................6612.5 DATABASER I NETTVERK.............................................................................................................6612.6 DISTRIBUSJON AV DET FERDIGE PROGRAMMET.............................................................................66

13. VEIEN VIDERE .......................................................................................................................67

13.1 HVORDAN LÆRE MER..................................................................................................................6713.2 PROGRAMUTVIKLING PÅ EGENHÅND............................................................................................67

14. TILLEGG..................................................................................................................................68

14.1 ORDLISTE..................................................................................................................................6814.2 VANLIGE KOMMANDOER.............................................................................................................7014.3 VANLIGE FEIL ............................................................................................................................7114.4 LITTERATUR ..............................................................................................................................7114.5 TAKK TIL ...................................................................................................................................71

Innføring i databaser

1096 - Lars Marius Garshol 8

2. Programutvikling

2.1 Et programs livssyklus

Å utvikle et programsystem er på ingen måte enkelt, og jo større programmet skal være jovanskeligere blir det. Det forskes mye på hvordan dette bør gjøres, og det kan være lurt åbruke litt tid på dette før vi går videre. Egentlig kan det hele oppsummeres i en setning: Tenkdeg om før du gjør noe! Dette kan kanskje høres ut som mas, men hvis du har tenkt å brukeAccess (eller et annet utviklingsverktøy) til noe seriøst bør du følge nøye med.

Som regel når du utvikler et program er det tre aktører involvert. Det er deg selv (utvikler),den som er oppdragsgiver og bestemmer hvordan programmet skal bli (oppdragsgiver) og desom skal bruke sluttresultatet (brukerne). Alle disse har hver sine ønsker og behov, og disse erikke alltid forenlige med hverandre, og programutvikling kan fort bli en balansegang mellomdisse behovene. Et annet problem er at det kan være vanskelig å forstå hva oppdragsgiver vilog det behøver ikke nødvendigvis være hva brukerne trenger osv. Derfor kan det fort bli en delomarbeiding av det man trodde var ferdig, og dette gjør at planlegging blir veldig viktig.

Derfor har jeg tatt med en oversikt over hvordan programutvikling vanligvis forløper, oghvordan det er vanlig å dele prosessen inn i faser.

• Behov Her starter det hele. Ofte finner bedriften ut at bestemte arbeidsoppgaver er svært

tidkrevende og rutinepreget, og man ønsker seg et dataprogram som kan løse disseoppgavene. Men like ofte er visjonene bredere og mer uklare (typisk for mangebedriftsledere har vært at de ønsker å få hele bedriften inn på data, “information at yourfingertips”), og det er særlig da neste stadium er viktig. Som regel vil det vise at noen av deplanlagte delene er enklere å gjøre på andre måter, og litt sunn skepsis til at absolutt alt mågjøres på data kan også lønne seg.

• Analyse Man finner ut at man trenger et program, og bestemmer seg for å lage det. Problemet er:

oppdragsgiver er sjelden helt sikker på akkurat hva det er som trengs. Dette kan det oftevære svært vanskelig å finne ut av, og resultatet kan fort bli mye fram og tilbake uten at manfår fastlåst en endelig versjon av programmet. Brukerne er sjelden de som lager det, ogdette kan skape problemer fordi det kan være vanskelig å garantere at utvikleren lager detprogrammet brukeren vil ha.

• Design

Innføring i databaser

1096 - Lars Marius Garshol 9

Når man har kommet så langt vet man hva som trengs, og begynner å planlegge hvordandette skal løses på datamaskinen. Tar man de gale avgjørelsene her kan det koste svært myetid og krefter senere.

• Implementasjon Så er alt klart. Man vet hva man skal ha, og hvordan det skal lages. Da gjenstår bare å lage

det. Denne delen betraktes ofte som 100% (eller 90%) av jobben; men det er feil!

• Feilsjekking Så fort programmet komplett og har alt det skal tror man ofte at det er ferdig. Det er feil

(igjen). Programmet vil nå inneholde feil. Alle programmer (unntatt de aller minste ogenkleste) har feil. Det gjelder også både Windows og Access.

• Bruk Etterhvert tas programmet i bruk, selv om det sannsynligvis gjenstår feil. Alle programmer

som er store nok til å være nyttige inneholder feil. (Det er vanlig under utviklingen av storeprogramsystemer å utgi programmet når antall feilrapporter pr uke har kommet ned i etpasselig tall.)

• Nye behov Men selv når programmet er tatt i bruk og alle feil fjernet er ikke programmererens oppgave

over. Svært ofte finner man ut at ‘det hadde jo vært fint om programmet også kunne gjøresånn og sånn’ eller ‘det var ikke slik det skulle være’ eller oppgavene programmet skalutføre endres. Da må man til med ny analyse, nytt design og så endre implementasjonen(systemet), sjekke feil osv nok en gang.

I praksis vil man ikke kjøre gjennom hele denne sekvensen, ihvertfall ikke så grundig som deter beskrevet her, når man skal lage mindre/middels programmer. Ved større seriøseprogrammeringsprosjekter er det utenkelig å ikke kjøre gjennom et nøye planlagt program forutviklingen. Programutvikling (også kalt software engineering) er altfor vanskelig og dyrt til atman tør å gjøre noe annet. Det er alt for mange eksempler på utviklingsprosjekter som hartrukket ut i det uendelige uten å komme noen vei. Her hjemmefra kan vi jo nevneRikstrygdeverkets TRS’90-system (som et av mange), og også i resten av verden er problemetvelkjent.

Det lønner seg å hele tiden ha i tankene at programmet du lager kan komme til å leve lenge.Mange av programmene som brukes idag (særlig større administrasjonsprogrammer hos bankerog i offentlig forvaltning) har vært ibruk siden slutten av 60-tallet. Det er ikke uvanlig atprogrammer overlever sin utvikler i en bedrift, slik at andre må jobbe videre med det du harutviklet. Det er da det er viktig at man hadde et godt gjennomtenkt design i begynnelsen.

Dette kan kanskje høres ut som overdrevent mas om å “være grundig og nøyaktig blablabla”,og så lenge du bare lager programmer for deg selv er det det, men i det øyeblikk andremennesker blir involvert som brukere/utviklere blir det svært viktig.

Innføring i databaser

1096 - Lars Marius Garshol 10

2.2 Et programs egenskaper

Når man skal vurdere om et program er godt eller dårlig er det mange egenskaper som spillerinn. Ofte er det slik at forbedring av en egenskap lett fører til forverring av en annen. Detperfekte program er dermed temmelig uoppnåelig.

• Hastighet - at programmet er raskt, brukeren slipper å vente• Enkelt å endre - at programmet lett kan tilpasses nye behov/rutiner• Ressursbruk - at programmet bruker lite minne, diskplass etc.• Utviklingstid - at programmet kan lages på kort tid (koster mindre da)• Dekker behovet til brukeren - mao: det gjør alt det brukeren ønsker• Brukervennlig - lett å lære, enkelt å bruke, ikke masse unødvendig tasting

En svært viktig egenskap for utvikleren er at programmet er enkelt å endre. Det høres kanskjeikke så vanskelig ut, men krever svært mye av programmets oppbygning. Det krever atprogrammet er konsekvent og elegant laget. Dette å oppnå konsekvens og eleganse er sværtvanskelig, og krever trening og disiplin. Å programmere er om ikke en kunst så er det i detminste solid håndtverk. ‘Software engineering’, som det kalles, er i dag et stort forskningsfeltav den enkle grunn at dårlig programmeringsstyring har kostet litt for mange milliarder.

2.3 Programutviklingsverktøy

En typisk del av analysen vil være å velge utviklingsverktøy, og her er Access kun ett avmange. Og databasesystemer er bare en av mange typer verktøy.

• Assembler Assembler er (nesten) det samme som maskinkode. Her skriver man instruksjon for

instruksjon den koden maskinen kommer til å utføre. Og siden de fleste maskiner i dagutfører millioner av instruksjoner pr sekund betyr dette at utviklingen blir ekstremt detaljert.Programmene blir lange, og generelt er det svært vanskelig å skrive selv enkle programmer.Det er også svært vanskelig å unngå feil.

Fordelen er at man kan få til absolutt hva som helst maskinen kan gjøre, og at programmeneblir svært raske.

• Programmeringsspråk Programmeringsspråkene går et skritt videre. Man skriver programmet som tekst i et

formelt språk spesiallaget for dette. Deretter oversetter et spesielt program (kaltkompilator) teksten til maskinkode. Dette gjør at koden blir kortere, man kan systematisereprogrammet mye mer og utviklingen går raskere og enklere. Man får også typisk færre feilenn om man skriver i assembler.

Ulempene er at programmene blir langsommere enn om man skriver i assembler, og at endel ting ikke lar seg gjøre. Typisk er dette ting som bruk av fysisk utstyr som mus, tastatur,scanner, printer osv.

Det finnes svært mange programmeringsspråk og de er inndelt i innbyrdes svært ulikefamilier. Blant de mer vanlige er: C/C++, Ada, Pascal, Java, BASIC, LISP, Smalltalk, ML,Perl og Prolog. Innen hvert enkelt språk igjen finnes en mengde dialekter. Særlig LISP ogBASIC har en hærskare av dialekter.

Innføring i databaser

1096 - Lars Marius Garshol 11

• ‘Visuelle’ programmeringsspråk Dette er videreutviklinger av vanlige programmeringsspråk, der man kan ‘tegne’ deler av

programmet på skjermen (særlig brukergrensesnittet), og utviklingsverktøyet genererer såkoden for en. Dette forenkler mye av rutinetastingen man ellers måtte gjøre, og sparer bådetid og feil. Ulempen er at man ofte ikke lenger kan gjøre hva som helst, og at programmenekan bli langsommere.

Eksempler på verktøy av denne typen er Borland Delphi (som bygger på Pascal) ogMicrosoft Visual Basic (som bygger på BASIC).

• Fjerde-generasjons-verktøy Her finnes en mengde forskjellige varianter, og databasesystemer er bare en av dem. Disse

er som regel basert på å utvikle systemer av en bestemt type, slik databasesystemer er menttil utvikling av arkivprogrammer. Her er man med andre ord enda mer begrenset enn omman bruker et programmeringsspråk, til gjengjeld blir det færre feil og utviklingen gårraskere. Systemene kan ofte bli vel så raske som om man hadde brukt et vanligprogrammeringspråk.

2.4 Godt design

Å lage et stort program med godt design er ikke enkelt, faktisk nærmest umulig. Å komme inærheten av et godt design krever talent, disiplin, mye arbeid, erfaring og iblant også flaks.Merk at jeg sier stort. For mindre programmer er det langt enklere, og for de systemene vi gårløs på i dette kurset er det ingen stor sak å få det til.

En svært viktig del av et godt databasedesign er valget av tabeller og forhold. Gjør man etdårlig valg her får man svi for det senere. Et annet viktig poeng er navnene: alle tabeller, felter,spørringer osv må ha gode navn.

Her er noen små tommelfingerregler:• Unngå dobbeltlagring! I en god database finnes ikke de samme dataene lagret to forskjellige

steder (enten det er tabeller eller felter.)• Ikke legg for strenge begrensninger på bruken av systemet. Dersom det er noe du ikke har

tenkt på vil du bare provosere brukerne.• Ikke gjør systemet for slapt, slik at det tillater ting som ikke burde vært tillatt. (Det er ikke

lett å kombinere dette med regelen ovenfor.)• Et godt design mangler ingenting og har ingen overflødige deler. Dette er viktig: jo mindre

systemet er, jo bedre. Det blir enklere å endre, forstå og bruke. Pass bare på at det ikke blirfor lite...

• Pass på å ha tenkt gjennom så mye som mulig før du begynner. Når deler av et programskrives om har det ekstra lett for å oppstå feil.

• Navn er svært viktige! Vær konsekvent og grundig i navngivingen din.

Innføring i databaser

1096 - Lars Marius Garshol 12

3. Overgangen fra idé ti l database

3.1 Hva er en database? Om strukturering av informasjon

Forskjellen på en database og et vanlig tekstdokument er at informasjonen i en database erstrukturert på en måte som maskinen forstår, mens den ikke forstår tekstdokumentet.

“Anne Tryti eier en Toyota MR2 som har registreringsnummer SP 83400. Hun bor i Dalveien19, 1800 Askim og privattelefon 69882344. Bil nummer BN 26131 er en Nissan Bluebird eidav Jarl Andresen, som bor i Nansensgt 69, 4601 Kristiansand og har telefon 38092483.”

Dette er klar tale for et menneske, men for en datamaskin er dette komplett uforståelig. Endatabase kan behandle informasjonen, organisere den og svare på spørsmål, mens ettekstbehandlingssystem ikke kan gjøre noen av delene med et dokument. Dataene må medandre ord organiseres og struktureres før en datamaskin kan ‘forstå’ dem.

Tabeller er løsningen man har brukt for å strukturere dataene i en relasjonsdatabase. Det finnesandre måter å gjøre det på, men da har man ikke lenger med en relasjonsdatabase å gjøre.

Navn Gateadresse Sted/Postnummer Telefon Registreringsnr MerkeAnne Tryti Dalveien 19 1800 ASKIM 69882344 SP 83400 Toyota MR2Jarl Andresen Nansensgt 69 4601 KRISTIANSAND 38092483 BN 26131 Nissan Bluebird

Tabell 3.1

Dette er den samme informasjonen, omorganisert til tabellform. Nå er det brått mulig å spørredatamaskinen om “Hva heter alle som bor i Askim?” eller “Hvem eier bil nummer BN 26131?”Den kan da i det første tilfellet gå gjennom alle radene i tabellen og for hver gang den finnerAskim i Sted/Postnummer-kolonnen skrive ut det den finner i Navn-kolonnen. Spørsmålet måselvfølgelig stilles på en måte maskinen forstår, men det kommer vi tilbake til i kapittel 7.

Nå kan du kanskje gjette hva en database er: et system som lagrer informasjon på enstrukturert måte, og som kan la en bruker endre informasjonen og få ut informasjonenstrukturert på en annen måte. Brukeren skal også kunne stille spørsmål til databasen.

3.2 Datamodellering

Når man lager en database er man egentlig ute etter å lage en modell i en datamaskin av enbegrenset del av virkeligheten. I eksempelet ovenfor ville vi lage en modell av eierforholdenefor noen norske biler. Disse eierforholdene er ikke tilfeldig organisert, men styrt av noe vikaller ‘forretningsregler’. Disse sier slike ting som at ‘personer eier biler’, ‘en bil kan bare eiesav en person til enhver tid’, ‘en person kan eie flere biler samtidig’ osv.

Den største vanskeligheten med å utvikle databaser skulle nå være åpenbar: å finne utav forretningsreglene, og gjøre dem om til et sett med tabeller. Det er et problem til: nemlig åfinne forholdene mellom tabellene. (Hvis dette virker uklart kan du tyvlese litt i kapittel 4.) Forenkle databaser er dette stort sett barnemat når man har litt trening, men for store databaser er

Innføring i databaser

1096 - Lars Marius Garshol 13

det langt i fra selvsagt. Særlig kan det være vanskelig å få ordentlig klarhet i hvordan brukerneav databasen egentlig vil ha dette.

Det finnes en teknikk for å håndtere disse problemene, nemlig datamodellering. Den er faktisksvært nyttig i praksis, særlig ved utvikling av store og kompliserte databaser. Datamodelleringgjøres som regel ved å tegne, og til å støtte seg har man forskjellige ‘spesifikasjonsspråk’, somer regler for hvordan forretningsreglene skal tegnes.

Det finnes en rekke spesifikasjonsspråk, fra de mer avanserte som NIAM til de svært enkle,som ER. Vi skal ikke dekke noen av disse her, men jeg nevner dem så dere har hørt om dem.NIAM er faktisk såpass avansert at det finnes databasesystemer som lar deg tegne et NIAM-diagram, og så lager det tabellene og relasjonene for deg automatisk. Dette lar seg ikkeegentlig gjøre fra et ER-diagram, ettersom ER er mer et skissespråk. I dette kurset skal vi barebruke datamodellering til å tenke på papiret og kladde litt før vi lager ting, og trenger derforbare en forenklet utgave av ER. Den har jeg kalt ER-light.

3.3 Et enkelt spesifikasjonsspråk: ER-light

Noen av forretningsreglene i bil-eksempelet kan beskrives slik: “En bil har bare en eier. Enperson kan eie flere biler. Biler har registreringsnummer og bilmerke. Personer hargateadresser, postnummer/bosted og telefon.”

Datamodellering går ut på å finne typer av objekter (dette kan være gjenstander eller abstraktebegreper) som vi er interessert i og disses egenskaper. Objektgruppene/typene kalles entiteter,og deres egenskaper kalles attributter. I beskrivelsen ovenfor er modelleringen egentlig alleredegjort. Det ligger mellom linjene at vi har to entiteter: personer og biler. Forholdet mellom demer gitt, og entitetenes attributter er klarlagt. (Entiteter og attributter er egentlig svært greie åforstå, ikke la deg skremme av at ordene høres vanskelige ut.)

I ER-light tegnes dette slik:

Bil ∞

Person

Bil

Eier

1

Registreringsnummer

Merke

Telefon

Innføring i databaser

1096 - Lars Marius Garshol 14

Med andre ord tegnes entiteter med ring rundt, mens attributter må klare seg uten. Mellom Bilog Person er det et forhold (representert ved en linje.) Ved linjen, inntil Bil står tegnet ∞, somstår for uendelig, og betyr at hver Person kan ha uendelig mange biler. Inntil Person står 1,som betyr at hver Bil bare kan ha en Person. At Person’en er eier, og ikke tyv bryr vi oss ikkeom. (Dette kalles Person’s rolle.)

Å gjøre om fra datamodellen (dvs: tegningen) til tabeller og begrensningsregler er et tema forseg, som kalles normalisering. Siden våre databaser blir såpass enkle skal vi ikke gå noe særliginn på dette her. (Mer om normalisering står i avsnitt 4.3.)

3.4 Forhold

Forholdene er kjernen i en relasjonsdatabase. De brukes til å organisere dataene og unngådobbeltlagring. Mange databasesystemer er mer primitive enn relasjonsdatabasene, fordi demangler forholdene. Som regel har de tabeller på samme måte som relasjonsdatabaser, men dekan altså ikke kobles sammen med forhold. Problemet med dette er at forholdene som gjørrelasjonsdatabasene så kraftige.

Det finnes enda mer avanserte databasetyper, men vi skal ikke gå inn på disse her. Dette blantannet fordi de aller fleste databasesystemer er relasjonsdatabaser (eller av den enklere typen jegnevnte). Mer om dette i avsnitt 5.1.

Forhold kan være av tre typer:• En-til-en Her er det slik at det til hver post i den ene tabellen svarer nøyaktig en post i den andre. Da

kan man som regel slå de to tabellene sammen, men ikke alltid, det kan være fornuftigegrunner til å holde dem adskilt.

• Mange-til-en (eller en-til-mange) Dette er den vanligste typen forhold, og er helt grei å forholde seg til.

• Mange-til-mange Mange-til-mange-forhold skal ikke forekomme i en database. De trenger seg iblant på, men

må da omgås ved at man lager en entitet mellom de to som har et innbyrdes mange-til-mange-forhold. Begge de opprinnelige entitetene har et en-til-mange-forhold til den nye.

3.5 Hvordan lage en datamodell

Spørsmålet blir nå: når man skal lage en datamodell, hvordan finner man frem til entitene ogderes attributter, og hvordan finner man forholdene mellom disse? Dette er egentlig et

AdresseNavn

Innføring i databaser

1096 - Lars Marius Garshol 15

spørsmål om kreativitet og intuisjon, og man kan ikke så lett lage tommelfingerregler for dette,men et eksempel kan kanskje klargjøre.

Eksempel 3.1

“Du har tenkt å lage en database over alle dine plater og musikkassetter. Du vil registrere tittel,artist, år, platetype (CD, LP etc.) og alle sanger på hver plate/kassett. For hver sang vil duregistrere tittel, varighet og hvem som gjør hva (dvs: hvem spiller gitar, hvem har produsert,hvem har skrevet musikken osv.)”

Her har vi tre åpenbare typer objekter som vi vil registrere data om: plater/kassetter, sanger ogartister. Da kan vi begynne med å tegne disse som entiteter. Deretter kan vi sette påattributtene som ble nevnt ovenfor, unntatt de som er knyttet til andre entiteter.

Da får vi denne modellen:

Det som da mangler er at vi ikke har sagt noe om forholdene mellom de forskjellige entitetene.Hvis vi tenker oss om er hver sang bare på en plate, mens en plate i teorien kan ha ubegrensetmange sanger. Her dukker det opp et lite problem: hva mener vi egentlig med sang? Du kan joha f.eks. både studioversjon og liveopptak av samme sang, og kanskje en coverlåt også? Erhver av disse forskjellige sanger, eller har vi samme sang flere steder? Dette er et typiskproblem: hva mente den som ville ha databasen egentlig? Ofte vet de det ikke selv, eller, merpresist, de forstår ikke forskjellen.Den vanligste og greieste løsningen på problemer som akkurat dette er å si at hver versjonregnes som separate sanger. (Den motsatte varianten gir deg litt flere muligheter, men er mertungvint.) Dermed sier vi at hver versjon av en sang er også innspilt av en (og bare en) artist,mens hver artist kan ha spilt inn mange sanger.

Plate Artist

Sang

Tittel

År

Type

Plate Artist

Sang

Tittel

Navn

År

Type

Tittel Varighet

Navn

∞ 1Spilt inn av Har spilt inn

Innføring i databaser

1096 - Lars Marius Garshol 16

En plate er utgitt av en artist, men en artist kan utgi mange plater. Eller? Dersom vi tarsamleplater (som Absolute Music) med i betraktningen får vi et mange-til-mange-forhold, somegentlig er beskrevet av sangene på platen. Her må man gjøre et valg, og de aller fleste vil nokende opp med å velge et en-til-mange-forhold mellom Plate og Artist. (Samleplater vil da væreutgitt f.eks. av Diverse artister.)

Det er ikke alltid slik at forretningsreglene alene gir deg de entitetene du trenger. Av og til mådu “jukse” ved å se framover til hvordan databasen vil bli for å få den mest praktiske løsningen.Hvis du f.eks. vil at en av attributtene til en entitet bare skal kunne ha noen få forskjelligeverdier, f.eks. platetype: CD, LP, kassett, video, lønner det seg å ha en egen tabell for typeneog bruke et forhold til denne. Denne typetabellen vil da være en egen entitet i modellen.

3.6 Tommelfingerregler for datamodellering

• IKKE tenk på skjemaer og tabeller når du modellerer, det kommer senere. Tenk på hva somhører sammen med hva.

• Begynn med å lage så mange entiteter som mulig. Lag en til hvert begrep som forekommer idatabasebeskrivelsen.

• Fortsett med de mest opplagte attributtene og plasser dem.• Så kan du begynne å plassere forhold og attributter, og opprette nye entiteter for å få dem

til å passe inn.• Unngå å velge primærnøkler som kan endre seg.• Unngå lange primærnøkler.• Attributter som kan beregnes ut ifra de andre attributtene legges ikke inn i entitetene, men

hører hjemme i spørringene.• Til slutt må du tenke over om noen entiteter skal fjernes. Kanskje førte du opp noen som

ikke var interessante i vår database likevel.

• En entitet skal være et begrep, noe som det finnes flere ‘instanser’ av i virkeligheten.Bilnummer er ikke et begrep, men bil er.

• Før du plasserer forhold, tenk gjennom hvorfor du vil ha forholdet der. Det betyr at det skalregistreres data som kobler sammen to instanser av hver entitet. Poenget er at du må vitehva disse dataene betyr. Eksempel: Har personen lånt bilen, kjøpt den, stjålet den, solgt deneller hva er det vi registrerer som lager et forhold mellom person og bil?

• Vær nøye med navnene på både entiteter og attributter. Tenk gjennom dem.• Attributtene til en entitet skal gjelde ett emne, ikke flere.

1

Inneholder

Utgitt på

Innføring i databaser

1096 - Lars Marius Garshol 17

• Dersom flere entiteter har mange felter til felles bør du vurdere å slå dem sammen.• En entitet som ikke har attributter er kanskje overflødig.• Attributter som bare kan ha noen få verdier og som du vil gruppere/søke på bør gjøres til

entiteter.• En attributt som viser til en annen entitet (som identifiserer en instans tilhørende en annen

entitet (eller samme)) skal gjøres om til et forhold.

Innføring i databaser

1096 - Lars Marius Garshol 18

4. Relasjonsdatabaser

4.1 Oppbygningen av en relasjonsdatabase

Hjertet i alle relasjonsdatabaser er tabellene, som er der alle data lagres. En tabell består av enrekke felter og poster, der postene er dataelementene, mens feltene er det postene består av.Sagt på en annen måte utgjør feltene definisjonen av tabellen, mens postene er innholdet.

Registreringsnummer Merke EierSP 83400 Toyota MR2 Anne TrytiBN 26131 Nissan Bluebird Jarl AndresenDE 66477 Opel Kadett Hans Hansen

Tabell 4.1

I dette eksempelet er ‘Registreringsnummer’, ‘Merke’ og ‘Eier’ feltene, mens ‘SP 83400’,‘Toyota MR2’ og ‘Anne Hansen’ er en post. For å si det på en annen måte er et felt en kolonnemens en post er en rad i tabellen. (De engelske begrepene er ‘field’ og ‘record’.) Du kan tenkedeg en post som et arkivkort, men husk at det er en forenkling, for i relasjonsdatabaser kan vikoble flere poster sammen.Som regel ønsker vi å legge begrensninger på hva som kan stå i et felt. I feltet ‘Eier’ er vi foreksempel bare interessert i å ha navn, men det kan vi ikke fortelle maskinen på noen enkelmåte. (Den kan ikke forstå at ingen heter ‘Rtwerwq Hasdjksk’.) Det vi kan fortelle den er atfeltet skal inneholde tekst, og ikke mer enn 40 tegn.Det er også mulig å legge inn andre former for begrensning. For eksempel kan ikke flere bilerha samme registreringsnummer, dermed sier vi at feltet skal bare ha unike verdier. Vi vil ogsåtypisk bruke registreringsnummer for å vise til/identifisere bestemte biler, og siden feltet erunikt vil dette alltid fungere. (Alle biler har et registreringsnummer og det finnes ikke toforskjellige biler med samme nummer.)Alle tabeller bør ha noe som kalles en primærnøkkel. Primærnøkkelen er ett (eller flere) feltsom må fylles ut for alle poster og som har unike verdier (er det f.eks. to felter må ingen posterkunne ha like verdier i begge.) Primærnøkkelen brukes til å henvise til bestemte poster og eren svært viktig egenskap ved en tabell.I eksempelet overfor er det bare ‘Registreringsnummer’ som har unike verdier. (Felter som harunike verdier kalles ofte for kandidatnøkler, fordi de er kandidater til å være primærnøkler.)Siden ‘Registreringsnummer’ er eneste kandidatnøkkel er den også eneste muligeprimærnøkkel.

4.2 Flere tabeller - relasjoner

Så lenge man kun har enkeltstående tabeller er det trivielt å lage databaser, men idet øyeblikkdataene i flere forskjellige tabeller skal forbindes med hverandre blir ting komplisert. Foreksempel kan vi tenke oss at vi vil lagre data om eierne av bilene, for eksempel telefonnummerog adresse. Problemet blir da at hvis en person eier flere biler må vi lagre vedkommendestelefonnummer og adresse en gang for hver bil. Det er ikke særlig elegant og skaper også

Innføring i databaser

1096 - Lars Marius Garshol 19

problemer når personen flytter, fordi vi da må oppdatere de samme dataene flere ganger. (Deter som regel slik i programutvikling at det som ikke er elegant heller ikke er lurt.)

Dette problemet lar seg løse om vi lager en tabell til for personer:

Navn Gateadresse Postnummer Sted TelefonAnne Tryti Dalveien 19 1800 ASKIM 69882344Jarl Andresen Nansensgt 69 4601 KRISTIANSAND 38092483Hans Hansen Hanseveien 0316 OSLO 22448482

Tabell 4.2

Problemet blir her at ‘Navn’ ikke er egnet som primærnøkkel siden vi godt kan tenke oss at detfinnes flere ‘Hans Hansen’. For å få det hele til å gå opp må vi sette inn et nytt felt som kanbrukes. Dette kan enten være en teller, som fungerer slik at første post blir 1, andre 2 osv, ellerf.eks. personnummer, bare det er unikt for hver post.

Det vi nå mangler er en måte å fortelle Access hvilke personer som eier hvilke biler. Og det erher relasjonene kommer inn. Vi bruker en relasjon mellom bil-tabellen og person-tabellen til åkoble sammen riktige par av eier og bil. Det gjør vi ved å endre ‘Eier’-feltet i bil-tabellen til‘Eiers personnummer’. Så forteller vi database-systemet (Access) at ‘Eiers personnummer’viser til ‘Personnummer’ i person-tabellen. (Formelt sier vi at ‘Eiers personnummer’ erfremmednøkkel til person-tabellen.) Siden ‘Personnummer’ er primærnøkkel i person-tabellenvil dette fungere ypperlig.

4.3 Normalisering

Overgangen fra et ER-light-diagram til ferdig tabell- og relasjonsstruktur skulle være grei.Dette er fremgangsmåten:

1. Lag en tabell for hver entitet.2. Hver attributt blir ett felt i tabellen. (Av og til deler man opp felter som man ikke gadd

tegne som flere attributter, f.eks. slik jeg under deler opp adresse i gateadresse, postnummerog sted.)

3. Dersom tabellene ikke har noen naturlig primærnøkkel må en lages. (Denne behøver ikke åfinnes i virkeligheten, men kan være en teller.)

4. Hvert forhold blir en fremmednøkkel (og dermed også et felt) i tabellen. Fremmednøkkelenmå svare til den andre tabellens primærnøkkel. Dersom vi har et en-til-mange forhold lagervi et felt i tabellen til den entiteten som har ∞-tegnet på sin side.

5. Lag en relasjon for hvert forhold.

Dersom vi følger disse reglene får vi:1. Tabellene Person og Bil.2. Person=(Navn, Gateadresse, Postnummer, Sted, Telefon) og Bil=(Registreringsnummer,

Merke). Her er adresse splittet i flere felter.3. Person=(ID_Person, Navn, Gateadresse, Postnummer, Sted, Telefon) og

Bil=(Registreringsnummer, Merke). ID_Person er en teller som er satt inn.

Innføring i databaser

1096 - Lars Marius Garshol 20

4. Person=(ID_Person, Navn, Gateadresse, Postnummer, Sted, Telefon) ogBil=(Registreringsnummer, Merke, Eier). Her er Eier en fremmednøkkel til Person-tabellen.

5. Person=(ID_Person, Navn, Gateadresse, Postnummer, Sted, Telefon) ogBil=(Registreringsnummer, Merke, Eier). Relasjoner: (Person,ID_Person,1)-(Bil,Eier,∞).Merk her at relasjonen går mellom feltene ID_Person og Eier. En relasjon må alltid væremellom to felter.

Her har vi det vi i dette kurset vil trenge for å begynne å lage en database. I større systemerville man ofte vært interessert i flere regler og begrensninger, men for våre formål holder dette.

4.4 Tommelfingerregler for normalisering

• Primærnøkkelen bør være kort, av hensyn til hastigheten.• Verdien til primærnøkkelen må være kjent for alle poster.• Fremmednøkkelen som representerer et forhold skal inn i den tabellen som har ∞-tegnet

nærmest seg.

• Bruk bare tall hvis du vil regne med verdiene i feltet, eller hvis du er helt sikker på atverdiene i feltet bare er tall.

• Bruk boolean til felter som bare kan ha to verdier. (Det finnes unntak her, men de er få.Dersom det f.eks. bare kan være to typer av noe er det et unntak.)

• Bruk dato/tid til alt som har med datoer og klokkeslett å gjøre.• Dersom du har forhold mellom to felter må disse ha samme type. Tellere må kobles med

Tall (Langt heltall).

4.5 Spørringer, skjemaer og rapporter

Etter å ha laget en relasjon mellom bil- og person-tabellene går det svært greit å lage oversikterder dataene fra disse to tabellene kombineres. Til dette bruker man noe som kalles spørringer(eng. queries). I en spørring kan man angi hvilke felter man vil ha med, lage nye feltersammensatt av de gamle, sortere, velge ut bare noen av postene og stort sett gjøre hva man vil.

Spørringene brukes som grunnlag for skjemaene, som er skjermbildene, og rapportene, som erutskriftene. Skjemaene vises på skjermen som vinduer, mens rapportene ser ut somdokumenter, og kan forhåndsvises og skrives ut. Skjemaene kan også skrives ut, men det erikke hovedhensikten med dem. Dersom du vil vite mer om skjemaer og rapporter kan du tyv-titte på kapitlene 9 og 11.)

4.6 Oppbygningen av databaser

Dette er en formell ISO-standard som beskriver inndelingen av databasene som utvikles i trelag, eller skjemaer. (Ikke å forveksle med skjemaene nevnt ovenfor, som vi skal lage i Access.)Denne kalles 3-skjema-arkitekturen, men er såpass formell at vi dropper den og tar vår egenvariant istedet. Dersom dette avsnittet er uforståelig så ikke fortvil: dette er ikke ment somnoen viktig del av kurset, bare som en sammenheng å sette det vi lærer senere inn i.

De tre lagene eller skjemaene er

Innføring i databaser

1096 - Lars Marius Garshol 21

• SQL-tolken Denne delen er allerede laget av Microsoft, nemlig databasemotoren Jet, som er Access’

hjerte. Den er en adskilt del av programmet, som oppbevarer alle data, håndhever allebegrensninger på dataene og mottar og svarer på alle spørringer. For å si det på en annenmåte er det programdelene som tolker/utfører de to andre delene. Forskjellen på database-verktøy og vanlige programmeringsspråk er at i de siste har du ikke denne delen, og må lagede tilsvarende funksjonene selv.

• Datastruktur Dette er beskrivelsen av databasen, som lages av deg. Beskrivelsene av alle tabeller,

begrensninger på dataene i tabellene, relasjoner hører hjemme her. Spørringer hører forså-vidt også hjemme her.

• Brukergrensesnitt Dette er beskrivelsen av hvordan data skal skrives inn av og presenteres for brukeren. Her

er alle skjemaer og rapporter. Denne tredelingen av databasene forklarer for en stor del hvorfor ting fungerer som de gjør iAccess og gir en grei sammenheng å sette nye begreper inn i. Det kan med andre ord væregreit å ha den i tankene når du leser videre. Et viktig poeng her er at de to siste delene lages avutvikler, men at ingen av dem inneholder dataene. Alt som beskrives her er hvordan dataeneskal håndteres.

4.7 Referanseintegritet

Når data endres, slettes og flyttes på kan det fort gå slik at fremmednøkler i en tabell viser tilposter som ikke finnes i den tabellen forholdet går til. Da har man et brudd påreferanseintegriteten, og det kan føre til en god del besvær. Mange databaser har spesiellerutiner som håndterer dette.

Den varianten Access brukes kalles kaskadesletting (i den norske programteksten:massesletting). Det vil si at når du sletter en post vil alle poster som har referanser til denneogså bli slettet. Det kan være en farlig strategi i enkelte tilfeller, men fungerer stort sett bra.

Access protesterer av og til når man prøver å lagre en post ved å si at referanseintegritetenkrever en relatert post i tabell T_EttEllerAnnet. Det som da har skjedd er at posten enten haren referanse til en post som ikke eksisterer, eller at den ikke har noen referanse i det hele tattder den skulle hatt det. I så fall må man enten legge inn/rette referansen eller slette posten.

4.8 SQL og BASIC

Selv om Access for en stor del er basert på at utviklingen skal skje via vinduer, veivisere ogklikking gir ikke dette adgang til alle muligheter. Tradisjonelt har relasjonsdatabaser værtbasert på et spesielt programmeringsspråk kalt SQL. SQL står for Structured Query Language,som er litt misvisende, ettersom SQL brukes både til spørringer, datamanipulasjon ogoppretting/sletting av tabeller.

Innføring i databaser

1096 - Lars Marius Garshol 22

Access bygger også på SQL, men det er mulig å lage fullt brukbare databaser uten å skrive såmye som en linje med SQL-kode. Likevel kan dette være nødvendig dersom man vil få til merkompliserte ting. Dette kurset dekker ikke SQL.

Som nevnt i avsnitt 2.3 er det ting som ikke lar seg gjøre med Access og SQL. Access harderfor også et vanlig (med det mener jeg imperativt, for de som kan litt om programmering)programmeringsspråk innebygget, nemlig BASIC. Dette er et gammelt (fra 1965)programmeringsspråk, som opprinnelig ble laget til bruk i undervisning. Det var sværtprimitivt, men har gjennomgått store endringer, blant annet takket være Microsoft, men er ogblir primitivt. BASIC kan brukes til programmering av ting som ikke lar seg uttrykke i SQL,men kommer fortsatt til kort overfor skikkelige programmeringsspråk.

Innføring i databaser

1096 - Lars Marius Garshol 23

5. Access’ oppbygning og virkemåte

5.1 Access sett i forhold til alternativene

Det finnes mange typer databasesystemer, og den enkleste typen bygger på såkalte "flate filer".Dette kan betraktes som databaser med bare en tabell, men med litt flere muligheter innen enenkelt tabell enn det f.eks. Access har. Eksempler på denne typen databasesystemer erFilemaker Pro og til en viss grad DataEase.

Hakket over disse systemene finner vi de ekte relasjonsdatabasene som Access, Paradox,dBASE og andre. Disse systemene er laget for PCer, hvilket vil si at de er beregnet på å brukespå en enkelt maskin, selv om de fleste også kan deles i nettverk. Disse er litt mindre systemer,som ofte har en rekke svakheter ved utvikling av større systemer. (Dette gjelder også Access.)

Det finnes også større databasesystemer (også de relasjonsdatabaser) som er beregnet på bruk istørre systemer, som f.eks. Oracle, Sybase, Ingres og andre. Disse har gjerne en utvidet SQLsom gjør SQL til et nesten fullverdig programmeringsspråk (kalles ofte for T-SQL) og harogså i større grad støtte for utvikling av større systemer. Enkelte har også modellerings-programmer og mulighet for automatisk normalisering av datamodellene.

Det finnes også mer avanserte typer databaser enn relasjonsdatabasene, nemlig den eldste avdem alle: nettverksdatabasene og de mer moderne objekt-orienterte databasene. Nettverksdata-basene brukes lite ettersom de er litt for kompliserte, og relasjonsdatabaser kan håndtere detmeste i alle fall. De objekt-orienterte databasene tilbyr vesentlige forbedringer overforrelasjonsdatabasene, men har ikke slått gjennom ennå, blant annet fordi utviklerne er såkonservative.

Kongen på haugen i dette hierarkiet er selvfølgelig de rene programmeringsspråkene, somdatabasesystemene selv er laget i.

5.2 Grensesnittet

Access er et vindusbasert system, slik at programmene som utvikles i Access blir ogsåvindusbaserte Windows-programmer. Databasen lagres i en enkelt fil med etternavnet .MDB.Det er bare mulig å ha en database åpen av gangen, men man kan jobbe med flere forskjelligedeler av databasen samtidig.

Fil-menyens Lagre og Lukk-valg gjelder kun det åpne vinduet, ikke hele databasen.(Databasevinduet er et unntak, siden det inneholder hele databasen, lukker du det vil du derforogså lukke databasen.)

Innføring i databaser

1096 - Lars Marius Garshol 24

5.3 Programmenes grensesnitt

Access er et Windows-program og det vil også programmene du lager med Access være. Detbetyr at deres grensesnitt vil følge Windows-standarden med knapper, vinduer osv. Iprogrammene du lager vil hvert skjema være et dokumentvindu, og oppføre seg som vanligeWindows-vinduer.

En stor fordel med å bruke Windows som operativsystem er at alle programmer ser mer ellermindre like ut fordi de har grensesnitt som er bygget opp av de samme elementene. Dersom duvil lage brukervennlige programmer bør du ha dette i tankene, og prøve å få ditt program til åligne mest mulig på andre Windows-programmer. Det vil gjøre at brukerne har lettere for ålære seg programmet, siden det ligner på andre de allerede kjenner.

5.4 Veivisere

Access har en rekke såkalte “veivisere” (engelsk: wizards), som er små hjelpeprogrammer somguider deg gjennom oppsettet av en del standardiserte løsninger. Dette kan være spesielle typerskjemer, knapper, rapporter eller annet. De er ofte tidsbesparende og enkle å bruke, men girikke tilgang til alle muligheter. Imidlertid kan det veiviserne lager senere endres av deg, slik atdu kan lage noe som ligner på det du vil ha, og så endre det etterpå.

Vi skal ikke ta for oss veiviserne spesielt grundig i dette kurset, og skal heller ikke se på alle.Det kan imidlertid lønne seg å utforske disse litt på egenhånd slik at du husker hva du kangjøre enklere hvor. Det bør også legges til at de ikke alltid er like tidsbesparende heller.

Innføring i databaser

1096 - Lars Marius Garshol 25

5.5 Hvordan navigere i Access

Figur 5.1

Hjertet i Access’ grensesnitt er vinduet i Figur 5.1, herfra har du adgang til alle delene avdatabasen din. Vinduet består av en rekke kort (som du ser på venstresiden) og hvert kort harsin egen liste som vises i vinduet og sin egen knapperad. På bildet vises listen til kortet‘Tabell’, altså alle tabellene. (Som du ser er det ingen tabeller ennå.)

5.6 Standardtabellen

Dette er et element i Access-grensesnittet som går igjen i en god del forskjellige sammenhengerog som jeg derfor vil gjøre unna her. Den dukker f.eks. opp når du skal lage tabeller og spør-ringer, når du viser tabeller og spørringer og en rekke andre steder, blant annet når du lager ogbruker skjemaer.

Figur 5.1

Kort

Vindu

Knapper

Innføring i databaser

1096 - Lars Marius Garshol 26

• Hvordan bevege seg rundt i tabellen Dette gjøres enkelt og greit ved å bruke piltastene og tab/shift+tab, eventuelt musa. • Justering av kolonnebredde og radhøyde Dette gjøres ved å ta tak med musen mellom to kolonner og dra dem til den bredden man vil

ha. Et dobbeltklikk her vil gi en kolonnebredde som akkurat passer til den bredeste verdien ikolonnen. Radhøyde justeres på samme måte, men dobbeltklikket fungerer ikke.

• Velge kolonne/rad eller hele tabellen En kolonne eller rad velges i sin helhet ved å trykke i det grå feltet til venstre/over

raden/kolonnen. Et klikk med høyre mustast vil da få opp en hurtigmeny som gir adgang tilå sette inn nye rader/kolonner, slette rader/kolonner og endel annet.

Du kan velge hele tabellen ved å trykke på det grå feltet helt oppe i venstre hjørne. • Flytte kolonne/rad En eller flere kolonner/rader flyttes ved at de først merkes ved å dra med musen over dem.

Deretter slipper du mustasten og drar dem på nytt dit du vil ha dem. • Postvelgerne Mange av disse standardtabellene (og endel vanlige skjemaer) har navigasjonsknapper nederst

til venstre. Der kan du bla mellom postene med knappene, som er i rekkefølge fra venstre:første post, en post tilbake, en post frem, siste post. Blar du forbi siste post lager du en nypost.

• Hvordan lage ny post En ny post lages ved å gå inn på nederste rad (som alltid er tom) og skrive inn posten her.

Innføring i databaser

1096 - Lars Marius Garshol 27

6. Tabeller i Access

6.1 Hvordan opprette en tabell

Dersom vi skal lage en tabell i Access velger vi kortet ‘Table’ i hovedvinduet og trykker‘New’-knappen. Vi blir da spurt om vi vil bruke tabell-veiviseren eller lage tabellen selv.Tabell-veiviseren har en rekke ferdiglagede tabeller klare, men selv om disse kan modifiseresav brukeren satser vi i dette kurset på å lage tabellene selv. Når vi velger å lage tabellene selvkommer vinduet i Figur 6.1 opp. Der vises en tabell over feltene i tabellen, med feltnavn,datatype og en beskrivelse. Feltnavnet er det navnet som brukes på feltet i hele databasen og erderfor svært viktig.

Figur 6.1

6.2 Feltdefinisjon

Etter at feltet har fått et navn må det få en type. Typen avgjør hva slags data som kan lagres ifeltet og hva vi kan gjøre med dem. Access tilbyr typene ‘Tekst’, ‘Notat’, ‘Tall’, ‘Dato/Tid’,‘Valuta’, ‘Teller’ og ‘OLE-objekt’. Feltene får en type av to grunner: for det første fordi denbegrenser verdiene som kan legges i feltet, og for det andre fordi det forteller Access hvordanvi kan behandle verdiene i feltet. Dersom Pris f.eks. lagres som Tall vet Access at ‘Bxcx’ ikkeer en gyldig pris. Den vil også forstå hva du mener med gjennomsnittlig Pris, og vil protesterehvis du prøver å ta gjennomsnittet av en rekke datoer.

Under 'Beskrivelse' kan du legge inn en beskrivelse av feltet som er synlig både for bruker ogdeg selv. Dersom andre enn deg skal være involvert i databasen bør du legge inn beskrivelser

Innføring i databaser

1096 - Lars Marius Garshol 28

her. De kan være gode å ha når du noen måneder senere sitter og klør deg i hodet og lurer påhva de forskjellige feltene egentlig var ment brukt til.

6.3 Datatyper og feltegenskaper

Alle felt har egenskaper som avgjør hvordan de oppfører seg. Disse varierer fra type til type, såvi behandler dem under omtalen av typene. Ikke alle egenskapene er like viktige, så vigjennomgår bare de aller viktigste her.

En egenskap som er felles for alle felt (og svært viktig) heter 'Indeksert' og har tre muligheter:Ja (med duplikater), Nei, og Ja (uten duplikater.) Dersom du indekserer et felt bruker du en delminne og diskplass, men søk og oppslag går langt raskere. Primærnøkler må være indeksert ogblir det automatisk. Dersom du velger 'uten duplikater' vil ikke to forskjellige poster kunne hasamme verdi i dette feltet.

• Tekst Her kan du lagre vanlig tekst, maksimalt 255 tegn.

• Feltstørrelse Dette avgjør den maksimale lengden på feltet. Lengden avgjør hvor stor plass feltet vil ta

på disk og i minnet, men det er likevel som regel ingen vits i å finregne på størrelsen her.Sørg for at du har nok, men ikke overdriv.

• Standardverdi Denne verdien settes inn i feltet idet en ny post opprettes, men kan endres av brukeren.

• Valideringsregel Dette er et boolsk uttrykk (se ordlisten eller avsnitt 7.5.2.3) og når feltverdien ikke

tilfredsstiller dette vil verdien ikke bli godkjent. Som feilmelding vises teksten iValideringstekst.

• Valideringstekst (se over)

• Obligatorisk Dersom du vil at brukeren skal være nødt til å fylle ut dette feltet svarer du ja her.

Primærnøkkelen må være obligatorisk (settes automatisk), men ellers bør du væreforsiktig med denne egenskapen. Den kan fort bli mer til irritasjon enn nytte.

• Notat Også her kan du lagre tekst, men nå er lengden maksimalt 64000 tegn. Denne typen brukes

mest til å lagre fritekst som kommentarer, beskrivelser og lignende. Man er som regel ikkeinteressert i å søke på Notat-felt.

Innføring i databaser

1096 - Lars Marius Garshol 29

Denne typen har akkurat de samme egenskapene som Tekst.

• Tall Kanskje ikke så overraskende: her kan du lagre tall, og ingenting annet. Hva slags tall det er

snakk om avgjør egenskapene.

• Feltstørrelse Denne egenskapen avgjør hvor mange byte som skal brukes til å lagre tallet, og hvordan

disse skal tolkes. Byte, heltall og langt heltall er alle heltall (dvs: tall uten komma) og kanlagre stadig større tall. Langt heltall går til +/- 2 milliarder. Vil du lagre noe større enndette må du bruke Flyttall eller Langt flyttall. Begge disse er kommatall, og langt flyttallhar 15 desimaler og går til 10308. Plassforskjellen er liten her, så det lønner seg å velge envariant som man vet gir plass til det man er interessert i.

Navn Bytes Kan lagreByte 1 0 til 255.Heltall 2 -32768 til 32767.Langt heltall 4 -2147483648 til 2147483647.Flyttall 4 ±3.402E38 og ned til 1.401E-45.Langt flyttall 8 ±1.797E308 og ned til 4.94E-324.

Tabell 6.1

• Antall desimaler Her velger du hvor mange sifre feltet maks skal kunne ha. Hvis du ikke vet hvor mange

det er (som i f.eks. en varepris) bør denne egenskapen settes til Auto.

• Ellers er feltene som for Tekst og Notat.

• Dato/Tid Denne typen brukes til å lagre dato og/eller klokkeslett. Egenskapen Format brukes til å

avgjøre om det er dato, klokkeslett eller begge deler, og hvordan de skal skrives. Ellers eregenskapene som for Tekst.

• Valuta Denne typen brukes til å lagre pengebeløp. Den eneste grunnen til å velge den framfor Tall

(langt heltall) er at Valuta har en rekke ferdigdefinerte formater som kan være greie å ha.

• Teller Denne typen er spesiell. Den er egentlig den samme som Langt heltall, men har den

egenskapen at første post i tabellen får verdien 1, mens siden telles feltetverdien opp med 1for hver ny post. Dette sikrer at alle postene har forskjellige verdier. Så hvis en tabell ikkehar noen naturlig primærnøkkel er det vanlig å slenge på et teller-felt og la det være primær-nøkkelen.

Innføring i databaser

1096 - Lars Marius Garshol 30

6.4 Endre felt

Å gå tilbake og endre definisjonen av et felt er stort sett greit i Access. Dataene konverteresautomatisk til en eventuell ny type (så langt råd er) og alle andre endringer gjøres problemfritt.Det er imidlertid ett unntak: feltnavnet. Dersom du endrer dette vil du få feil overalt idatabasen der du har brukt det gamle navnet, og du vil bli nødt til å gå over hele databasen forå finne alle forekomster av det gamle navnet. Dette er en stor svakhet ved Access, men lite ågjøre ved.

Det gjelder også å være klar over at endringer som har med primærnøkler og fremmednøkler ågjøre kan skape problemer dersom data forsvinner eller typene ikke lenger stemmer overens.

Et generelt problem er når man ønsker å konvertere et felt fra en type til en annen. F.eks. nårman går fra tekst til tall. Tekst som “123” går greit, mens ting som “Hansen, Erik” går dårligettersom dette ikke kan skrives som tall. Da må man enten droppe konverteringen, eller finneseg i at data forsvinner.

6.5 Primærnøkkel

Å definere primærnøkkel i Access er svært enkelt: merk radene til de feltene som skal væremed i nøkkelen. (Du kan ha med flere felter, men jo kortere nøkkel, jo raskere database.) Klikkmed høyre mustast, og velg Sett primærnøkkel i hurtigmenyen som kommer opp. De merkedefeltene blir da sammen ny primærnøkkel.

6.6 Forholdene

Så var det å definere forholdene mellom de forskjellige tabellene man har laget. Det gjøres vedå velge Redigere|Relasjoner i menyen når du har tabell-kortet oppe. Da kommer først endialogboks der du avgjør hvilke tabeller som skal være med i relasjons-oversikten (se Figur6.2).

Figur 6.2

Innføring i databaser

1096 - Lars Marius Garshol 31

I relasjonsoversikten kan du flytte rundt på tabellene som du vil for å få trukket forholds-linjene slik at de går minst mulig i kryss. Et forhold mellom to tabeller settes opp ved at dutrekker feltet fra den ene tabellen der 1-tallet skal stå til det tilsvarende feltet i den andretabellen. Når du har gjort dette kommer dialogboksen i Figur 6.3 opp. Der setter du et kryss ifeltet Referanseintegritet, og velger om du skal ha en-til-en eller en-til-mange. Dersom dusetter kryss i de to merkefeltene til høyre vil referanseintegriteten automatisk overholdes, vedat alle poster som viser til ikke-eksisterende poster i andre tabeller vil slettes. Dette valgetanbefales!

Figur 6.3

6.7 Et eksempel

I Access (og andre steder) er det vanlig å angi feltnavn slik: Tabellnavn.Feltnavn, slik at det ertydelig hvilken tabell feltet tilhører. Det går an å sløyfe tabellnavnet hvis dette er åpenbart(feltet finnes bare i en tabell).

I bilregister-eksempelet (se avsnitt 3.3) ville jeg laget to tabeller: T_Bil og T_Person. Disseville jeg laget slik:

Feltnavn Type MerkID_Person Teller Spesialopprettet for å være primærnøkkelen.Navn Tekst Personens navn.Gateadresse Tekst Personenes gateadresse.Postnr Tall Postnummeret til personens bosted. Heltall, 4 siffer.Sted Tekst Personens bosted.Telefon Tall Personens telefonnummer. Heltall, 8 siffer.

Innføring i databaser

1096 - Lars Marius Garshol 32

Tabell 6.2: T_Person

Feltnavn Type MerkRegistreringsnr. Tekst Primærnøkkel. Bilens registreringsnummer. Lengde: 9.Merke Tekst Bilens merke.Eier Tall Fremmednøkkel til T_Person.ID_Person. Langt heltall.

Tabell 6.3: T_Bil

Forholdet mellom T_Person.ID_Person og T_Bil.Registreringsnummer er en-til-mange,akkurat som i datamodellen.

6.8 Se på og skrive inn data

Du kan skrive inn og endre data i tabellene ved å åpne tabellene med ‘Åpne’-knappen pådatabasevinduet. Du vil da få opp en standardtabell som viser alle postene i tabellen. Der kandu både skrive inn og endre data.

Det er også mulig å endre data og skrive inn data når du åpner en spørring i dataark-visning.Det er enkelte typer spørringer som ikke lar deg gjøre dette, men stort sett går det greit.

Innføring i databaser

1096 - Lars Marius Garshol 33

7. Spørringer i Access

7.1 Hva er en spørring?

Spørringer er egentlig to ting, utvalgsspørringer og datamanipulasjonsspørringer. Den førstetypen er overlegent den vanligste, og er den vi først og fremst skal beskjeftige oss med. Det erimidlertid viktig å vite om manipuleringsspørringene også siden det er eneste måten å behandledata automatisk på i en relasjonsdatabase. (Uten å bruke Access Basic, som vi ikke skal læreher.)

Utvalgsspørringer trekker ut data fra tabeller og organiserer dem på nye måter. Vi kan f.eks.liste ut alle personer bosatt i Kristiansand, finne bilen som har registreringsnummer ‘DE 66477’eller skrive ut hvor mange biler hver enkelt person eier osv. Vi skal begynne forsiktig og byggedette opp etterhvert.

Ingen av de spørringene vi lager i dette kapittelet er særlig pene eller spesielt egnet til å skrivesut eller vises på skjerm. Det er heller ikke meningen. Meningen med spørringer er å få fram derette dataene, og så kan disse enten vises på skjerm i et skjema eller skrives ut i en rapport.Layouten ligger da i skjemaet/rapporten, mens dataene leveres av spørringen.

7.2 Spørringer fra en tabell

7.2.1 Spørringer med alle posterDen enkleste typen spørring plukker data fra en tabell, men velger bare ut noen av feltene. Dulager en spørring ved å velge ‘Spørring’-kortet i databasen og så trykke ‘Ny’. Du vil da blispurt om du vil bruke en veiviser eller om du vil starte med en blank spørring. Vi satser på ålage spørrringene selv. Dersom vi vil lage en adresseliste over alle personene i vår eksempel-database gjør vi som beskrevet over. Deretter må vi velge hvilke tabeller og spørringer vi vil gåut i fra. Vi velger der tabellen ‘T_Person’, siden det er der informasjonen finnes. Vi får da oppfølgende vindu:

Innføring i databaser

1096 - Lars Marius Garshol 34

Figur 7.1

Her ser vi i øverste halvdel av vinduet tabellene og spørringene vi har valgt ut (og forholdenemellom dem). Det er ikke nødvendig å ha tabellene og spørringene oppe her for å kunne brukedem i spørringen, men det er greit å ha som huskelapper og snarveier til enkelte kommandoer.

Nederste halvdel av vinduet er der vi lager spørringen. Den består av en tabell der hver kolonnelager en kolonne i den ferdige spørringen, mens radene beskriver hva som skal gjøres medkolonnene. Vi skal lage en spørring som lister ut alle personene i databasen, og data om dem.Da skriver vi bare inn feltene vi vil ha med i øverste rad i hver kolonne, eller velger dem. Felt-raden er en rad med kombinasjonsbokser, så du kan trykke pilen i feltet og velge det feltet duvil ha. Du kan også dobbeltklikke på feltet i huskelisten (øverst i vinduet) eller dra fra huske-listen til spørringen. Når du er ferdig kan du velge Vis | Dataark i menyen for å se resultatet.

Figur 7.2

Resultatet blir da som i Figur 7.2. Problemet er bare at hvis vi får mange personer vil denneadresselisten bli vanskelig å finne frem i fordi den ikke er sortert. Det kan vi lett gjøre: Sorter-raden i Figur 7.1 styrer sorteringen av postene. Dersom vi velger ‘Stigende’ i ‘Navn’-kolonnenvil postene bli sortert på navn i rekkefølgen A-Å. Dermed er vår adresseliste klar. Da er detbare å lukke vinduet og gi spørringen et navn. (F.eks: ‘Q_Adresseliste’.)

Innføring i databaser

1096 - Lars Marius Garshol 35

7.2.2 Spørringer med bare noen av posteneAv og til er vi interessert i å vise bare noen av postene i databasen. Dette kan også enkeltgjøres med en spørring. Sett at vi er interessert i en spørring som viser alle personene som borpå ett bestemt sted. Dette kan gjøres ved at spørringen får en ‘parameter’ som oppgis avbrukeren. Vi kan gå fram på eksakt samme måte som sist, og lage nøyaktig den sammespørringen. (Vi kan også kopiere den gamle ved hjelp av klipp og lim i databasevinduet.) Detsom da gjenstår er parameteren og å bruke denne. Denne kan legges i en ny kolonne bortenfor‘Sted’. Der kan du skrive ‘[Angi sted]’ i felt-raden. ‘Angi sted’ er da teksten som vises tilbrukeren når han blir bedt om å skrive inn stedet.

Deretter skriver vi et boolsk uttrykk i ‘Vilkår’-raden. I dette tilfellet er det enkelt: ‘=[Sted]’.Da vises alle poster der [Angi sted] er lik innholdet i feltet Sted. (Du må skrive hakeparenteserrundt Sted for at Access skal forstå at det er et feltnavn.) Hvis du nå velger Vis|Dataark vil dubli bedt om å ‘Angi sted’, skriver du da ‘Kristiansand’ vil posten ‘Jarl Andresen’ vises. Der vildu se at siste kolonne heter ‘Uttr1’ og er lik Sted. Dette er [Angi sted]-kolonnen, og vi eregentlig ikke interessert i å ha med denne. Den kan tas vekk fra visningen ved at krysset i Vis-boksen fjernes.

Boolske uttrykk står forklart i avsnitt 7.5.2.

7.3 Spørringer fra flere tabeller

Som regel ønsker man å kombinere data fra flere tabeller for å få fram informasjon. Dette kanogså enkelt gjøres av en spørring. La oss si at vi vil ha en liste over hva slags biler hver enkeltperson eier. Da lager vi en ny spørring der både T_Bil og T_Person brukes. Siden vi har lagtinn forholdet mellom disse to tabellene i Redigere|Relasjoner kommer dette opp i spørrings-vinduet. Ferdig laget ser spørringen ut som i Figur 7.3.)

Figur 7.3

Innføring i databaser

1096 - Lars Marius Garshol 36

Dersom du vil forestille deg hvordan dette fungerer kan du tenke deg at datamaskinen førstsetter opp alle mulige kombinasjoner av 1 post fra T_Person og 1 fra T_Bil. Deretter plukkerden ut de der T_Person.ID er lik T_Bil.Eier, før den sorterer de som er igjen påT_Person.Navn og viser det hele.

Figur 7.4

Resultatet vises i Figur 7.4. Som du ser dukker samme person opp flere ganger dersomhan/hun har flere biler. Det er selvsagt ikke særlig pent, men kan lett ordnes i et skjema eller enrapport. (Spørringen lagres som Q_Biler på eier.)

7.4 Koblingsegenskaper

Når du kobler to tabeller vises bare de radene der de kombinerte feltene i begge tabellene erlike. Dersom en bil for eksempel skulle stå oppført uten eier vil den ikke bli vist. Dette kan duendre ved å velge koblingen, klikke med høyre mustast og velge koblingsegenskaper.

Der har du tre muligheter:• standardløsningen: bare ta med rader der begge feltene har samme verdi.• ta med alle poster fra den ene tabellen, men bare de med en verdi i koblingsfeltet fra den

andre• den omvendte muligheten.

Dermed kunne vi valgt å ta med alle poster fra T_Bil, men bare de fra T_Person derkoblingsfeltene er like. Da ville vi fått opp også biler uten eiere, som ville hatt Navn-kolonnentom.

Stort sett vil referanseintegriteten sørge for at dette skjer automatisk, men iblant får du ikkeopp en eneste rad i en koblingsspørring selv om det er data i tabellene. Da kankoblingsegenskapene være løsningen.

Hvis du endrer koblingsegenskapene slik at resultatet av spørringen vil avhenge av rekkefølgenpostene leses ut av tabellene i vil du få en feilmelding: «Query contains ambiguous outer join.»Da er det bare å finne på noe annet.

Innføring i databaser

1096 - Lars Marius Garshol 37

7.5 Beregnede felt: Aggregatfunksjoner og uttrykk

Av og til er vi interessert i å vise frem felt som kan beregnes ut ifra dataene som allerede liggeri tabellen. Dette gjøres i spørringer og kan aldri gjøres i selve tabellen. Det lønner seg ikke ålagre slik informasjon i tabellene, fordi du da får dobbeltlagring.

7.5.1 Uttrykk genereltGenerelt kan vi si at et beregnet felt skrives slik: Feltnavn: Uttrykk. Feltnavn er her navnetfeltet vil få i spørringen, mens Uttrykk er et uttrykk som beskriver hvordan det skal beregnes.Dersom du regner med tall kan uttrykket skrives som et vanlig matematisk uttrykk, men hvisdu jobber med f.eks. tekst blir ting litt annerledes.

7.5.2 Uttrykk i de forskjellige typene

7.5.2.1 TallDersom du har en tabell med ansatte som har feltene ‘Timelønn’, ‘Timer jobbet denne mnd’ og‘Skatteprosent’ kan du beregne to nye felter: ‘Fradrag’ og ‘Utbetalt lønn’. Disse skrives daslik: (skatteprosent er mellom 0 og 100)

Fradrag: Timelønn*[Timer jobbet denne mnd]*(Skatteprosent/100)Utbetalt lønn: Timelønn*[Timer jobbet denne mnd]*((100-Skatteprosent)/100)

I tall-beregninger fungerer parenteser og annet akkurat som vi er vant til fra vanligmatematikk. Prioritetene er også som vanlig. (Dvs: rekkefølgen de beregnes i, f.eks. beregnesgange før pluss osv.) Operatorene er (i prioritert rekkefølge):

Prioritet Operator Betydning Operator Betydning1 ^ Opphøyd i2 * Gange / Dele3 + Pluss - Minus

Tabell 7.1

7.5.2.2 TekstDersom du jobber med tekst kan du skrive inn tekst-konstanter i gåseøyne: "Dette er en tekst-konstant". De kan settes sammen med + slik at "Dette er"+" "+"en test" blir "Dette er en test".I adresselisten kunne vi for eksempel vært interessert i å ha Sted og Postnr samlet til ett felt,slik at vi slapp å justere avstanden mellom dem så nøyaktig i rapporter. Dette kunne da gjøresslik:

Bosted: [Postnr]+" "+[Sted]

Legg merke til at vi setter inn et mellomrom mellom disse. Det er for å unngå resultater som1800ASKIM.

Innføring i databaser

1096 - Lars Marius Garshol 38

7.5.2.3 Boolske uttrykkDu lager boolske verdier fra Ja/Nei-felter eller ved å sammenligne to felter av samme verdi.Det gjøres med en sammenligningsoperator som

Operator Betydning= er lik< mindre enn> større enn<= mindre enn eller lik>= større enn eller lik<> ulik

Tabell 7.2

Uttrykk som A=B, Pris<5 osv gir alle boolske verdier. Dersom du vil sammenligne medfeltverdien i en spørring i en av kriterie-radene kan du droppe feltnavnet i uttrykket. Dersomfeltnavnet er Pris kan uttrykket ovenfor skrives som <5 istedet.

Verdiene fra de boolske feltene og sammenligningene kan så kombineres med de boolskeoperatorene

Operator BetydningAND ogOR ellerNOT ikke

Tabell 7.3

(A=B) AND (Pris<5) vil dermed være sant bare når A er lik B og Pris er mindre enn 5.Dersom bare en av delene eller ingen av dem stemmer vil uttrykket være usant. Hadde vi valgtOR ville uttrykket blitt sant så lenge en av delene var sanne. NOT fungerer ved å snu en verdifra sant til usant og omvendt.

Akkurat som med talluttrykk kan du bruke parenteser for å bygge opp mer kompliserteuttrykk.

7.5.3 AggregatfunksjonerDet er også mulig å bruke ferdigdefinerte (eller egendefinerte, hvis du lærer deg Access Basic)funksjoner i spørringer. Funksjonene kan skrives rett inn i uttrykkene eller, hvis de eraggregatfunksjoner, legges inn via egne rader i spørrevinduet. Aggregatfunksjonene erfunksjoner som tar data fra ett felt over flere poster og trekker noe ut av dem. Typiskeeksempler er gjennomsnitt, sum og telling.

Vi kan f.eks. lage en liste som sorterer folk etter hvor mange biler de har. Da må vi først telleantall biler de har. Vi kan ta utgangspunkt i Q_Biler på eier-spørringen, og lage en ny spørringbasert på denne. Vi vil da ikke lenger sortere på Navn, så 'Stigende' der må endres til 'Ingensortering'. Deretter kan du velge Vis|Totaler. Det vil da komme opp en ny rad der det står'Grupper etter' i alle kolonner. Den endrer du til 'Antall' i Merke-kolonnen. I dette feltet vil detnå vises for hver person hvor mange poster i T_Bil som kan knyttes til denne personen (viaEier-ID-forholdet) og som har en verdi i 'Merker'-feltet. Så sorterer vi synkende på Merker-kolonnen, og døper den til 'Antall biler'. Spørringen ser da slik ut:

Innføring i databaser

1096 - Lars Marius Garshol 39

Figur 7.5

Hvordan dette ser ut i dataark-visning kan du vel tenke deg. Hvis ikke kan du jo prøve detselv.

De viktigste aggregatfunksjonene er:

Navn BetydningSummer Summen av feltverdieneMaks Den største feltverdienMin Den minste feltverdienAntall Antall poster som har en verdi i feltetGjennomsnitt Gjennomsnittet av feltverdiene

Tabell 7.4

7.5.4 GrupperingJeg sa i avsnittet over at aggregatfunksjoner ‘tar data fra ett felt over flere poster og trekkernoe ut av dem’. Det som er viktig her er hvilke poster det er funksjonene opererer over. Detteavgjøres av grupperingen. Dersom vi ikke grupperer i det hele tatt vil funksjonene operere påalle postene (snittet av alle poster, antall poster, summen av alle poster etc.) Dersom vi grup-perer på f.eks. Person_ID vil f.eks. sum-funksjonen summere for hver person.

Dersom vi tenker oss en spørring som i eksempeldatabasen gir følgende resultat:

Innføring i databaser

1096 - Lars Marius Garshol 40

Registreringsnummer Merke EierSP 83400 Toyota MR2 Anne TrytiDE 72719 TransAM Anne TrytiDE 39291 Dodge Van Anne TrytiAJ 27381 Alfa Romeo GTV Tore BorregaardAJ 23992 Alfa Romeo Giulia Tore BorregaardUC 39921 VW Golf GTI Bertha SkottlandBN 26131 Nissan Bluebird Jarl AndresenDE 66477 Opel Kadett Hans Hansen

Tabell 7.5

Dersom vi ut ifra den samme tabellen (eller flere tabeller, det spiller ingen rolle) lager en spør-ring med ett eneste felt: Antall(Registreringsnummer) vil resultatet bli en eneste rad der det står8. Da har Access gått gjennom tabellene og funnet 8 poster med en verdi i feltet Registrer-ingsnummer.

Dersom vi i spørringen nå legger inn ett felt til, nemlig Eier, vil ting bli annerledes. Da vilfølgende bli resultatet:

Eier Antall(Registreringsnummer)Anne Tryti 3Tore Borregaard 2Bertha Skottland 1Jarl Andresen 1Hans Hansen 1

Tabell 7.6

Det som nå har skjedd er at Access teller antall poster som har lik verdi i Eier-feltet. Vi sier atvi har gruppert på Eier, og da teller vi hvor mange biler hver eier har. Det er ikke mulig å viseet felt i Access uten å gruppere på det.

Det betyr at dersom vi setter inn feltet registreringsnummer også så vil vi gruppere på Eier ogRegistreringsnummer, og dermed teller vi antall poster som har lik verdi i Eier og Registrering-snummer-feltene. Resultatet blir en linje for hver linje i Tabell 7.5, og hver av dem vil haantallet 1.

Innføring i databaser

1096 - Lars Marius Garshol 41

7.6 Datamanipulasjon med spørringer

Så langt har vi bare snakket om utvalgsspørringer, men det finnes også datamanipulerings-spørringer. Disse kan brukes til å systematisk bearbeide data, og er svært praktiske siden dekan utløses fra trykk på knapper i skjemaer og andre hendelser. Det fine med dette er at du viaet knappetrykk kan oppdatere 1000 poster på to sekunder.

De viktigste typene er:

Navn FunksjonOppdaterings- Endrer dataene i enkelte felter i de utvalgte posteneFøy til- Legger inn nye poster i en tabellSlette- Sletter de utvalgte postene fra en tabell

Tabell 7.7

Du velger den spørringstypen du vil ha i Spørring-menyen.

Slettespørringer er de enkleste å bruke. De fungerer akkurat som en utvalgsspørring, bortsettfra at de sletter de postene utvalgsspørringen ville vist frem. (Dataark-visning viser deg postenesom ville blitt slettet om du hadde kjørt spørringen, eller valgt Spørring|Kjør i menyen.)

Oppdateringsspørringer har en ekstra rad i design-vinduet. Der skriver du et uttrykk sombeskriver hva feltet som står øverst skal endres til.

Dersom du velger en Føy til-spørring må du først velge hvilken tabell de nye postene skal føyestil. Deretter dukker det opp en ekstra rad i design-vinduet som heter 'Føy til'. Der velger duhvilket felt spørringsfeltet skal settes inn i.

Innføring i databaser

1096 - Lars Marius Garshol 42

8. Oppbygning av grensesnitt i Windows

8.1 Skjematyper og deres rekkefølge

De fleste databaser har store likheter, og det gjør at det finnes en del greie klisjeer for opp-bygningen av grensesnittene. Særlig er det noen typer skjemaer som er vanligere enn andre, ogde gjennomgår jeg her. Du er ikke nødt til å lage dine egne databaser akkurat slik, men det kanvære greie tips å ha med seg.

Utformingen av brukergrensesnitt er noe det forskes mye på i disse dager. Vi skal ikke gå såveldig dypt i dette, men husk: databasen din bør være enkel å bruke (brukerne bør spares forunødvendig venting og tasting), enkel å forstå (brukerne bør kunne forstå hva de gjør) og denbør være behagelig å se på.

8.1.1 HovedmenyBrukerne dine bør være beskyttet mot å måtte sitte og navigere rundt i databasen ved hjelp avdatabasevinduet. Istedet bør du lage et eget skjema som fungerer som hovedmeny. Derfra skalalle funksjoner som brukeren skal kunne utføre være tilgjengelige. Det er best å ikke ha data ihovedmenyen, men istedet bare mulighetene til å velge mellom forskjellige skjemaer. Dersomdatabasen er stor kan disse igjen være hovedmenyer for sine deler av databasen.

Hovedmenyen bør ha: overskrift som forklarer hvilken database dette er, en knapp for hvertskjema brukeren kan gå til og kanskje et bilde til pynt og illustrasjon.

Et litt mer avansert, men ikke nødvendigvis bedre alternativ er å definere sin egen menylinjeistedetfor en hovedmeny. Du kan ha de samme valgene, men du gjør dem tilgjengelige på enannen måte.

8.1.2 Velg post-skjemaetDu har sannsynligvis mange poster i databasen din, og mange data om hver enkelt post. Det erderfor greit å dele endringen av data opp i to skjemaer: et til å velge posten som skal endres,og et til å gjøre endringene.

Det første skjemaet bør ikke vise mer data om hver enkelt post enn det som trengs til åidentifisere posten for brukeren. Dette kan gjøres enten ved å bruke detalj-delen av skjemaet(se avsnitt 9.3), eller ved å bruke en listeboks (se avsnitt 9.2). Postene bør være sortert, ellersblir det vanskelig å finne fram.

Skjemaet bør også ha en overskrift og noen knapper. Følgende knapper bør være med: lukkskjema, opprett ny post, slett denne posten og endre denne posten. Det siste kan det være flereknapper for, spesielt hvis vi fra denne posten er interessert i å gå inn i flere andre tabeller.

Dette skjemaet kan fungere som endre data-skjema også hvis tabellen har så få felter at du kanse alle samtidig.

Innføring i databaser

1096 - Lars Marius Garshol 43

8.1.3 Endre data-skjemaetDette skjemaet viser frem de interessante dataene om posten. (Av og til er det så mange data atdet lønner seg å splitte dem på flere skjemaer.) Skjemaet bør ha en overskrift, og for hvert feltbør det være en etikett (med feltets navn) og en kontroll. Enten en tekstboks, listeboks,kombinasjonsboks, merkefelt eller annet. Disse skjemaene blir ofte rotete, så det lønner seg ålegge kontrollene mest mulig på linje med hverandre og systematisere det hele så mye sommulig.

8.2 Hvordan lage et grensesnitt

For noen går dette automatisk (særlig de som har endel trening og erfaring), mens andre slitermed å finne ut hvordan de skal bygge opp grensesnittene til programmene sine. Dette vil sann-synligvis komme seg etterhvert som du får mer erfaring, men før du får det lønner det seg åvære metodisk og grundig.

Begynn med å lage en liste over enkelthandlinger bruker sannsynligvis er interessert i å utføre.Dette bør være ting som (for å holde oss til eksempelet vårt): slette bil, slette person, endredata om person etc.

Deretter bør du begynne å planlegge skjemaene dine ved å tegne dem på papiret, og sette opppå et eget ark forbindelsene dem imellom. Mens du gjør dette bør du forsøke å holde tommel-fingerreglene klart for deg og prøve å tenke på hvordan du helt konkret skal få dette til iAccess. Prøv også å bygge systemet opp etter det skjemasystemet jeg foreslo i avsnitt 8.1.

8.3 Tommelfingerregler for skjemaer

Å lage et godt brukergrensesnitt er svært vanskelig, og selv store datafimaer har tabbet seg utpå dette. Det krever også trening og forståelse for hvordan brukeren jobber, samt kunnskapom hvordan mennesker oppfatter hva de ser. Den ideelle brukergrensesnittdesigner er selvbruker og programutvikler, samt psykolog og tankeleser. (Mao: han/hun finnes ikke.)

Her er imidlertid noen tommelfingerregler som kan være greie å ha:• Sørg for gode navn på alle felter, knapper og skjemaer. Gode navn er korte, men likevel

forståelige for brukeren. Det viktigste er at de er konsekvente! Samme ting må hete detsamme overalt.

• Tabulatorrekkefølgen må være naturlig.• Bruk så få farger og skriftsnitt (fonter) som mulig. Alt annet blir bare forvirrende for

brukeren.• Sørg for at kontrollene ligger på linjer.• Det lønner seg å samle feltene i en gruppe, og ha knappene for seg. Ting som hører sammen

bør stå sammen.• Ikke ha for mange elementer i ett skjema. Synes du det blir for mye så del det på flere

skjemaer.• Skjemaene bør ligne på hverandre. Prøv å gjøre tingene på samme måte overalt i samme

database. Du kan f.eks. ha en fast farge på overskriftene dine og en fast farge på Lukk-knappen.

Innføring i databaser

1096 - Lars Marius Garshol 44

8.4 Småtips

Dersom du har veldig mange poster kan det være lurt å utvide velg post-skjemaet med et parkontroller som du kan bruke til å begrense postene som vises. Når du søker på person kan duf.eks. ha et felt der du kan skrive inn en del av navnet, og en knapp som da viser bare personermed navn som inneholder denne teksten.

Det kan også være en ide å begrense antall skjemaer brukeren må igjennom for å komme dithan/hun vil. Alle disse skjemaene må jo lukkes igjen, og det kan bli en plage.

Det kan også være lurt å lage et spesielt skjema med informasjon om programmet. Der bør detstå hva programmet heter, hvem som har laget det, og kanskje en del annen informasjon, somnår det er laget osv. Det lønner seg også å ha med et versjonsnummer på programmet, slik atdu enkelt kan se om en utgave av det er den siste eller ikke. Dersom programmet skal kopierestil flere maskiner er dette ganske viktig. Et slikt skjema kan også fungere som reklame for degselv som programutvikler.

Innføring i databaser

1096 - Lars Marius Garshol 45

9. Skjemaer i Access: Bakgrunn

9.1 Hva er et skjema?

Et skjema i Access er et dokumentvindu. Det kan inneholde hva som helst som vanlige vinduerkan inneholde, og fungerer som vinduer i andre programmer. Det vinduer brukes til er å vise,endre og skrive inn data, samt å velge mellom forskjellige handlinger programmet tilbyr.Eksempler på det siste kan være å lukke skjemaer, åpne nye skjemaer, utløsehandlingsspørringer eller vise rapporter.

Du kan selvfølgelig lage en database basert kun på tabeller og spørringer, men da er dettvilsomt om noen andre enn du kan bruke den, og særlig pen blir den ikke. For å gjøredatabasen mer brukervennlig kan du lage et brukergrensesnitt mellom selve databasen ogbrukeren. Dette er det du gjør med skjemaene du lager.

9.2 Hva består et skjema av?

Et skjema er som sagt et vindu, og består av de samme kontrollene som vanlige Windows-vinduer. De kan deles i to grupper: de standardiserte som sitter på vinduskantene, somrullefelter, postvelger, kontrollmeny-boks osv og de som du selv plasserer i vinduet.

Figur 9.1

EtikettTekstfeltKombinasjonsboksListeboks

KontrollboksPostvelgereRullefeltStørrelse-knapperNavigasjonsknapper

Innføring i databaser

1096 - Lars Marius Garshol 46

De forskjellige kontrollene fungerer på forskjellige måter og har forskjellige funksjoner. Vi kandele dem i to typer: handlingskontroller og datakontroller. Handlingskontrollene utløser enhandling, men forandrer ikke data direkte, slik datakontrollene gjør.

Jeg regner med at dere allerede kjenner til hvordan man bruker disse kontrollene, og nøyer medmeg å ha satt navn på dem her.

9.3 Skjemaets deler

Når du designer et skjema i Access kan det bestå det av opptil fem deler. Disse er i rekkefølge:• topptekst i skjema• topptekst på side• detalj• bunntekst på side• bunntekst i skjema

Topp- og bunntekstene på side brukes bare ved utskrift på printer, og er derfor ikke interes-sante for oss. Topp- og bunnteksten hentes fram ved å velge Vis | Topptekst/bunntekst iskjemaet.

Dersom du baserer et skjema på en spørring vil topp- og bunnteksten vises en gang hver,henholdsvis øverst og nederst på skjemaet. Imellom dem gjentas detaljen en gang for hver rad ispørringen. Dermed brukes topp- og bunntekst til overskrifter, generelle kontroller oglignende, mens detaljen brukes til å vise data fra radene i spørringen.

9.4 Skjemaveiviserne

Dersom du vil lage et skjema tar du opp Skjema-kortet i databasevinduet og trykker Ny. Du vilda bli spurt om du vil lage skjemaet selv eller om du vil ha hjelp av en veiviser. Veiviserne kanvære svært greie og spare deg for mye kjedelig tegnearbeid. Når veiviserne har laget et skjemafor deg er det et vanlig skjema som alle andre og kan redigeres og justeres manuelt. Veivisernehar imidlertid sine helt klare begrensninger, så du vil ofte være nødt til å lage dine egneskjemaer fra bunnen av.

De forskjellige veiviserne er• AutoSkjema Denne veiviseren lager et nytt skjema direkte. Skjemaet er basert på den valgte

tabellen/spørringen og viser alle feltene i kun en post i vinduet samtidig. Du må brukepostvelgerne til å bla mellom postene. Denne typen skjemaer anbefales ikke alene siden degir så liten oversikt. De kan imidlertid brukes som vis/endre data-skjema.

• Enkolonneskjema Denne varianten ligner svært på AutoSkjema, men lar deg velge mellom flere design-

varianter og feltene i skjemaet.

• Tabellskjema

Innføring i databaser

1096 - Lars Marius Garshol 47

Denne veiviseren lager skjemaet på samme måte som enkolonne-veiviseren, men legger allefeltene i en rad istedet, slik at du får plass til flere poster i vinduet samtidig. Denne variantenblir ikke særlig pen, men den blir langt mer oversiktlig enn enkolonne-varianten, og kanbrukes som både velg post-skjema og endre data-skjema, hvis det ikke er for mange felter.

• Diagram Denne veiviseren lar deg lage skjemaer som viser grafer av dataene i en spørring/tabell. Den

er svært hendig for å lage skjemaer som ellers hadde vært vanskelige å lage, og som tar segsvært bra ut grafisk. Selve diagrammet er ett enkelt objekt fra MS Graph, som egentlig ikkeer en del av Access i det hele tatt, men som følger med Office-pakken.

• Hovedskjema med delskjema Denne veiviseren lar deg lage skjemaer som inneholder et nytt skjema inne i seg. De egner

seg godt til å vise en post i en tabell, og en rekke tilknyttede poster i en annen tabell.

9.5 Jobbe med kontroller

I et skjema oppretter du enklest en ny kontroll fra verktøylinjen du får opp ved å velgeVis|Verktøylinjer i skjema-design-visning. Det gir deg verktøylinjen under.

Figur 9.2

Bortsett fra de to nederste knappene, som er av/på-knapper, og den øverste, som brukes til åvelge kontroller er alle knappene tegneverktøy. Du velger det verktøyet du ønsker, trekker detopp på skjemaet, og vips så er det opprettet. Dersom veiviser-knappen er nede og kontrollenhar en veiviser, vil en dukke opp for å hjelpe deg med designet.

Siden kan du velge en hvilken som helst kontroll. En rekke svarte rektangler vil da komme opprundt kontrollen. Disse kan du dra i for å endre størrelsen på kontrollen, eller du kan flyttekontrollen ved å dra midt på den. Kontrollen plasserer seg på et rutenett i skjemaet så lengeFormat | Fest til rutenett er valgt. Dette kan du unngå ved å holde inne Ctrl mens du drar.

PekerEtikettAlternativgruppeAlternativknappKombinasjonsboksDiagramLinjeSideskiftVeivisere av/på

TekstboksVeksleknappAvkrysningsboksListeboksDelskjema

RektangelKommandoknappVerktøylås

Innføring i databaser

1096 - Lars Marius Garshol 48

Dersom du har paletten oppe (Vis|Palett), kan du velge kontrollen og så endre farge på denved å trykke på paletten. Kontrollens egenskaper kan også redigeres ved å velge kontrollen ogtrykke høyre mustast.

9.5.1 Hvordan velge kontrollerKontroller kan velges på flere måter. Du kan velge dem en for en ved å klikke direkte på dem,eller du kan holde shift inne mens du klikker på dem. Hvis du holder shift inne idet du trykkerpå et element som ikke er valgt velges det i tillegg til allerede valgte elementer, men hvis detvar valgt slutter det med å være det.

Du kan også dra et rektangel over de elementene du vil velge. Alle elementene som er inne idette rektangelet vil bli valgt. Og dersom du klikker på linjalene (enten den vertikale eller denhorisontale) vil alle elementer som ligger på akkurat den høyden/bredden velges. Du kan ogsåklikke og dra på linjalene, slik at alle som ligger i det intervallet du drar over velges.

9.5.2 EgenskaperAlle deler av en Access-database har egenskaper. For et skjema vil dette si slike ting som navn,overskrift, hvilken spørring det er basert på osv. Egenskapene til et objekt vil altså avgjørehvordan det oppfører seg.

Egenskapene til et objekt kan endres ved at du klikker på objektet med høyre mustast, ogvelger Egenskaper i hurtigmenyen som da kommer frem.

Innføring i databaser

1096 - Lars Marius Garshol 49

10. Skjemaer i Access: Detaljene

10.1 Hvordan kontrollene fungerer

De fleste kontrollene er enkle å bruke, men det er en del ting som bør nevnes i forhold tilhvordan de skal lages.

10.1.1 HendelserHver gang du klikker i et vindu eller trykker på en tast skjer en ‘hendelse’. Hver gang enhendelse inntreffer i et vindu eller en kontroll utløses en ‘hendelseshåndterer’ (event handler),som avgjør hva som skal skje. Denne er tilgjengelig som en egenskap ved vinduet/kontrollen,og kan være enten et uttrykk, en makro eller en prosedyre i Access Basic.

10.1.2 TekstbokserTekstbokser er som regel tilordnet et felt i spørringen som skjemaet er basert på. Da visesfeltverdien til gjeldende post i boksen, og dersom bruker endrer denne verdien vil feltverdienogså endres idet gjeldende post skifter eller vinduet lukkes. Mao: tabellen oppdateres når duvelger en ny post eller vinduet lukkes. Tekstboksene oppdateres fra tabellene stadig vekk, slikat hvis verdien skulle endres et annet sted vil du kunne se det straks.

Du kan også lage en tekstboks som ikke er tilknyttet noe felt, denne vil da fungere som deandre tekstboksene, men vil ikke oppdatere noe felt. Verdien er likevel tilgjengelig i spørringer,makroer og prosedyrer som [forms]![Skjemanavn]! [Kontrollnavn]. Dette krever imidlertid atskjemaet er åpent, ellers vil du få en feilmelding.

10.1.3 Kombinasjons- og listebokserKombinasjonsbokser og listebokser viser data i ‘tabellform’, så de kan ikke vise enkle felterslik en tekstboks kan. Det de viser er spørringer eller tabeller, med utvalgte felter fra utvalgteposter, og du velger en av postene. Det som lagres i kontrollen er verdien i ett av feltene (detbundne feltet) i den valgte posten. Hvilket felt dette er velger du når du lager boksen.

Hvis boksen skal oppdatere ett felt i en tabell må det bundne feltet inneholde den verdien somskal lagres i det feltet som skal oppdateres. For fremmednøkler vil dette være primærnøkkelen.

Kombinasjons- og listebokser oppdateres ikke automatisk, siden dette vil kreve for mye data-kraft. Istedet kan du oppdatere dem med Access Basic-kommandoen «DoCmd Requery[Boksens navn]». Denne kommandoen kan du sette inn i de hendelsesprosedyrene du måtte habehov for den i.

10.1.4 KnapperNår en knapp trykkes ned utføres hendelseshåndtereren til knappen. Denne vil utføre det somskal skje når knappen trykkes ned. Hendelseshåndtereren skrives av veiviseren hvis denne eristand til det, hvis ikke må du skrive den selv. Du kan også endre kode skrevet av veiviseren.

Innføring i databaser

1096 - Lars Marius Garshol 50

Dersom du lærer deg Access Basic kan du gjøre svært mye mer enn det du er istand til å få tiluten. Vi kan imidlertid ikke gå inn på det i dette kurset, ettersom det ville kreve altfor mye tid.

10.2 Viktige egenskaper ved kontroller

De fleste kontroller har en del egenskaper felles. En av dem er ‘Navn’, som er det den høres utsom. Dette er navnet du bruker til å henvise til kontrollen i et uttrykk eller andre steder.

‘Kontrollkilde’ er det feltet i den underliggende tabellen/spørringen som kontrollen henter sinedata fra og oppdaterer.

‘Tittel’ er teksten som står på kontrollen for å beskrive den overfor brukeren.

‘Tekstjustering’ angir om teksten skal være inntil venstre eller høyre kant, eller eventuelt væremidtstilt.

‘Spesialeffekter’ kan brukes til å gjøre det visuelle mer spennende, ved å få f.eks. en boks(tekst-, liste- eller kombinasjons-) til å være opphøyd eller senket. Her går det an å prøve segfrem for å se hva som gir best resultat.

10.3 Hvordan lage en kombinasjonsboks

Kombinasjonsbokser er greie å ha når vi har en fremmednøkkel som er koblet til en annentabell og i et skjema trenger å velge en tilhørende post i den tilkoblede tabellen. Den kan ogsåbrukes til å velge når du har en liste med forskjellige verdier et felt kan ha.

Skrittene i kombinasjonsboks-veiviseren er:1. Først må du velge om du vil at veiviseren skal slå opp verdiene i en spørring/tabell eller om

du skal skrive inn verdiene den kan ta. Dersom du velger det siste er neste skritt å velgeantall kolonner, samt å skrive inn verdiene. Hvis boksen er koblet til en fremmednøkkel skalvi slå opp verdiene i den tilkoblede tabellen (evt via en spørring.)

2. Neste skritt er å velge hvilken tabell/spørring kombinasjonsboksen skal hente sine verdier.3. Så må du velge hvilke felter du vil skal vises i kombinasjonsboksen. Hvis boksen er koblet

til en fremmednøkkel må primærnøkkelen være med her. (Sett den opp først av alle.) Taogså med akkurat mange nok felter til at brukerne kan se hvilke poster de har å velgemellom.

4. Så skal du sette kolonnebredden til de forskjellige kolonnene. Har du tatt med enprimærnøkkel som ikke er av interesse for brukeren setter du kolonnebredden dens til 0.

5. Deretter spør Access hvilken av kolonnene den verdien vi skal lagre befinner seg i. Erboksen koblet til en fremmednøkkel er svaret primærnøkkelen.

6. Så må du velge om boksen skal være koblet til et felt i den underliggende tabellen (og itilfelle hvilket), eller om den skal være frittstående.

7. Tilslutt gjenstår det bare å sette navnet, og kombinasjonsboksen din er ferdig.

Innføring i databaser

1096 - Lars Marius Garshol 51

10.4 Hvordan bygge opp et skjema

10.4.1 Endre data-skjemaFørst lager vi et endre data-skjema for tabellen T_Bil i eksempel-databasen. Det gjøres enklestved å opprette en spørring kalt ‘Q_Billiste’, som ganske enkelt viser alle feltene i T_Bil,unntatt Eier. Der henter du istedet inn Navn fra T_Person. Deretter lager du et enkolonne-skjema basert på alle feltene i denne spørringen. Det skjemaet ser slik ut:

Figur 10.3

Siden dette er ment å være et vanlig endre data-skjema tar vi vekk postvelgerne ognavigasjonsknappene. Det gjøres ved å gå til design-visning med Vis|Skjemadesign og klikkemed høyre mustast i det hvite feltet oppe til høyre. Da får du opp et vindu med såkalteegenskaper. Der setter du postvelgere, navigasjonsknapper og rullefelter til Nei.

Så kan vi flytte litt rundt på kontrollene, og strekke dem litt for at de skal passe bedre medfeltstørrelsene.

Fargene ligger nå i en egen tabell, slik at istedet for å taste inn fargene for hånd, og håpe på atvi staver dem riktig hver gang, bruker vi en kombinasjonsboks til å velge dem med. (Detsamme gjelder eier, men der er det så mange poster at vi velger å la det stå. I en skikkeligdatabase ville vi gjort noe med den.)

Vi lager da en Q_Fargeliste som inneholder FargeNr og Navn og sorterer på Navn. Så kan duslette tekstboksen Farge og dens etikett, og opprette en kombinasjonsboks der istedet.Veiviseren vil da la deg plukke ut begge feltene i Q_Fargeliste, og justere kolonnebredden tilhvert av dem. Der setter du kolonnebredden til FargeNr til 0, slik at den ikke synes selv omden er der. FargeNr er nemlig den kolonnen som har verdiene vi trenger. T_Bil har en Farge,som er fremmednøkkel til T_Farge, og der lagres jo fargenummeret. Verdien skal altså lagres ifeltet Farge. Etiketten er grei: den skal hete Farge. Så må du bare gå inn og sette listeboksensegenskap ‘Tekstjustering’ til Venstre, og alt er iorden.

Innføring i databaser

1096 - Lars Marius Garshol 52

Det eneste som mangler da er en knapp til å lukke skjemaet med. Den er ikke absoluttnødvendig, siden det går an å gjøre det via kontrollboksen, men vi tar det med for å illustrerehvordan man lager en knapp.

Knappen lages via knappeverktøyet på verktøylinjen. Først må du imidlertid utvide Bunntekst iskjema, ved å dra i den nedre kanten. Deretter kan du tegne på knappen. Som kommandovelger du Skjemaoperasjoner|Lukk skjema. Resten av veiviseren er mest et spørsmål ompersonlig smak, så der kan du gjøre som du vil.

Skjemaet ser nå slik ut:

Innføring i databaser

1096 - Lars Marius Garshol 53

Figur 10.4

10.4.2 Velg post-skjemaEtter å ha laget endre data-skjemaet kan vi lage velg post-skjemaet. Der velger du hvilken postsom skal vises i endre data-skjemaet. Også dette kan lages med utgangspunkt i Q_Billiste, barevi endrer den til å sortere på Registreringsnummer. Her kan vi velge om vi vil lage ettabellskjema med en veiviser, eller om vi vil lage skjemaet selv fra bunnen av og baserevelgingen på en listeboks istedet. Det siste er penest og enklest for bruker, men det første erraskest.

Siden det første er så enkelt og gir liten læregevinst kan vi velge det andre, og heller bare gi etkortfattet referat av prosessen. Vi starter med å opprette et tomt skjema som ikke er basert pånoen spørring. (Få opp verktøykassen, paletten og skjema-design-verktøylinjen dersom de ikkekommer opp av seg selv.)

Så er det bare å velge detalj-delen og sette bakgrunnsfargen til vanlig Windows-grå. Derettersetter vi inn overskriften “Velg bil” og midtstiller den. Mens den er valgt kan skrifttype, -størrelse og justering endres med skjema-design-verktøylinjen. Bakgrunnsfargen må ogsåendres med paletten.

Før vi lager listeboksen midt i vinduet må vi lage en spørring som henterSå er det bare å trekke opp en listeboks midt i vinduet. Den skal vise verdier fra spørringen‘Q_Billiste’, nærmere bestemt feltene ‘Registreringsnummer’, ‘Merke’ og ‘Eier’. Så måkolonnebreddene justeres, og feltet ‘Registreringsnummer’ velges som det interessante feltet iboksen. Boksen kan f.eks. døpes ‘Valgt bil’. Så oppretter veiviseren boksen for deg, og du kannøye deg med å plassere den på nytt, siden veiviseren endrer bredden på den. For å gjøreskjemaet litt penere kan vi endre egenskapen ‘Spesialeffekt’ til ‘Senket’.

Det eneste som gjenstår da er kommandoknappene. I koden til disse knappene brukes av og tilskjemanavnet, og før du har lagret er det ‘Skjema1’, så du må lagre skjemaet først.

Vi trenger knappene ‘lukk’, ‘ny’, ‘vis’ og ‘slett’. Lukk lages på samme måte som før. ‘Vis’lages ved å velge kommandoen ‘Åpne skjema’ i veiviseren, og skjemaet ‘F_Bil’, som vi lagde i

Innføring i databaser

1096 - Lars Marius Garshol 54

forrige avsnitt. Vi ønsker å vise bestemte data i skjemaet F_Bil, og velger å koble feltene‘Valgt bil’ (som jo inneholder registreringsnummer, det valgte vi ovenfor) med‘Registreringsnummer’. Da vil bilen med samme registreringsnummeret den som ble valgt ilisteboksen bli vist, og siden registreringsnummer er primærnøkkel må dette være samme bilen.

‘Ny’-knappen er litt småvanskelig. Kommandoen er ‘Ny post’, men vil ikke fungere alene.Hadde vi laget en tabell-rapport ville det gått greit, men som det er vet ikke Access hvilkentabell den skal lage en ny post i, og den vet ikke hvilket skjema den skal vises i. Alt detteordnes ved å klikke ‘Bygg hendelse’ i hurtigmenyen til knappen, og sette inn linjen DoCmdOpenForm “F_Bil” over linjen med DoCmd GotoRecord ... Dette er eninstruksjon i Access Basic som åpner skjemaet F_Bil. Deretter viser den andre instruksjonen enny post i skjemaet. Når F_Bil lukkes vil ikke dataene i listeboksen oppdateres av seg selv. Detkan ordnes ved å legge inn en linje etter DoCmd Close på lukk-knappen i F_Bil der det stårDoCmd forms![F_Velg bil]![Valgt bil].Requery . Dersom F_Velg bil-skjemaet ikke er åpnet vil dette ikke fungere, og du vil få en feilmelding. Det får heller være...

‘Slett’-knappen er også litt tung. Hadde skjemaet vært et tabell-skjema ville det ikke vært noeproblem, men som det er blir det tungvint. Da kunne veiviseren gjort jobben dersom du valgtekommandoen ‘Slette post’. Som det er kan vi lage en slettespørring og utløse den fra knappen.Lag en slettespørring som sletter en post med registreringsnummer lik [forms]![F_Velgbil]![Valgt bil]. Dette uttrykket betyr innholdet i kontrollen [Valgt bil] i skjemaet [F_Velg bil]([forms] betyr skjemaer.) Denne spørringen kan du kalle ‘Q_Slett bil’.Så kan du skru av veiviserene og tegne knappen (og sette på veiviserene igjen.) Du kan endreteksten på knappen ved å dobbeltklikke på den. Deretter kan du lete opp egenskapen ‘Vedklikk’ og trykke på ‘...’ på høyrekanten i vinduet, velg så ‘Kodebygger’ og skriv:

DoCmd OpenQuery “Q_Slettbil”DoCmd Requery “Valgt bil”

Dette skal stå mellom de to linjene som allerede er i vinduet. Den første linjen åpnerslettespørringen som sletter den bilen som er valgt med listeboksen, mens den andre oppdatererpostene i listeboksen.

Vinduet kan da f.eks. se slik ut:

Innføring i databaser

1096 - Lars Marius Garshol 55

Figur 10.5

10.4.3 Hovedmeny-skjemaetSå kan vi lage hovedmenyen. Der lager vi en overskrift, en avslutt-knapp og knapper for deforskjellige delene av programmet. Vi kan f.eks. lage en for kundelisten og en for en enkelfargeliste. Det eneste som er nytt her er avslutt-knappen, der kommandoen ligger under‘Applikasjon’ og heter ‘Avslutt program’.

For øvelsens skyld kan vi også legge inn et lite ClipArt-bilde. Du må da velge verktøyet forOLE-objekter, og så velge Microsoft Clip Art. Så er det bare å velge bildet du vil ha, i vårttilfelle velger vi en bil.

Hovedmenyen ser da slik ut når vi er ferdige:

Innføring i databaser

1096 - Lars Marius Garshol 56

Figur 10.6

10.4.4 Skjema med underskjemaTilslutt kommer rosinen i pølsa: et skjema med underskjema. Vi bør ha et skjema der vi leggerinn eiere, og der kan godt bilene de eier vises i et underskjema. For å få til dette trenger vi etvelg post-skjema for eiere og baserer det på en spørring vi kaller Q_Eierliste. Så må vi lage enspørring til underskjemaet, den må inneholde de interessante dataene fra T_Bil slik at vi kanvise dem i underskjemaet, og Eier, slik at vi kan vise bare de bilene personen eier. Vi kan kalleden Q_Eide biler.

Selve skjemaet lages med Skjema med underskjema-veiviseren, og baseres på Q_Eiereliste,mens underskjemaet som sagt baseres på Q_Eide biler. På hovedskjemaet skal alle felteneunntatt ID, som jo ikke er interessant for noen, vises, mens på underskjemaet tar vi medRegistreringsnummer og Merke. (Eier behøver ikke vises, den må bare være i spørringen.)

Mens veiviseren lager skjemaet spør den om navnet på underskjemaet, det er som det skalvære. Den klarer heller ikke å lage en kobling mellom skjemaene selv, men det kan vi ordne forden. Etter å ha tatt vekk postvelgere, navigasjonsknapper og rullefelter kan du gå inn påegenskapene til underskjemaet. Der må KobleOverordnetFelt og KobleUnderordnetFelt settestil henholdsvis ID (som er i hovedskjemaet) og Eier (som er i underskjemaet).

Da er skjemaet klart, og ser slik ut:

Innføring i databaser

1096 - Lars Marius Garshol 57

Figur 10.7

Innføring i databaser

1096 - Lars Marius Garshol 58

11. Rapporter i Access

11.1 Skjemaer/rapporter - forskjeller og likheter

Skjemaer og rapporter er svært like, forskjellen er stort sett at rapporter er helt passive ogberegnet på å skrives ut. Det betyr at innholdet i tekstboksene ikke kan endres og at knapper,listebokser, kombinasjonsbokser og andre kontroller ikke finnes.

I tillegg kommer det inn en del nye ting, som sideinndeling, topp- og bunntekster og slikt. Deter også lagt en del bedre til rette for aggregatfunksjoner og gruppering i rapporter enn iskjemaer.

I en jobbsituasjon der noen har bestilt databasen blir det ofte mange rapporter, og mye pirkover hvordan de skal se ut. Brukerne har som regel enten meget bestemte, men svært uklarekrav til hvordan rapportene skal se ut, eller svært klare og helt ufravikelige meninger.

11.2 Hvordan lage rapporter

Rapporter lages på samme måte som skjemaer. Elementene redigeres og endres på sammemåte, og inndelingssystemet er det samme. Veiviserene er også stort sett de samme som forskjemaer. (Se avsnitt 11.5.)

Inndelingene følger det samme systemet som i skjemaene, men er litt mer avanserte. Følgendeinndelinger finnes:• Topp-/bunntekst i rapport Dette er en del som kommer aller øverst i rapporten og aller nederst.

• Topp-/bunntekst på side Denne delen gjentas øverst og nederst på hver side, uavhengig av alt annet.

• Topp-/bunntekst til gruppering på felt Det som står her gjentas en gang for hver verdi i feltet du har gruppert på. Det er fullt mulig

å ha flere slike og dermed få grupper inne i grupper. Detaljene følger den innerstegrupperingen. Eksempelvis kunne man gruppere soldatene først på kompani, og deretter påtropp, og la detaljen være enkeltsoldater.

Det er da mulig å gjøre separate beregninger for kompani og soldat, og også mulig å

kombinere disse. Mer om dette i avsnitt 11.6.

• Detalj Detaljen er eksakt den samme som i skjemaer.

Innføring i databaser

1096 - Lars Marius Garshol 59

11.3 Et enkelt eksempel

Vi lager en enkel rapport, bare for å illustrere hvordan det gjøres. Har du fått til skjemaerskulle du ikke ha store problemer med dette. Jeg velger å lage en liste over alle bileierene idatabasen. Den baseres på en dertil egnet spørring (Q_Personer), og lages fra bunnen av.

I ‘topptekst side’ setter vi inn et tekstfelt med teksten ‘Bileieroversikt’ som midtstilles oggjøres stor. Deretter settes kolonneoversikter inn under, og en linje trekkes under disse. (Sidenmå utvides til 16 på den horisontale linjalen for å få plass til alt.)

Under detalj settes feltene inn. Det lønner seg å bruke Ctrl til å gjøre detaljen så liten sommulig, slik at listen ikke tar mer plass enn nødvendig.

Tilslutt kan vi sette inn en liten festlig sak på bunntekst side. Trekk opp feltet, og gå inn påegenskapen kontroll-kilde med de tre prikkene (...) til høyre. I uttrykks-byggeren kan du velge‘Vanlige uttrykk’ og ‘Sidetall’. Nå vil sidetallet vises der du trakk opp feltet. (Pass på å at detstår = aller først i feltet.)

Prøv dette selv for å få se resultatet.

11.4 Hvordan bruke en rapport

Når en rapport åpnes kjøres spørringen den er basert på, og vi får noe som ser ut som et Word-dokument. Det kan enten forhåndsvises på samme måte, eller skrives ut på samme måte, menden kan ikke endres direkte.

Også fra knapper i skjemaer kan en av to kommandoer utløses: forhåndsvis rapport eller skrivut rapport. Begge ligger under rapport-operasjoner i knapp-veiviseren.

Utskrift gjøres med Ctrl+P, og derfra fungerer alt som ellers i Windows. Nederst på skjermener det navigasjonsknapper som kan brukes til å bla mellom sidene, mens musa kan brukes til åzoome inn og ut. (Et klikk er inn, deretter er neste ut, og så inn igjen... Det zoomes inn påstedet der du klikket.)

11.5 Rapportveiviserne

Akkurat som for skjemaer finnes det en rekke rapportveivisere som hjelper deg med å lagerapporter. De er nyttigere enn skjemaveiviserene, i og med at resultatet ikke blir så stygt somfor skjemaene. De sparer deg som regel også for masse småjustering og fikling, selv om detalltid er litt igjen.

Veiviserene er:

Innføring i databaser

1096 - Lars Marius Garshol 60

Navn BeskrivelseEnkolonne Som enkolonne for skjemaer, nesten ubrukelig.Grupper/totaler Se avsnitt 11.6.2.Etiketter Brukes til adresseetiketter og andre typer etiketter.Summering Som grupper/totaler, men med litt ekstra for summeringer.Tabell Som tabell for skjemaer.AutoRapport Som AutoSkjema.

Tabell 11.1

11.6 Rapporter med gruppering

11.6.1 Hva er gruppering, og hvorfor bruke det?Gruppering for rapporter er akkurat det samme som for spørringer, men man kan gjøre littandre ting med det. (Gruppering i spørringer står forklart i avsnitt 7.5.4.) Dersom du foreksempel vil vise alle kurs og for hvert kurs alle påmeldte soldater vil du dersom du ikkegrupperer få noe a la Tabell 11.2.

Kursnavn SoldatInnføring i databaser Stein Arne SlåttenInnføring i databaser Ingvald StrømmeInnføring i databaser Tommy WilsonStrikkekurs Kjetil RavnåsStrikkekurs Arvid Gundersen

Tabell 11.2

Dette er resultatet fra spørringen. Hvis vi nå lager en rapport der detaljen inneholder Kursnavnog Soldat, og så har en topp- og bunntekst i rapporten vil rapporten se ut omtrent somspørringen. Problemet med det er åpenbart: kursnavnet gjentas for hver eneste soldat. Da er enløsning av følgende type langt mer interessant:

Innføring i databaser

1096 - Lars Marius Garshol 61

Påmeldinger

Innføring i databaserStein Arne SlåttenIngvald StrømmeTommy Wilson

StrikkekursKjetil RavnåsArvid Gundersen

Dette kan du få til ved å gruppere på kurs og ha en egen topp- og bunntekst for hvert kurs.

11.6.2 GrupperingsveiviserenGrupperingsveiviseren guider deg gjennom det å lage en rapport med gruppering. Som regel erdette den greieste måten å gjøre det på. Som eksempel skal vi lage en oversikt over bilene tilhver enkelt bileier, basert på spørringen i Figur 7.4.

Ny rapport opprettes ved å velge rapportkortet i databasevinduet og trykke Ny-knappen.Deretter velger du spørringen den skal baseres på og Grupper/totaler-veiviseren.

Deretter går veiviseren gjennom følgende skritt:1. Velg ut feltene som skal være med i rapporten. Dette er kjent kost fra skjemaene.2. Velg feltene du vil gruppere på i rekkefølge. Dette fungerer på samme måte som skritt 1.3. Her velger du hvordan du skal gruppere på hvert enkelt felt. Dette kan du bare hoppe over i

99% av tilfellene.4. Så må du avgjøre hvordan du vil sortere postene. (Merk: dette er innen hver enkelt gruppe.)5. Her velger du stil og om du vil ha stående eller liggende utskrift.6. Siste skritt er å velge tittel.

11.6.3 Bruk av inndelingene

Innføring i databaser

1096 - Lars Marius Garshol 62

Figur 11.1

Figur 11.1 viser resultatet av å kjøre veiviseren Grupper/totaler. Når du viser denne rapportenlegges først toppteksten i rapporten (Report header) inn, deretter topptekst side (som sidengjentas for hver side) og så topptekst Navn hvorpå en detalj for hver post med samme navnlegges på.

Det som står under topptekst side (Page header) er etiketter, så de er de samme på hver side.Det som står under detalj og topptekst Navn, derimot, er tekstbokser, så de fylles inn medverdier fra spørringen. Feltene i toppteksten får verdiene til den første posten i den inndelingen,og dersom feltverdiene (som f.eks. for Navn) er de samme for alle postene er det OK. (Hvisikke vil rapporten bli misvisende, men Access vil ikke protestere.)

Innføring i databaser

1096 - Lars Marius Garshol 63

11.6.4 SideinndelingOfte er man interessert i å ha utskriftene slik at hver ny gruppe begynner øverst på et nytt ark.Dette kan gjøres ved å endre egenskapen TvingSideSkift hos inndelingene. Som regel endrerdu den hos topptekst til gruppen, men alle inndelingene har denne egenskapen.

TvingSideskift kan ha verdiene: Ingen, Før inndeling, Etter inndeling og Før og etter. Hvis duvelger Ingen vil nye grupper komme på samme side som de forrige så lenge det er plass.Velger du Før inndeling settes sideskiftet inn foran hver ny gruppe. Velger du Etter inndelingsettes sideskiftet inn etter inndelingen. Hvis dette er Topptekst for gruppen vil sideskiftetkomme mellom toppteksten og detaljene. Velger du Før og etter blir sideskiftene satt inn bådefør og etter, slik at hver slik inndeling kommer på en side for seg.

11.6.5 Gruppering- og sorteringsinnstillingeneDersom du vil lage rapporten selv fra bunnen av, eller vil endre gruppering/sortering så kan dugjøre det ved å klikke med høyre mustast i det hvite feltet øverst til venstre i skjema-design-vinduet. I hurtigmenyen kan du så velge Gruppering og sortering. Da kommer vinduet underopp (Figur 11.2).

Figur 11.2

Hver rad i tabellen er et felt det skal grupperes på, og rekkefølgen her er svært viktig. Skal duse kurs for hver soldat, eller deltagere for hvert kurs? Slike spørsmål er det som avgjøres avrekkefølgen. I kolonnen sorteringsrekkefølge stilles hvordan det skal sorteres på feltet.

I et eget vindu under vises egenskapene til hver enkelt gruppering. ToppTekstforGruppeavgjør om grupperingen skal ha en egen topptekst eller ikke. (Tilsvarende for BunnTekstfor-Gruppe.) GrupperEtter skal i 99% av tilfellene være Hver verdi, mens GrupperingsIntervallnesten alltid er 1. HoldSamlet avgjør om alle postene som tilhører samme gruppe skal vises påen side eller om de kan spres utover flere.

11.7 Aggregatfunksjoner

Du kan sette inn tekstbokser med uttrykk som bruker aggregatfunksjoner i inndelingene i enrapport. Disse aggregatfunksjonene vil da gjelde over alle postene som hører til denne

Innføring i databaser

1096 - Lars Marius Garshol 64

inndelingen. F.eks. kan du i Topptekst kursnavn sette inn en boks med teksten‘=Antall(ID_Soldat)’, og denne vil da telle antall soldater som hører inn under hvert kurs. (Deandre aggregatfunksjonene ville ha reagert på tilsvarende måter.)

Setter du inn en slik aggregatfunksjon i topp- eller bunntekst i en rapport vil den gjelde allepostene i rapporten. Denne metoden er mye enklere enn å bruke aggregatfunksjonene ispørringene, og anbefales brukt istedet.

Innføring i databaser

1096 - Lars Marius Garshol 65

12. Fullstendige applikasjoner i Access

12.1 Selvstartende databaser

Det er mye enklere for bruker om han slipper å starte opp hovedmeny-skjemaet selv. Det girdessuten et helt annet inntrykk av programmet om bruker aldri ser databasevinduet, menistedet presenteres for en hovedmeny direkte. Dette gjøres svært enkelt: dersom en databaseinneholder en makro som heter AutoExec startes denne automatisk. Det er dermed bare å lageen makro som åpner hovedmenyen og heter AutoExec.

Denne lager du ved å velge makro-kortet i databasevinduet, og trykke på Ny-knappen. Somførste instruksjon setter du opp ‘UtførMenykommando’, og under argumenter (nederst påsiden) setter du opp Menylinje=Database, Menynavn=Vindu og Kommando=Skjul. Denneinstruksjonen skjuler databasevinduet for brukeren. Det kan hentes frem igjen med komman-doen Vindu | Ta frem.

Neste instruksjon skal åpne hovedmenyskjemaet automatisk, og til det brukes ÅpneSkjema.Deretter er det bare å sette argumentet Skjemanavn til det riktige navnet, og makroen er klar.Dersom du lukker vinduet blir du bedt om et navn, og der skriver du AutoExec.

12.2 Feilsjekking

Skal andre enn deg bruke databasen bør du sjekke den grundig for feil, ellers vil du nestengarantert få noen sure overraskelser. Brukerne som regel frustrert over å finne feil, hvilket erenda en grunn til å bruke tid på dette. Under testingen gjelder det å være hard mot seg selv ogprøve bevisst på å kræsje systemet. Skal du finne feil må du prøve å gjøre ting du selv ikke hartenkt på at noen kunne finne på å gjøre, så etter å ha grovtestet selv bør du sette en av defremtidige brukerne til å teste resten.

Access er forferdelig dårlig på feilmeldinger. Som regel får du ikke beskjed om hva som ergalt, og det er direkte elendig av Microsoft. Dette gjør det enda vanskeligere å finne ut hvasom er feil. Feilfjerning er under normale forhold vanskelig, og krever både intuisjon, erfaringog stahet, og i Access er det enda verre. Likevel er det bare å holde ut, det går lettereetterhvert som du lærer å kjenne igjen de vanligste feilene du gjør.

12.3 Lage ikon for databasen i Programbehandling

Dette gjøres svært enkelt: gå inn i Programbehandling. Velg Fil | Ny | Programobjekt. Skriv innnavnet på databasen (eks:’Bilutleieregister’) under Beskrivelse. På Kommandolinje skriver dupath til Access fulgt av \MSACCESS.EXE, mellomrom og databasens filnavn (med path.) Såtrykker du OK og flytter ikonet til riktig gruppe.

Innføring i databaser

1096 - Lars Marius Garshol 66

12.4 Sikkerhet

Access har ganske dårlig sikkerhet i forhold til slettede poster, slik at jevnlig backup er åanbefale. Alt som da trengs er å ta kopi av .MDB-filen, som inneholder hele databasen. Accesslager også en .LDB-fil, men den trengs ikke.

Dersom du komprimerer databasen med komprimeringsprogrammer som f.eks. PkZip ellerARJ kan du regne med ganske god komprimering, ettersom databaser ikke bruker særligplassbesparende lagringsformater.

12.5 Databaser i nettverk

Det er fullt mulig å lage en Access-database som kan brukes av flere brukere samtidig, og delesover et nettverk. Selve databasen behøver ikke å lages annerledes av den grunn, men oppsettetmå gjøres litt annerledes. Dette er egentlig et temmelig stort område, så vi skal ikke gå idybden på dette her.

Den enkleste (og mest primitive!) måten å dele en database på er å gå inn på Vis|Alternativer imenyen, og velge Flerbruker/ODBC. Der stiller du Standard postlåsing til ‘Endret post’ ogStandard åpenmodus for databaser til ‘Delt’.

Nå vil brukere kunne dele databasen uten at de overskriver hverandres endringer dersom deprøver å endre en post samtidig. Istedet vil de få beskjed om at posten er låst, slik at de ikkekan endre den. Dette kan gjøres mer avansert, blant annet gjennom bruk av Access Basic, mendet går vi ikke inn på her.

12.6 Distribusjon av det ferdige programmet

Det er fullt mulig å lage kommersielle programmer med Access. Det vil si: at du enten lagerprogrammer på bestilling mot betaling eller at du lager mer generelle programmer og utgirdisse. I begge tilfeller vil du ønske å gi din .MDB-fil til brukerne. Problemet er da at brukernemå ha Access for å kunne kjøre programmet ditt. Dette kan omgås hvis du anskaffer degAccess Developer’s Toolkit som koster ca 3500,- Der finnes en fil som heterMSARN200.EXE som du kan gi bort til hvem som helst, og som bare kan brukes til å kjøre.MDB-filer, ikke lage dem.

Dersom programmet utgis og brukes av andre enn deg selv vil brukerne garantert forlangeendringer etterhvert. De vil også forlange å få beholde sine gamle data. Du står da overfor etproblem, ettersom skjemaer og rapporter (som er det som mest sannsynlig må endres) ligger isamme fil som dataene. Dermed: gir du dem en ny tom .MDB-fil må de enten bytte den ut medden gamle (og miste dataene) eller importere alt de trenger. (Det siste er ikke en jobb foruerfarne brukere.)Løsningen på problemet består i å lage en database som bare inneholder tabellene. Så lager duen database som inneholder alt det andre, og tilknytter tabellene til denne. Du kan dadistribuere grensesnitt-databasen så ofte du vil, uten at dataene slettes, fordi de ligger i enannen fil.

Innføring i databaser

1096 - Lars Marius Garshol 67

13. Veien videre

13.1 Hvordan lære mer

Som jeg gjentar til kjedsommelighet: programutvikling læres ved å gjøre det. Access-manualene inneholder helt greie leksjoner i Access og kan brukes sammen med kursheftet somveiledning. Den beste måten å lære på er dermed å lage flere databaser, og bruke manualene ogdette heftet som støttemateriale.

Det er bare å prøve seg fram med både modellering og utvikling. Den beste måten å lære dettepå er ved å ta seg vann over hodet og begi seg ut på noe som egentlig er for vanskelig for en.

Derfor: lag databaser! Dersom ingen gir deg oppdrag, så er det bare å lage bokdatabaser ogplatesamlingarkiver. Du bør også lese manualene og lære deg Access Basic hvis du vil kommenoen vei.

13.2 Programutvikling på egenhånd

Dersom du har tenkt å utvikle programmer på egenhånd er det noen tips du bør ha med deg.Det lønner seg å begynne med de enkleste delene, og få de til å fungere først. Deretter kan dugå videre og bygge på til du har fått med alt du vil ha med. Dersom du synes noe er vanskeligså vent med det.

Skal du begynne på noe du vet er vanskelig så bruk ekstra god tid på planleggingen. Ofte kandet lønne seg å tenke gjennom skjemaer også på forhånd. Hold på helt til du føler du haroversikten.

Iblant vil du garantert føle at du har kjørt deg fast i gjørma og mistet oversikten over det dugjør fullstendig. Eller du kan oppdage at slik du har lagt opp databasen blir det nesten umulig åfå inn neste del. Da er det som regel enklere å begynne på nytt enn å sitte og flikke på det duallerede har.

Innføring i databaser

1096 - Lars Marius Garshol 68

14. Til legg

14.1 Ordliste

• Aggregatfunksjon En funksjon som brukes i spørringer, slår sammen data innen ett felt fra flere poster til en

verdi. Typiske eksempler: Summere, Gjennomsnitt etc.

• Attributt Begrep som brukes i datamodellering. Data eller faktum vi ønsker å lagre om en entitet.

• Boolsk uttrykk Et uttrykk som, når det er ferdig utregnet, gir en boolsk verdi, dvs: sant eller usant. Brukes

som betingelser og krav, f.eks. ved utvalg av poster.

• Enititet En type gjenstand (gjerne abstrakt begrep) som vi ønsker å registrere data om. Dette kan

typisk være utlån/leie-forhold, personer, biler eller annet. Generelt er det en klasse/mengdeobjekter som det finnes flere av, som f.eks. sykler eller bestillinger.

• ER Entity Relationship, en enkel teknikk for datamodellering. I dette heftet brukes en

forenkling jeg har laget selv.

• Felt Dette er kolonnene i tabellene. Hver post (dataelement/rad) har en utgave av hvert felt.

• Forretningsregler Dette er reglene som bestemmer hvordan dataene vi skal lagre i databasen oppfører seg i

den virkelige verden. Dvs: utenfor datamaskinen. Databasen må følge forretningsregleneetter beste evne.

• Fremmednøkkel Dette er et felt i en tabell som inneholder fremmednøkkelen til en post i en annen tabell.

Typisk vil feltet ‘Eier’ i tabellen ‘Bil’ være en fremmednøkkel til tabellen ‘Person’, ogverdien i feltet ‘Eier’ vil vise til den personen som eier bilen.

• Hendelse Hver gang noe skjer i Windows (museklikk, et vindu åpnes eller lukkes, et tastetrykk etc) er

det en hendelse. Til hver hendelse er det knyttet bestemte prosedyrer/makroer som utføres.Enkelte av disse kan endres av den som lager en database.

• Hurtigmeny

Innføring i databaser

1096 - Lars Marius Garshol 69

Dette er en meny som ikke kommer ned fra menylinjen, men som du får opp ved å trykkemed høyre mustast på ett eller annet objekt i Access. Denne menyen fungerer som en vanligmeny, men åpnes altså på en litt annen måte.

• Inndeling I rapporter og skjemaer er dette forskjellige seksjoner i skjemaet/rapporten som vises på

forskjellige steder og gjentas et forskjellig antall ganger. Topptekst i side vises f.eks. øverstpå hver side, mens Detalj vises en gang for hver post i rapporten/skjemaet.

• Instans En instans av entiteten Bil er en bestemt bil, f.eks. kaptein Lorentzens Opel Kadett.

• Kandidatnøkkel Et felt som der alle poster skal ha forskjellige (unike) verdier. Kandidat til å være

primærnøkkel, men behøver ikke være det.

• Kontroll Et element i et vindu, som knapp, tekstboks, listeboks etc.

• NIAM Nijssen Information Analysis Method, avansert datamodelleringsspråk. Vesentlig bedre og

mer avansert enn ER, kan anbefales.

• Parameter En verdi som oppgis til en funksjon eller en spørring, og som brukes av disse for å lage

output’en. (Omtrent det samme som x i f(x) i skole-matematikken.)

• Post En rad i en tabell, et sett med data om en entitet, dvs det vi har data om i tabellen. F.eks. er

en post i tabellen ’Person’ et fullstendig sett med data om en bestemt person.

• Primærnøkkel Et felt i en tabell som brukes for å identifisere postene i tabellen. For personer ville dette

typisk vært personnummer, for biler registreringsnummer.

• Prosedyre En makro, et uttrykk eller en samling instruksjoner i Access Basic som beskriver hvordan

noe skal utføres. Med andre ord: en liten bit av et Access-program som er samlet til enenhet og gitt et navn.

• Query Engelsk for spørring.

• Rapport En rapport er en liste med data fra databasen som er beregnet på å skrives ut på papir. Dette

kan typisk være oversiktslister, statistikk/opptelling mm.

Innføring i databaser

1096 - Lars Marius Garshol 70

• Relasjon En sammenkobling av to tabeller. Relasjoner representeres ved fremmednøkler. Uttrykker et

forhold mellom postene i to forskjellige tabeller.

• Skjema Et skjema er et skjermbilde, som kan brukes til å endre data, vise informasjon eller som

meny.

• Spesifikasjonsspråk Et sett med regler for hvordan en datamodell skal tegnes. Eksempler er ER og NIAM.

• Spørring Spørringer trekker ut og kombinerer data fra forskjellige tabeller for å lage lister. De kan

også brukes til å endre, slette og opprette nye data.

• SQL Programmeringsspråk som er spesiallaget for bruk i relasjonsdatabaser. Brukes til å lage

spørringer, men også til å definere tabeller og oppdatere data. Finnes i Access, som også haralternativer til SQL.

• Tabell Tabellene er der alle data i en database lagres. Tabellene beskriver hva slags data som skal

ligge i en database, men ikke noe mer.

14.2 Vanlige kommandoer

• Endre relasjon For å endre relasjonene i en database: få opp databasevinduet og velg Redigere | Relasjoner

i menyen. Relasjoner endres ved å klikke på dem med musa. Høyre mustast gir adgang tilegenskaper etc, mens du etter å ha valgt relasjonen kan slette den med Del.

• Endre kobling mellom tekstboks og felt Dette styres av egenskapen Kontrollkilde i tekstboksen.

• Endre gruppering/sortering i rapport Klikk med høyre mustast på det hvite feltet øverst til høyre i redigeringsvinduet. Velg

Gruppering/sortering.

• Endre hvilken spørring skjema/rapport er basert på Dette er en egenskap ved hele skjemaet/rapporten: Postkilde.

• Fjerne postvelgere, navigasjonsknapper og rullefelt i skjema Dette styres av skjemaets egenskaper: Postvelgere, Navigasjonsknapper og Rullefelt.

Innføring i databaser

1096 - Lars Marius Garshol 71

• Endre farger i et skjema Dette gjøres enklest dersom du får opp palett-verktøy-linjen. (Vis | Palett i menyen.)

14.3 Vanlige feil

• Jeg endret en tabell/spørring, men kan ikke se noe resultat av det i spørringen/skjemaet/rapporten der jeg bruker tabellen/spørringen

Du kan ha glemt å lagre endringen, men mer sannsynlig har du glemt å lukkespørringen/skjemaet/rapporten der du skal bruke resultatet og åpne den igjen, slik at den fårmed seg endringen.

• Prøvde å lage en relasjon, men fikk feilmeldingen: “Feil type i relasjon” De to feltene du prøver å koble sammen har forskjellige typer. To felter med en relasjon

imellom seg må alltid ha samme type.

• Endret typen på et felt i en tabell, men fikk feilmelding om konverteringsfeil Det finnes data i tabellen som ikke lar seg oversette fra den gamle typen til den nye. Her er

det ikke så mye annet å gjøre en å gå inn i tabellen og se om dette betyr at konverteringenmå droppes, eller om dataene er gale.

• Når jeg åpner spørringen/skjemaet/rapporten får jeg en dialogboks der jeg må skrive innen verdi til et av feltene

Du har sannsynligvis feilstavet feltnavnet slik at Access tror det dreier seg om en parameter.

• Når jeg viser skjemaet mitt kommer det opp en dialogboks der jeg må skrive inn tekst, ogdenne teksten kommer der jeg lagde en etikett i skjemaet

Du har laget en tekstboks istedetfor en etikett.

14.4 Litteratur

• MS Access-manualene• Innføring i database, Kjetil Nyhus (kursheftet til dette kurset kontingenten 0196)• Kompendium for IN 113 - Dataorientert systemutvikling, Ragnar Normann og Jan Erik

Ressem, Institutt for Informatikk, Universitetet i Oslo• MS Access 2.0 grunnkurs og videregående, DataPower• Data i fokus, Gerhard Skagestein, Universitetsforlaget• PCWorld Norge 03/96

14.5 Takk til

• Knut Garshol Min far leste gjennom dette kursheftet og viste seg å være svært flink til å avdekke svake

punkter i teksten, og gav meg flere verdifulle råd og tips om formulering og innhold.

Innføring i databaser

1096 - Lars Marius Garshol 72

• Kjetil Ravnås Kjetil leste korrektur på heftet da det var nesten ferdig, og luket ut en rekke småfeil.

• Kjetil Nyhus Nyhus holdt dette kurset i kontingentene 1095 og 0196. Da han dimitterte lot han meg få

kursheftet han hadde laget. Jeg har stjålet noen av hans ideer og poenger, og er takknemligfor å ha fått sjansen til det.

• Rolf-Anders Moldeklev Rolf-Anders kom med en rekke gode forslag etter å ha brukt heftet til selvstudium. Ikke alle

ble fulgt, og noen snek seg inn i undervisningsopplegget istedet.

• Meg selv Jeg holdt i 0496 kontingenten et kurs i Innføring i EDB der MS Word ble gjennomgått. Å

lage dette kurset gav meg en god forståelse av Word, som var til stor hjelp når jeg skullelage dette kursheftet.