Databaser. Grundläggande begrepp exemplifierade i Access. Grundbegrepp Tabeller Frågor Relationer Formulär Övningar. Ove Lundgren 2006 - 1 -



Relevanta dokument
Microsoft Access. Skapa en ny databas. Östersund Vårterminen 2005

Övningar i SQL. SQLAccess.doc Ove Lundgren

Steg 9 Grunder i registerhantering Access 2007 Windows 7/8

Kopplingar via datalänk från Winbas till Excel samt Pivottabell 1 (13)

Introduktion till Winbas. excel till Winbas

Microsoft. Access Grundkurs.

1.Lär känna MS SQL Observera. Tips. Förberedelse

Mitthögskolan ITM Telefon Access. Laborationskompendium för grunderna i databasen Microsoft Access. Detta exemplar tillhör:

Starta MySQL Query Browser

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Tävl-adm 3.0. Tävlingsadministrativt system 1

Instruktioner för projektuppgiften Sjukhusets sista del: Gränssnitt i Access

Innehåll MySQL Intro. Ex på ett index Index typer ISAM Balanserat träd Pk och Fk i MySQL Eget index För o nackdelar med index

TNK046 GIS - Databaser Laborationsuppgift 1 Introduktion till Microsoft Access 2007

I dokumentet beskrivs hur man i medlemsregistret (MiRiaM) utför en så kallad avancerad sökning.

Introduktion och övningar i MS Access

SORSELE KOMMUN. Handbok OEW. 28 sept 2012 Mari-Anne Englund Barbro Olofsson. Sorsele kommun Version , rev (19)

Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Data Data Data Data Data Data Data Data

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel:

IT-system. BUP Användarmanual

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

SPF/MiRiaM Manual avancerad sökning

RACCOON DEVELOPMENT AB

4 Kolumn Kalkylbladet är uppdelat i rader (horisontellt) och kolumner (vertikalt). Där dessa möts finns alltid en cell.

Ett enkelt Kalkylexempel - Fruktaffären

Modul DB1-1 Databasmodellering

Registerhantering för Excel 2003

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

LATHUND ACCESS 2000 SV/EN

Använda Internet. med hjälp av Internet Explorer. Nybörjarguide

Lathund CallCenter 2010

Sandsbro AIK - Manual till redaktörer - IdrottOnline Klubb

Arrangera - Resultat Export och Import

Importera och använda en textdatabas i Excel

Filbindningar. Mike McBride Översättare: Stefan Asserhäll

Introduktionsmanual till Design- / Utvecklarmodulen

5HVLVWHQVWDEHOO 'DWD3DUWQHU. Er partner inom data

1. Gå till redigeringsläge i Episerver, klicka på den sida som du vill ha ett formulär på. 2. Klicka på fliken Formulär.

Lathund Word. Här får du en liten Lathund i Word.

Elevhantering. Välj Tabell - Elev. Konstatera att elevtabellen är tom! I brist på elevinformation måste schemafilen få reda på följande:

Förberedelse inför läsårsskifte Gymnasium

Mobilus får inte användas under tiden uppdateringen genomförs.

Microsoft Excel Grundkurs

Microsoft Word. Lathund för. Innehåll. Autokorrigering. Autotext. Format

Grundkurs 2 IKT. Dan Haldin Ålands lyceum

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet.

Från vilka klasser hämtas eleverna till undervisningsgrupperna? Vilka undervisningsgrupper kan schemaläggas samtidigt?

Excel-guide. Introduktion

skapa genvägar till andra sidor (externa och interna)

Konceptuella datamodeller

Inledning till OpenOffice Calculator Datorlära 2 FK2005

Excel Övning 1 ELEV: Datorkunskap Sida 1 Niklas Schilke

Det här dokumentet är tänkt som en minnesanteckning. programmet och är alltså inte tänkt att förklara allt.

Användarmanual TextAppen Online

Anvisningar för att fylla i djur-och medlemsregister Det är mycket viktigt att du inte ändrar någonting i rubrikraden i mallen!

Snabbguide för användare SourceTech Telllus

Dokumentation. Avancerade Wordfunktioner

Bilaga 3, Beskrivning av Runetab och RunerevA

Guide till att använda Audacity för uttalsövningar

Aktivitetsstöd Importfunktion

Information efter genomgång av Microsoft Excel 2010

Manual för Typo3 version 4.2

Din guide till. Digitala assistenten

Automatisera uppgifter med Visual Basic-makron

Manual för publicering och administration av gruppaktiviteter inom Landsbygdsprogrammet, uppdaterad

Guide till IceTest. Före tävling. Före, under och efter tävling

Kortdokumentation. Avancerade Wordfunktioner

Syfte Denna användarmanual beskriver hur databasen RunerevA används.

ALEPH ver. 16 Introduktion

Manual för banläggning i OCAD IF ÅLAND

Access II. Fördjupning och tillämpningsuppgifter i Access. Mitthögskolan Östersund ITM, avdelningen för Informatik

Datorövning 1 Calc i OpenOffice 1

KOPPLA DOKUMENT SKAPA KÄLLDOKUMENT

Workshop PIM 2 - PowerPoint

Komma igång med 3L Pro Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB

Kom igång med Adela Barnomsorg

SLUNIK manual. SLUNIK version

Vilken version av Dreamweaver använder du?

How to Använda fakturaparametrar.doc

IdrottOnline Klubb manual medlemsregistret

Microsoft Access 2010 Grunder

Administration av lagets arbetsrum lathund

Aktivitetsstöd Närvarorapportering. Ansvarig i Föreningen

Att hantera d a tabasfiler i Access

Innehållsförteckning. Sidan 2 (24)

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Användarmanual Detta dokument beskriver användningen av xvis, för besökare såväl som receptionister och anställda.

Miljön i Windows Vista

Lathund till Publisher TEXT. Skriva text. Importera text. Infoga text. Dra och släpp

Microsoft Access 2013 Grunder

Tentamen för DD1370 Databasteknik och informationssystem

INNEHÅLL EXCEL 2000 FORTSÄTTNING...

TENTAMEN För kursen. Databasteknik. Ansvarig för tentamen: Anna Palmquist. Förfrågningar: Anslås inom 3 veckor

Syfte Syftet med den här laborationen är att du ska lära dig använda några grundfunktioner i Microsoft Excel.

Hjälp till MV-Login Administration Elevdata AB

Uppdaterad: Lathund. Arbetsrum

Manual för lokalredaktörer villaagarna.se

Transkript:

- 1 - Databaser Grundläggande begrepp exemplifierade i Access Grundbegrepp Tabeller Frågor Relationer Formulär Övningar Ove Lundgren 2006 Databaser.doc - 1 -

- 2 - Grundbegrepp Register Vi lagar data om olika företeelser (personer, böcker, bilar ) i register. Förr förekom ofta kortregister. Man skrev in uppgifterna på kort som förvarades i en låda. Här är ett register över medlemmar i en klubb: MEDLEM Nr Namn Ort Avgift 102 Pelle Olsson Hjo 250 Varje kort utgjorde en post (eng. record). En post innehåller uppgifter om en specifik person (eller en bok, eller en bil ) Varje post består av ett antal fält. I vårt fall finns fyra fält. Dessa har fältnamnen Nr, Namn, Ort resp. Avgift. Fälten innehåller egenskaper (ibland säger man attribut) för en post. En tabell Vi kan också föra register i tabellform. Här är (en del av) tabellen MEDLEM: Tabellen MEDLEM Nr Namn Ort Avgift 1 Kalle Jansson Åmål 120 2 Pelle Olsson Hjo 250 3 Kalle Jansson Åmål 120 4 Nisse Hult Åmål 310 En post = en record = en rad Ett fält = en kolumn En tabell består av kolumner och rader. En rad i en tabell är detsamma som en post. En kolumn i en tabell är detsamma som ett fält. Skilj på begreppen fält och post! Tabellen MEDLEM ovan innehåller fält med fältnamnen Nr, Namn, Ort och Avgift Fälten har en viss datatyp. Ett av fälten är primärnyckel. Förklaringar till dessa begrepp: Databaser.doc - 2 -

- 3 - Datatyper Fälten Namn och Ort är av datatypen text (strängar) Fälten Nr och Avgift är av datatypen numerisk (tal) Du kommer att få lära dig olika sätt att deklarera datatyper för strängar och för tal. Det finns också datatyper som hanterar datum och klockslag. Det finns en speciell numerisk datatyp som gör automatisk uppräkning av ett värde. Den första posten får nummer 1 (ett), nästa får (med automatik) nummer 2 (två) och så vidare. Denna datatyp kallas Räknare. Man säger att fältet är självuppräknande (auto increment). Primärnyckel Se tabellen MEDLEM ovan. Antag att vi vill visa uppgifter om Kalle Jansson. Det finns ju flera Kalle Jansson. Hur vet vi att det är rätt Kalle Jansson? Antag att vi vill visa uppgifter om den person som betalar 120 kronor i avgift. Problem: Det finns ju två personer som betalar denna summa. Du inser att vi behöver ett fält som unikt pekar ut (identifierar) den post vi vill arbeta med. Vi har ju ett sådant fält! Fältet Nr är unikt för respektive post. Ett sådan fält, som unikt identifierar en post, kallas för en primärnyckel (PK) (ibland endast nyckel) (engelska: primary key) eller identifierare. Vi brukar ange att ett fält är PK genom att stryka under fältnamnet (som i Nr ) Databas Ibland finns data lagrat i flera sammanlänkade tabeller. Med en databas menas: En uppsättning data som hör ihop på något sätt. Den kan bestå av en eller flera tabeller (oftast flera). Tabellerna är lagrade på dator (inte på t.ex. papper) Det finns också tabeller med data om de tabeller som ingår i databasen (s.k. metadata) Det finns olika sätt att länka samman tabeller i en databas. Vanligast är relationsdatabaser (som vi återkommer till ) När man skriver om databaser använder man ofta symboler av olika slag. Så här ser symbolen för en databas ut, en stående cylinder: (Den används också ibland som symbol för en enstaka tabell.) En databashanterare (DBMS = Data Base Management System) är ett datasystem som hanterar databaser. Med ett sådant program kan du skapa databaser, tabeller, ofta formulär (för in och utmatning av data) och rapporter. Exempel på DBMS: MS Access, Oracle, MySql m.fl. Databaser.doc - 3 -

- 4 - Access Tabell Se innehåll, ändra innehåll Formulär Se innehåll (ofta en post åt gången) Rapport Se innehåll, ej ändra Urvalsfråga (query) Se en del av en eller flera tabeller (även ändra i tabell) Exempel på queries: Vi kanske inte vill visa hela tabellinnehållet i MEDLEM. Vi kanske endast vill visa fälten Namn och Avgift. Man kan då göra en urvalsfråga som endast visar dessa fält, så att resultatet blir så här Namn Avgift Kalle Jansson 120 Pelle Olsson 250 Kalle Jansson 120 Nisse Hult 310 När man väljer ut vissa kolumner (fält) säger man att man gör en projektion på tabellen Eller: Vi kanske endast vill visa de medlemmar som bor i Åmål. Man kan då göra en urvalsfråga som endast visar dessa poster så att resultatet blir så här: Nr Namn Ort Avgift 1 Kalle Jansson Åmål 120 3 Kalle Jansson Åmål 120 4 Nisse Hult Åmål 310 När man väljer ut vissa rader (poster) säger man att man gör en selektion ur tabellen Makro o modul: Används när man bygger applikationer i Access Sida: Ungefär som formulär men används på webbsidor (fungerar endast i Microsoft-miljö) Bekanta dig med Access! Gör uppgifterna på nästa sida! Databaser.doc - 4 -

- 5 - Uppgift: Bekanta dig med Access 1. Starta Access. Skapa ny databas: Arkiv Nytt Tom databas Ge databasen namnet MEDLEMSDATABAS och klicka Skapa 2. Skapa en tabell: Tabell Skapa tabell i designläge Skriv in fält som tabellen MEDLEM visar: Nr ska ha datatypen Räknare Namn ska ha datatypen Text Ort ska ha datatypen Text Avgift ska ha datatypen Tal eller Valuta ( i det senare fallet visas tecknen kr i varje fält) 3. Nr ska vara primärnyckel. Högerklicka på fältet Nr och välj Primärnyckel 4. Spara tabellen (ge den namnet MEDLEM) och visa den 5. Fyll i tabellen med poster enligt ovan, plus ytterligare ca 10 poster. Stäng tabellen. 6. Skapa ett formulär där du kan visa innehållet i tabellen post för post. Visa Spara Formulär Skapa formulär genom att använda guide (följ guiden ) Ge formuläret namnet MEDLEMFORM 7. Skapa en rapport där du kan visa innehållet i tabellen MEDLEM. Formulär Skapa rappoprt genom att använda guide (följ guiden ) Ge rapporten namnet MEDLEMSRAPP 8. Skapa en fråga, som visar alla uppgifter om de medlemmar som bor i Åmål. Frågor Skapa fråga i designläge Lägg till tabellen MEDLEM och stäng fönstret Visa tabell Dubbelklicka på Nr, Namn, Ort respektive Avgift (fältnamnen blir kolumnrubriker i frågan) Under Ort på raden Villkor skriv ordet Åmål Spara frågan med namnet ÅMÅLSFRÅGA. Kör frågan. Klicka på utropstecknet! 9. Skapa en ny fråga, MERÄN200FRÅGA, som visar namnet på och avgiften för de medlemmar som betalar en avgift som är högre än 200 kronor. Orten ska inte visas. Under Avgift på raden Villkor skriv formeln > 200 10. Kan man skapa ett formulär som bygger på en fråga? Testa! Databaser.doc - 5 -

- 6 - Tabeller Begrepp i samband med tabeller Följande ord och begrepp möter du i Access när du skapar tabeller. De är generella och förekommer i alla DBHS. Tabellnamn och fältnamn Använd tecknen A-Z, a-z, 0-9, samt tecknet _ (underscore) när du namnger tabeller och fält. (Access accepterar andra tecken, men du kanske senare vill exportera dina tabeller till alternativa system ) Beskrivning I designläget i Access, där du skapar dina tabeller, kan man (om man vill) för varje fält skriva en beskrivning vad som lagras i fältet. (Beskrivningen visas i eventuella formulär.) Datatyper (mest använda) Datatyp Text Tal Under fliken Allmänt längre ned på designsidan Bestäm fältstorlek t.ex. 20 tecken Långt heltal Dubbel (flyttal = decimaltal) Bestäm antal decimaler under Decimaler Datum/tid Kort datum ( ex 2006.08-18) Långt tidsformat (ex 17:00:00) Valuta Räknare Ett talformat - men där kr eller euro skrivs ut Bestäm antal decimaler under Decimaler Ett talformat (heltal). Värdet i fältet räknas automatiskt upp med 1 (ett) då en ny post skrivs in Uppslagsguiden ger dig möjlighet att visa listrutor. I uppgiften på nästa sida visas hur den fungerar Indatamask En indatamask anges för att styra användaren så att rätt typ av tecken, och rätt antal tecken, matas in. Standardvärde Ibland är ett fält redan ifyllt när en ny post skapas. Ett sådant värde kallas ett standardvärde. Det går givetvis att ersätta standardvärdet med ett annat värde. Verifieringsuttryck Ett sådant uttryck kollar att ett inmatat värde är rimligt, att det t.ex. ligger i ett önskat intervall. Obligatoriskt Om ett fält är obligatoriskt måste man skriva in ett värde i fältet. Index Ett fält kan indexeras. Det går då snabbare att söka och sortera på detta fält. Databaser.doc - 6 -

- 7 - Uppgift: Ändra tabellbeskrivning Öppna tabellen MEDLEM och visa innehållet. Nr Namn Ort Avgift 1 Kalle Jansson Åmål 120 2 Pelle Olsson Hjo 250 3 Kalle Jansson Åmål 120 4 Nisse Hult Åmål 310 Skifta till designläge Gör följande tillägg/ändringar. Spara efter varje ändring och provkör. * Ändra så att Fälten Namn resp Ort kan innehålla max 20 tecken. * Ge fältet Avgift valutaformat med 0 decimaler. Designläge * Lägg till ett nytt fält Startdatum med formatet kort datum. Fyll i värden. * Fältet Ort har datatypen Text. Under Datatyp: Välj Uppslagsguiden Uppslagsguiden visas: Välj Jag skriver värdena själv och Nästa Fyll i följande värden Åmål, Säffle, Hjo (fler orter om du vill) Och tryck Nästa och Slutför Spara och skriv in ytterligare poster. Vid Ort visas en listruta från vilka man kan välja ortnamn Uppgift: Indatamasker Ett bilregistreringsnummer i Sverige består ju (för det mesta) av 3 bokstäver och 3 siffror. Med en indatamask kan vi tvinga användaren att skriva så i fältet: I tabellen MEDLEM, lägg till fältet RegNr, datatyp Text med 6 tecken. Under fliken Allmänt vid Indatamask skriv så här LLL000 (3 stycken stora L och 3 stycken nollor) L:et gör att användaren endast kan mata in bokstäver på de första platserna. Nollan gör att endast siffror kan matas in på de sista positionerna. Spara och testa: Mata in några bilregistreringsnummer, t.ex. ABC123, DEF445 Några vanliga tecken i indatamasker i Access 0 (nolla) Siffra måste inmatas L Bokstav A Siffra eller bokstav & Valfritt tecken 9 Siffra, mellanslag eller inget tecken alls? Bokstav > Alla efterföljande tecken blir versaler (stora bokstäver) < gemener (små bokstäver) Databaser.doc - 7 -

- 8 - Uppgift: Skapa indatamask med guide Det finns guider för vanliga indatamasker: I tabellen MEDLEM, lägg till fältet Personnummer, datatyp Text med11 tecken. Under fliken Allmänt vid Indatamask klicka knappen till höger med tre prickar En Indatamask-guide visas (Eventuellt får du först spara tabellen ) Markera Personnummer och klicka Nästa samt Slutför Fältet får indatamasken 000000-0000 Spara och testa! Uppgift: Standardvärde De flesta medlemmar i tabellen MEDLEM bor i Åmål. Klicka på fältet Ort i designläget. Under fliken Allmänt vid Standardvärde skriv Åmål Spara och provkör. När du skriver in en ny post föreslås orten Åmål. Uppgift: Verifieringsuttryck Avgiften för medlemmar i vår tabell MEDLEM ska vara minst 120 kronor. Klicka på fältet Avgift i designläget. Under fliken Allmänt vid Verifieringsuttryck skriv >=120 Under fliken Allmänt vid Verifieringstext skriv "Måste vara minst 120 kronor" Spara och testa. Om du skriver in en avgift som är mindre än 120 så visas verifieringstexten. Fler exempel på verifieringsuttryck: MELLAN 120 OCH 450 Talet ska ligga i intervallet 120 450 SOM A* Texten måste börja på A Uppgift: Obligatoriskt fält I tabellen MEDLEM, gör så att fälten Namn och Avgift blir obligatoriska. Under fliken Allmänt vid Obligatoriskt välj Ja Spara och testa. Uppgift: Index Sätt ett index på fältet Namn. Under fliken Allmänt vid Index välj Ja dubletter tillåtna Detta index gör att sökning och sortering på namn går snabbt. Dubletter tillåtna innebär att medlemmar kan ha samma namn (det är OK att det finns flera som het Kalle Jansson t.ex.) Spara och testa. I tabellen MEDLEM är Nr primärnyckel. Klicka på fältet Nr och kontrollera vilket index det har! Primärnyckeln är som bekant det fält som unikt identifierar en post. Primärnyckeln blir automatiskt blir indexerad och indexet är naturligtvis av typen inga dubletter Databaser.doc - 8 -

- 9 - Frågor I en query ( en fråga) visas oftast en delmängd ur en tabeller. I Access skapas en fråga genom att klicka Frågor Skapa fråga i designläge Sedan lägger man till den tabell ur vilken data ska hämtas. Du har redan skapat några frågor. Här kommer fler exempel: Byt fältnamn Som standard används fältnamnet som kolumnrubrik. Det är enkelt att byta rubrik i en fråga: Uppgift: Byt kolumnrubrik Skapa en ny fråga (designläge) som visar alla fält och alla poster i tabellen MEDLEM. Spara frågan som AVGIFTSFRÅGA. I designläget för frågor, ställ makören på raden Fält, i rutan där det står Avgift. Ändra till Månadsavgift:Avgift Spara. Provkör. Ordet Månadsavgift visas nu i stället för Avgift. Ibland säger man att ordet Månadsavgift är ett alias för fältnamnet Avgift. Beräknat fält Ett beräknat fält är ett fält som inte finns i tabellen. Ett beräknat fält innhåller en formel där ett ordinarie fält ingår. Uppgift: Beräknat fält Vi ska lägga till ytterligare en kolumn i frågan AVGIFTSFRÅGA, ett beräknat fält. I designläget för frågor, ställ markören på raden Fält i den första tomma rutan, och skriv: Årsavgift:[Avgift]*12 Spara. Provkör. Nu visas ytterligare en kolumn - med årsavgiften. (det vill säga månadsavgiften multiplicerat med 12). Ett fält av denna typ kallas ett beräknat fält. Fältet existerar ju inte i tabellen, det skapas då resultatet av frågan skrivs ut. Parameterfrågor Du har tidigare skapat en urvalsfråga, ÅMÅLSFRÅGA, som visar alla uppgifter om de medlemmar i tabellen MEDLEM som bor i Åmål. Vi gjorde urvalet genom att ange ordet Åmål vid Villkor under fältet Ort då vi arbetade med frågan i designläge. (Om du inte tidigare har konstruerat ÅMÅLSFRÅGA gör det nu!) Det är möjligt att konstruera frågan så att ett värde (t.ex. ett ortsnamn) efterfrågas när frågan körs. En fråga av denna typ kallas en parameterfråga. Databaser.doc - 9 -

- 10 - Uppgift: Parameterfråga Skapa nu en likadan fråga som ÅMÅLSFRÅGA, men i stället för ordet Åmål vid Villkor under fältet Ort ska du skriva så här [ Ange ort ] alltså en ledtext inom hakparenteser. Spara denna fråga med namnet ORTSFRÅGA och provkör. Nu visas en inmatningsruta. Skriv in ordet Hjo och klicka på OK. Poster med orten Hjo visas Borttagnings- och uppdateringsfrågor Vi har hittills arbetat med urvalfrågor (queries) för att visa valda poster och fält ur en tabell. Det finns i Access ytterligare några typer av frågor. Vi ska se exempel på frågor för att ta bort poster och på frågor för att uppdatera poster. Anmärkning: Ordet fråga är inte bra i dessa sammanhang. En fråga är ju något där man förväntar sig ett svar. Det vore bättre att säga t.ex. borttagningsbegäran resp. uppdateringsbegäran. Uppgift - En borttagnings- fråga Öppna tabellen MEDLEM och se till att orten Hjo finns i 3 4 poster. Stäng tabellen MEDLEM. Skapa en ny fråga (designläge lägg till tabellen MEDLEM) På menyraden välj: Fråga Borttagningsfråga Se till fältet Ort kommer med i frågan (det räcker med detta fält) Vid Villkor skriver du ordet Hjo Spara frågan med namnet TaBortHjo Kör frågan. Öppna tabellen MEDLEM: Nu är alla poster med orten Hjo borttagna Uppgift - En uppdateringss- fråga Öppna tabellen MEDLEM och se till att den innehåller minst fem poster och att fältet Avgift är ifyllt för alla. Stäng tabellen MEDLEM. Skapa en ny fråga (designläge lägg till tabellen MEDLEM) På menyraden välj: Fråga Uppdateringsfråga Se till fältet Avgift kommer med i frågan (det räcker med detta fält) Vid Ändra till skriver du formeln [Avgift] * 1,25 Spara frågan med namnet ÄndraAvgift Kör frågan. Öppna tabellen MEDLEM: Nu har alla avgifter ökat med 25% Databaser.doc - 10 -

- 11 - Relationer Databasdesign Det arbete som krävs för att planera och införa ett (datoriserat) informationssystem kallas för systemering. I systemeringsjobbet ingår bland annat databasdesign. Denna avser att bestämma vilka tabeller som ska ingå i databasen. Vi tar här upp några ord och begrepp i sammanhanget: Objektklasser, objekt och tabeller I databasdesign börjar man med att identifiera (hitta) objektklasser. En objektklass är något som man vill lagra information om. Exempel: Om vi vill bygga ett system som ska hantera data som förekommer i en gymnasieskola hittar vi säkert objektklasser som Elev, Klass, Program, Ämne, Lärare Exempel: Ett system som hanterar försäljning av varor till kunder har säkert objektklasser som Kund, Leverantör, Vara Exempel: Ett system som hanterar medlemmar i en klubb har kanske en enda objektklass, Medlem Vad menar vi med ett objekt? Jo, i (exempelvis) objektklassen Elev är de enskilda eleverna objekt. Eleven Kalle Karlsson är ett objekt, eleven Stina Svensson ett annat objekt, och så vidare Tyvärr uttrycker man sig ofta lite slarvigt i systemeringsbranschen. Ofta använder man ordet objekt när man egentligen menar objektklass. En objektklass brukar vi rita som en rektangel. Så här: Medlem Så funderar man på vad vi behöver veta om objekten i objektklassen, objektens egenskaper. Dessa skriver man ned bredvid rektangeln, så här: Medlem Medlemsnummer Efternamn Förnamn Ort Månadsavgift Man ska ha med en egenskap som unikt identifierar ett visst objekt. En sådan egenskap kallas (som bekant) en primärnyckel. I exemplet är Medlemsnummer primärnyckel (PK = primary key). (Brukar strykas under) Många medlemmar heter Svensson. Många heter Lars. Många bor i Åmål. Många betalar lika stor avgift. Så vi kan inte identifiera ett visst objekt med utifrån efternamn, förnamn, ort eller månadsavgift. Däremot har varje medlem i klubben ett unikt medlemsnummer. Naturligtvis används detta som nyckel. Typiska nycklar är personnummer i personregister, registreringsnummer i bilregister, kundnummer i kundregister Den engelska termen för nyckel är primary key Databaser.doc - 11 -

- 12 - Man gör också en noggrannare beskrivning av egenskaperna, i något som kallas objektlista. Så här kan en sådan se ut: Objektklass Egenskap Typ Storlek Till exempel Medlem Medlemsnummer (PK) Heltal 5 tkn 101 Efternamn Text 20 tkn Johansson Förnamn Text 20 tkn Lars Ort Text 20 tkn Åmål Månadsavgift Dec.tal 10 tkn 120,50 Först funderar alltså en systemerare på vilka objektklasser som finns och vilka egenskaper objekten har. (Detta kallas ofta den infologiska fasen i systemeringsjobbet.) Sedan (i den datalogiska fasen) är det dags att låta objektklasserna bli representerade i datorn: En objektklass motsvaras av en tabell i en databas. En egenskap motsvaras av ett fält i tabellen. Ett enskilt objekt motsvaras av en rad i tabellen. Medlem Medlemsnummer Efternamn Förnamn Ort Månadsavgift Tabellen MEDLEM Medlemsnummer Efternamn Förnamn Ort Månadsavgift 101 Svensson Kalle Åmål 60.00 102 Olsson Lisa Åmål 120.00 103 Ekberg Jan Säffle 100.00 Man bygger förstås tabellen utifrån uppgifterna i objektlistan. Relationer och relationdatabaser Exemplet Fixarna Företaget Fixarna har sin administration i Göteborg, sin försäljningsavdelning i Mölndal och sin tillverkning i Kungsbacka. Man vill för varje anställd hålla reda på anställningsnummer, efternamn, titel, lön, nummer på den avdelning där vederbörande jobbar, vad denna avdelning heter och var den är belägen. Överst på nästa sida finns en tabell över (några av) de anställda. Titta en stund på den tabellen! Tänk dig att det finns hundratals anställda (hundratals rader). Är det något i tabellen som verkar vara onödig information? Tänk dej att det finns 75 anställda på tillverkningsavdelningen. Tänk dig vidare att tillverkningen byter ort från Kungsbacka till Varberg. Hur många poster måste då uppdateras (ändras)? Databaser.doc - 12 -

- 13 - Anstnr Enamn Titel Lön Avdnr Avdnamn Ort 101 Andersson Sekr 12000 10 Admin Göteborg 102 Persson VD 33000 10 Admin Göteborg 103 Olsson Försälj.chef 30000 20 Försäljning Mölndal 104 Jansson Verkmästare 22000 30 Tillverkning Kungsbacka 105 Mattson Montör 18000 30 Tillverkning Kungsbacka 106 Nilsson Försäljare 27000 20 Försäljning Mölndal Du ser att i tabellen ovan har samma information skrivits in om och om igen, på flera ställen. T.ex. står det "Tillverkning", "Kungsbacka" på upprepade ställen Om exempelvis Kungsbacka skulle ändras till Varberg måste ändring ske på 75 rader i tabellen. Detta är inte ett smart sätt att lagra data! Dags att bekanta sig med relationsdatabaser! En många-till-ett-relation Låt oss studera Fixarna ur infologisk synvinkel: Vilka objekt kan vi identifiera? Vi hittar Anställd och Avdelning. Mellan Anställd och Avdelning råder en relation, ett många-till-ett-förhållande ( M : 1 ) : En anställd arbetar på en enda avdelning. En avdelning kan däremot ha många anställda En sådan relation ritas så här: Anställd M:1 Avdelning En sådan här figur kallas en OR-graf ( Objekt Relations graf ) "Läser" vi figuren ovan från höger till vänster ( ) så uttyds den så här: "En avdelning kan ha många anställda" (Man ritar en "gaffel" i "många-änden") "Läser" vi OR-grafen ovan från vänster till höger ( En anställd arbetar på en enda avdelning. ) så uttyds den så här: Vi ger vår relation ett lämplig namn: "Anställning" passar väl bra? Lägg till egenskaper: Anstnr Enamn Titel Lön Avdnr Anställd M:1 Anställning Avdelning Avdnr Avdnamn Ort I Anställd behöver inte egenskaperna Avdnamn och Ort finnas med. Det räcker att ha med Avdnr. Avdnamn och Ort kan ju hämtas från Avdelning. I den infologiska fasen identifierar vi objektklasser (med egenskaper) och funderar ut vilka relationer som råder mellan objektklasserna. Vi ritar OR-grafer. I den datalogiska fasen börjar vi tänka på hur data ska lagras fysiskt. Vi översätter objektklasserna och dess egenskaper till tabeller och fält. Databaser.doc - 13 -

- 14 - En relationsdatabas Den datalogiska motsvarigheten till OR-grafen ovan ser ut så här: Tabell ANSTÄLLD Anstnr Enamn Titel Lön Avdnr 101 Andersson Sekr 12000 10 102 Persson VD 33000 10 103 Olsson Försälj.chef 30000 20 104 Jansson Verkmästare 22000 30 105 Mattson Svetsare 18000 30 106 Nilsson Försäljare 27000 20 107 Olsson Försäljare 23000 20 Tabell AVDELNING Avdnr Avdnamn Ort 10 Admin Göteborg 20 Försäljning Mölndal 30 Tillverkning Kungsbacka En "gaffel" i många-änden Relationen "Anställning" En M : 1 - relation Relationen kan vi uttrycka genom att koppla tabellerna via fältet Avdnr. Det fältet finns ju i båda tabellerna. Det fält i tabellen i "många-ändan" som utnyttjas för koppling kallas för främmande nyckel (foreign key). En sådan ska vara kopplad till ett fält som primärnyckel (eng. primary key) i tabellen i "ett-ändan". I vårt exempel: Tabellen ANSTÄLLD har Anstnr som nyckel (primary key) Tabellen AVDELNING har Avdnr som nyckel (primary key) Fältet ANSTÄLLD.Avdnr är främmande nyckel (foreign key). Den är kopplad till ("pekar på") fältet AVDELNING.Avdnr. En databas som innehåller tabeller som kopplats på här beskrivet sätt kallas en relationsdatabas. Uppgift: Bygg relationsdatabasen FIXARNA Skapa ny databas, FIXARNA, i Access och bygg tabellerna ANSTALLD och AVDELNING I Access kan man grafiskt uttrycka relationen mellan tabellerna: I menyn, klicka Verktyg Relationer (fönstret Relationer visas) I fönstret Relationer: Högerklicka och lägg till båda tabellerna (ANSTALLD och AVDELNING) Håll ned musknappen över fältnamnet Avdnr i AVDELNING och dra till fältnamnet Avdnr i ANSTALLD och släpp (fönstret Redigera relationer visas) I fönstret Redigera relationer kryssa i rutan Referensintegritet och klicka på Skapa (Vi återkommer till begreppet referensintegritet ) Nu visas relationen grafiskt. ( I stället för vår gaffel visas ett oändlighetstecken ) Spara relationen och stäng fönstret Relationer. Bygg formulär, ANSTFORM, för tabellen ANSTALLD Bygg formulär, AVDFORM, för tabellen AVDELNING Fyll i 3-4 avdelningar i tabellen AVDELNING och 8-12 anställda i tabellen ANSTALLD Databaser.doc - 14 -

- 15 - Uppgift: Gör joins När man hämtar data ur flera tabeller säger man att man gör en join. Skriv frågor som - Visar all information om alla anställda (alla fält ur ANSTALLD samt Avdnamn och Ort ur AVDELNING) - Visar all information om alla anställda sorterad efter efternamn i bokstavsordning - Visar all information om alla anställda sorterad efter lön (högsta lön först) - Visar Enamn, Titel, Avdnamn och Ort för alla anställda - Visar Enamn, Titel, Avdnamn och Ort för alla med lön över 20000 - Visar Enamn, Titel, Avdnamn och Ort för alla som arbetar i Göteborg Uppgift: Ett Ett-till-många-formulär Kan du bygga ett formulär för AVDELNING som också visar de anställda på resp. avdelning i ett underformulär? Så här: AVDELNING ANSTALLD på aktuell avdelning (Bygg formuläret som vanligt, men tag med fält från båda tabellerna.) Uppgift: Relationsdatabasen MODERSKAP Mnr Enamn Fnamn MODER 1 : M Moderskap BARN Bnr Fnamn Föd.datum Mnr Mellan MODER och BARN råder förstås ett ett-till-många-förhållande (Vi kallar det Moderskap) "Läs" figuren ovan från vänster till höger. Uttyd! "Läs" figuren ovan från höger till vänster. Uttyd! Mnr och Bnr är tal som unikt identifierar en moder resp ett barn. Vilka primary keys respektive foreign key finns det? Skapa ny databas, MODERSKAP, i Access Bygg tabeller som motsvarar objekten ovan och koppla dem via Mnr Skriv fråga som för alla barn visar förnamn, födelesdatum samt mammans för och efternamn. Databaser.doc - 15 -

- 16 - Många-till-många-relationer På företaget Fixarna pågår ett utvecklingsarbete. De anställda deltar i ett eller flera projekt. I varje projekt kan förstås många anställda delta. De olika projekten vill vi registrera med ett nummer och ett projektnamn. Dessutom vill vi ha med uppgifter om medel som avsatts för projektet (en pengasumma, alltså) samt vilken tid (i månader) som projektet får fortgå. Vi identifierar en ny objektklass, Projekt, och ritar: Anstnr Enamn Titel Lön Avdnr Anställd M:N Projekt Projnr Projektdeltagande Projnamn Medel Tid Mellan dessa klasser råder ett många-till-många-förhållande ( ett M : N - förhållande ) Vi ritar en "gaffel" i varje ända. Vi "läser" figuren: En anställd kan delta i ett eller flera projekt. Ett projekt kan innefatta en eller flera anställda. Hur kan vi representera M : N - relationer i databasen? Vi måste införa ännu en objektklass, en relationsobjektklass, som har information om vilka anställda som deltar i vilka projekt. Så här: Anstnr Enamn Titel Lön Avdnr Anställd 1 : M Projekt -deltagande N : 1 Projekt Projnr Projnamn Medel Tid Avdnr Projnr En relationsobjektklass Vi ersätter alltså en många-till-många-relation med två relationer av ett-till-många typ. Så här ser tabellerna ut: Tabell ANSTÄLLD Anstnr Enamn Titel Lön Avdnr 101 Andersson Sekr 12000 10 102 Persson VD 33000 10 103 Olsson Försälj.chef 30000 20 104 Jansson Verkmästare 22000 30 105 Mattson Svetsare 18000 30 106 Nilsson Försäljare 27000 20 107 Olsson Försäljare 23000 20 Tabell PROJDELT Anstnr Projnr 101 1 102 1 103 2 104 2 103 1 101 2 Tabell PROJEKT Projnr Projnamn Medel Tid 1 IT-stöd 50000 2 2 Miljösyn 75000 3 Databaser.doc - 16 -

- 17 - Uppgift: Många-till-många-relation Lägg till tabellerna PROJEKT och PROJDELT i databasen Fixarna. Skapa relationer. Skriv in 4-5 projekt i PROJEKT -tabellen. Skriv in ett antal kombinationer av Anstnr och Projnr i PROJDELT -tabellen. Skriv fråga som visar all info. Vilka anställda deltar i vilka projekt. Uppgift: Öva på att rita OR-grafer! Folkskolan I gamla folkskolan hade varje klass en enda lärare, och varje lärare hade endast en klass. I en klass gick många elever, men varje elev kunde förstås bara gå i en enda klass. Rita en OR-graf över gamla folkskolan! Videobutiken En filmkassett kan givetvis hyras av många kunder och en kund kan förstås hyra många kassetter. Varje kassett rymmer en enda film, men samma film kan givetvis finnas på många kassetter. Rita en OR-graf! Diskoteket (skivsamlingen) Man vill lagra data om artister, CD-album och låtar. Ett CD-album rymmer ju många låtar. En låt kan ju finnas på många CD-album. En artist har vanligen gett ut många album. Det finns också album med många artister. Rita OR-graf! Databaser.doc - 17 -

- 18 - Normaliserade tabeller Inom relationsdatabasteorin finns det ett antal regler som kallas normalformerna. Dessa bestämmer hur tabeller ska utformas så att datalagringen ska bli så effektiv som möjligt. Vi ska lära oss två av dessa regler, de mest använda. Den första regeln, första normalformen (1NF) säger: En post får ha högst ett värde i varje fält Den här tabellens struktur bryter mot 1NF: MedlemsNr Namn och adress 101 Bo Olsson Box 17 662 00 ÅMÅL 102 Lars Jansson Box22 662 00 ÅMÅL 103 Johanna Alm Gågatan 7 664 00 ED Så här bör tabellen se ut: MedlemsNr Efternamn Förnamn Adress Postnummer Postadress 101 Olsson Bo Box 17 662 00 ÅMÅL 102 Jansson Lars Box 22 662 00 ÅMÅL 103 Alm Johanna Gågatan 17 664 00 ED Den tredje normalformen (3NF) lyder: I en post måste alla fält vara beroende av nyckeln, och inget annat än nyckeln. Pizzaklubben har en tabell över sina medlemmar. I tabellen finns fält för Medlemsnummer (PK), Förnamn, Efternamn, Favoritpizzans nummer (hämtat ur matsedeln på Pepes Pizzeria) samt Pizzans namn MedlNr Förnamn Efternamn FavoPizzaNr PizzaNamn 75 Kalle Olsson 23 Vezuvius 76 Jenny Persson 25 Napoli 77 Benny Persson 23 Vezuvius 78 Martin Öberg 28 Quattro Stagione Beror av PizzaNamn beror av Hur är det med fältet PizzaNamn? Är det beroende av MedlNr? Nej, knappast. PizzaNamn är beroende av fältet FavoPizzaNr. Således ett brott mot 3NF! Hur löser man denna situation? Jo, skapa två tabeller (som har 1:M relation): MedlNr Förnamn Efternamn FavoPizzaNr 75 Kalle Olsson 23 76 Jenny Persson 25 77 Benny Persson 23 78 Martin Öberg 28 FavoPizzaNr PizzaNamn 23 Vezuvius 25 Napoli 28 Quattro Stagione Tabeller som utformats efter normalformerna kallas normaliserade tabeller. Avsikten med normalisering är att undvika redundans, det vill säga dubbellagring av data. Databaser.doc - 18 -

- 19 - Referensintegritet När du skapar relationer i Access möter du begreppet referensintegritet: Tabell ANSTÄLLD Anstnr Enamn Titel Lön Avdnr 101 Andersson Sekr 12000 10 102 Persson VD 33000 10 103 Olsson Försälj.chef 30000 20 104 Jansson Verkmästare 22000 30 105 Mattson Svetsare 18000 30 106 Nilsson Försäljare 27000 20 107 Olsson Försäljare 23000 20 Tabell AVDELNING Avdnr Avdnamn Ort 10 Admin Göteborg 20 Försäljning Mölndal 30 Tillverkning Kungsbacka Om vi väljer referensintegritet så får detta, i vårt exempel, följande konsekvenser: 1. Försök att ta bort en avdelning från tabellen AVDELNING. Det går inte så länge det finns kopplingar till den avdelningen. Du kommer inte att kunna ta bort t.ex. avdelning 20 för det finns anställda på denna avdelning. För att kunna ta bort en avdelning måste du först ta bort alla anställda. 2. Försök att ge en anställd i tabellen ANSTÄLLD ett Avdnr som inte finns representerat i tabellen AVDELNING. Det går inte. Du måste först skriva in en avdelning med det avdelningsnumret i tabellen AVDELNING. Databaser.doc - 19 -

- 20 - Om du klickar på knappen Kopplingstyp visas rutan Kopplingsegenskaper Tabell ANSTÄLLD Anstnr Enamn Titel Lön Avdnr 101 Andersson Sekr 12000 10 102 Persson VD 33000 10 103 Olsson Försälj.chef 30000 20 104 Jansson Verkmästare 22000 30 105 Mattson Svetsare 18000 30 106 Nilsson Försäljare 27000 20 107 Olsson Försäljare 23000 20 108 Svensson Sekr 14000 50 Tabell AVDELNING Avdnr Avdnamn Ort 10 Admin Göteborg 20 Försäljning Mölndal 30 Tillverkning Kungsbacka 40 Utbildning Åmål Som standard är alternativ 1 valt. Då kommer endast poster som kan kopplas att visas i t.ex. en query (kallas för inner join). Om du väljer det andra alternativet så kommer även posten 40 Utbildning Åmål i tabellen AVDELNING att visas, trots att det inte finns någon motsvarande post i ANSTÄLLD ( en outer join). Om du väljer det tredje alternativet så kommer även posten 108 Svensson Sekr 14000 50 i tabellen ANSTÄLLD att visas, trots att det inte finns någon motsvarande post i AVDELNING ( en outer join). Databaser.doc - 20 -

- 21 - Formulär Vi ska lära oss några vanliga företeelser i formulär. Vi använder Access för att åskådliggöra dessa. Formulär som bygger på en tabell Uppgift: Förändra formulärets utseende Öppna databasen med tabellerna AVDELNING och ANSTÄLLD AVDELNING ANSTÄLLD Du har tidigare skapat ett formulär, ANSTFORM, som visar posterna i tabellen ANSTÄLLD med en post åt gången. Vi ska förändra utseende mm hos formuläret. (Om du inte har detta formulär: Skapa formuläret nu! Använd guiden i Access) Öppna formuläret ANSTFORM som bygger på tabellen ANSTÄLLD Skifta mellan visaläge och designläge: I menyn finns ikonen för Design. Tryck på den! Formuläret visas i designläge. Knappen till vänster om Spara har bytt utseende och heter nu Visa. Tryck på ikonen för Visa Nu visas åter formuläret normalt vi kan bläddra poster mm. Design Spar Välj designläge. Dra så att formuläret blir större. Gör så att ytan för Detalj blir större och så att man får ytor för Formulärhuvud respektive Formulärfot. Kolla resultatet: Spara och återgå till läget Visa Välj designläge. I designläget visas en verktygslåda : Ställ muspekaren över respektive verktygsikon. En text i en gul ruta talar om vad verktyget heter. Klicka på verktyget Etikett. Ställ sedan markören på formulärhuvudet. Dra upp en ruta och skriv in texten Anställda Klicka utanför etikettrutan. Kolla resultatet: Spara och visa. Om etikettrutan (eller annat) är markerad kan man ändra färg, storlek m.m på texten ungefär som Word. Testa! Man kan också ändra storlek och placering: Markera och dra. Då markören är en hand kan man flytta. Du har tidigare skapat ett formulär, AVDFORM, som visar posterna i tabellen AVDELNING. (Om du inte har detta formulär: Skapa formuläret nu! Använd guiden i Access) Öppna formuläret AVDFORM som bygger på tabellen AVDELNING. Gör det större. Skriv en etikett i formulärhuvudet. Databaser.doc - 21 -

- 22 - Formulär med kombinationsrutor (comboboxar) Kombinationsrutor är vanliga i formulär. Med en sådan får du ett antal färdiga värden att välja på när du ska fylla ett fält med innehåll. Uppgift: Combobox som visar värden ur en tabell Visa ANSTFORM i designläge. Kontrollera i verktygslådan att knappen med trollstaven kontrollguider är nedtryckt (färgad) Om den är nedtryckt så får vi hjälp av en guide i vissa lägen Dra ut en kombinationsruta (= combobox) till detaljfältet. Placera den under fältet Avdnr. En guide visas. Vi ska göra så att comboboxen hämtar sina värden från tabellen AVDELNING. Välj alltså det första alternativet (översta radioknappen) i guiden och tryck på Nästa På nästa sida i guiden: Välj tabellen AVDELNING (det är ju från den tabellen AvdNr ska hämtas) och tryck Nästa På nästa sida i guiden: Ta med fälten AvdNr och AvdNamn och tryck Nästa På nästa sida i guiden: Tryck Nästa På nästa sida: Avmarkera kryssrutan Dölj nyckelkolumn. Tryck Nästa På nästa sida: Se till att AvdNr är markerat. Tryck Nästa På nästa sida: Lagra värdet i fältet AvdNr. Tryck Nästa På nästa sida: Sätt etiketten AvdNr. Slutför Spara. Testa. Du kan nu slå upp ett avdelningsnummer. Det är onödigt med två fält för AvdNr: Ta bort det ursprungliga. Uppgift: Combobox som visar värden ur en lista Visa ANSTFORM i designläge. Byt ut fältet Titel mot en combobox. Utnyttja guiden: Comboboxen ska denna gång visa värden ur en lista som du skriver in själv. Skriv in: Försäljare, Kontorist, Maskinist, Förman, Utbildare, Produktionsassistent Comboboxen ska visa EN kolumn Värdet ska lagras i tabellen ANSTÄLLDs fält Titel Sätt etiketten Titel och slutför. Spara och testa. Comboboxar kan också användas när man vill söka upp en speciell post: Uppgift: Combobox för sökning Visa ANSTFORM i designläge. Lägg in combobox i Formulärhuvudet. Utnyttja guiden: Comboboxen ska användas för sökning Comboboxen ska visa AnstNr, Namn och Titel Bocka av "Dölj nyckelkolumn" så att alla tre fälten visas Slutför. Ändra så att det står Sök anställd i etiketten framför comboboxen. Spara och provkör. Databaser.doc - 22 -

- 23 - Formulär som visar data ur flera tabeller Uppgift: Huvudformulär och underformulär Skapa ett formulär mot AVDELNING som huvudformulär och ANSTÄLLD som underformulär. Ta med alla fält ur dessa båda tabeller. Informationen ska alltså visas per AVDELNING (Formulär med underformulär) Underformulärets layout ska vara Tabell Kalla formuläret AVD-ANST-FORM (Observera att det skapats ett underformulär med namnet "ANSTÄLLD underformulär". ) Bläddra genom AVDELNING (anställda på resp. avdelning visas) Lägg till en ny avdelning. Lägg till nya anställda på resp. avdelning (fältet ANSTÄLLD.Avdelning fylls i automatiskt) I huvudformuläret AVD-ANST-FORM: Lägg in en combobox Formulärhuvudet. Comboboxen ska användas för att söka avdelning. Uppgift: Ett formulär med data ur två tabeller Skapa ett nytt formulär med ANSTÄLLD som huvudtabell och ta även med alla fält från AVDELNING. Informationen ska denna gång visas per ANSTÄLLD. Välj layout Kolumner Spara formuläret som ANST-AVD-FORM Bläddra igenom de ANSTÄLLDA. För resp. post visas uppgift om aktuell avdelning. Lägg till några nya poster. Så fort du fyller i fältet.avdnr visas automatiskt data om aktuell avdelning. Ta bort några poster. (Markera posten genom att högerkicka på Postväljaren till vänster och välja Klipp ut i popupmenyn) Beräknande fält Ett beräknat fält är ett fält som inte finns i tabellen. Det innehåller en formel där ett ordinarie fält ingår. Uppgift: Beräknat fält på "postnivå" (i "Detalj") De anställda avsätter 2% av lönen till aktiesparande. Ett beräknat fält i formuläret ANSTFORM ska visa detta belopp. Lägg en Textruta bredvid fältet Lön. I etiketten skriver du Avdrag. I fältet skriver du formeln =[Lön]*0,02 Uppgift: Beräknat fält i Formulärfot (eller Formulärhuvud) I formuläret "ANSTÄLLD underformulär" gör följande: Lägg en Textruta i Formulärfoten. Etikett: Summa löner: Formel: =Summa([Lön]) När du sedan kör AVD-ANST-FORM visas summan av de löner som utbetalas på aktuell avdelning. Databaser.doc - 23 -

- 24 - Tabbordning När du trycker på TAB-tangenten hoppar markören från ett fält till ett annat i en viss ordning. Uppgift: Kolla tabbordning Kolla tabbordningen i alla dina formulär! Tabba genom fälten. Onaturlig ordning? Under Visa Tabbordning kan du dra fälten till önskad tabbordning En meny Ibland vill man ha en meny från vilken man kan öppna olika formulär. Uppgift: Ett menyformulär Skapa ett nytt tomt formulär - denna gång i Designläge (inte guiden alltså) Lägg en kommandoknapp på formuläret (se till att trollspöet är på så att guiden visas) Välj Formuläroperationer Öppna formulär Nästa Välj ANSTFORM Nästa Välj Öppna formuläret och visa alla poster Nästa Välj Text skriv Anställda Nästa Slutför Spara formuläret MENY Provkör När du trycker på knappen ska ANSTFORM öppnas.. Öppna formuläret MENY i designläge och lägg in knappar som öppnar de övriga formulären i databasen. Rapporter En rapport skapas på samma sätt som man skapar ett formulär. En rapport kan endast visa tabelldata man kan ju inte ändra data eller skriva in nya poster i en rapport. Uppgift: Skapa en rapport Att skapa rapporter skiljer sig inte mycket från att skapa formulär. Skapa en rapport, ANSTRAPP, över alla anställda. Skapa en rapports AVD-ANST-RAPP som visar avdelningar och anställda på resp. avdelning. Databaser.doc - 24 -

Övning i Access : SKOLA - 25 - KLASS ELEV Skapa en ny databas: SKOLA Skapa tabellen KLASS med fälten KlassNr (nyckel, typ Räknare), Klassbeteckning och Klassföreståndare Skriv in några klasser t ex (hitta på själv) 1 TE3DT Mona Mörk 2 EC3DT Hasse Höst Skapa tabellen ELEV med fälten ElevNr (nyckel, typ Räknare), Efternamn, Förnamn, Ort, KlassNr Skriv in några elever t ex 1 Jansson Sofia ED 1 2 Olsson Pelle ÅMÅL 1 3 Karlsson Nisse B-FORS 2 (Klassnumret du skriver in ska finnas i tabellen KLASS) Skapa relationer: Verktyg Relationer Lägg in båda tabellerna KLASS och ELEV Dra fältet KlassNr från ELEV till KlassNr i KLASS Kryssa i Referensintegritet (En relation skapas visas med ett streck ) Klicka på spara-knappen och stäng Relationsfönstret Öppna ELEV-tabellen och försök lägga in en elev med ett klassnummer som inte finns i KLASS (Går ej på grund av referensintegritet) Skapa en fråga (Fråga Ny Design lägg till båda tabellerna) Frågan ska visa fälten Förnamn Efternamn Ort Klass sorterat efter Efternamn Spara frågan som ELEVFRÅGA1 Skapa formuläret KLASSFORM för tabellen KLASS (Formulärtyp en post åt gången ) Skriv in några klasser Skapa formuläret ELEVFORM för tabellen ELEV (Formulärtyp en post åt gången ) Skriv in några elever till. I formuläret KLASSFORM: Försök att ta bort en klass i vilken det finns registrerade elever. (Går ej p g a referensintegritet) I formuläret ELEVFORM: Det vore praktiskt om klassbeteckningarna visades i en kombinationsruta - eller hur? Gör så här: Bredvid fältet KlassNr: Lägg in en kombinationsruta (se till att trollspöet är på i verktygslådan!) Markera Jag vill att komb.rutan ska slå upp värden i tabell eller fråga Nästa Markera KLASS Nästa Se till att KlassNr och Klassbeteckning blir Markerade fält Se till att Dölj nyckelkolumn är valt Nästa Välj Lagra värdet i KlassNr Nästa Skriv in Klassbeteckning som etikett för kombinationsrutan Slutför Provkör formuläret. Rätt klass visas. Du kan välja klass för en elev i kombinationsrutan. Testa! Ta bort fältet KlassNr Spara. Skapa en rapport ELEVRAPP1 som bygger på ELEVFRÅGA1 Databaser.doc - 25 -

- 26 - Skapa ett nytt tomt formulär ( Design - ange ingen tabell) Lägg en knapp på formuläret (se till att trollspöet är på) Välj Formuläroperationer Öppna formulär Nästa Välj KLASSFORM Nästa Välj Öppna formuläret och visa alla poster Nästa Välj Text skriv Klasser Nästa Slutför Spara formuläret SKOLMENY Provkör När du trycker på knappen ska KLASSFORM öppnas.. Lägg in knappar som öppnar ELEVFORM och ELEVRAPP1 (förhandsgranska rapporten) Lägg in knappar i ELEVFORM och KLASSFORM som tar dig tillbaka till SKOLMENY Så ett exempel med lite Basic-kod. Vi ska skapa en modul. I ELEVFORM lägg in en textruta längst ned i Detalj-fältet (en obunden kontroll, alltså) Lägg märke till vad textrutan får för namn (kanske Text1). Använd det namnet nedan. Markera fältet ElevNr och högerklicka. Klicka Egenskaper Välj Fliken Händelse. Klicka Kör vid markering, klicka på de tre punkterna, välj Kodverktyget och OK Där markören står skriv in koden (ändra så att textrutans namn stämmer) If Ort = "ÅMÅL" Then Text1 = "" Else Text1 = "Buss" End If Stäng kodfönstret Provkör! Ordet Buss ska visas i textrutan om eleven inte är från ÅMÅL Detta är ett exempel på ett beräknat fält vars värde sätts av en modul. Skapa ännu en rapport, ELEVRAPP2. Den ska visa alla uppgifter ur tabellerna KLASS och ELEV, grupperade per klass. I formuläret KLASSFORM: Gör så att en klass kan väljas genom sökning i en kombinationsruta. Lägg också in en knapp. När man trycker på knappen ska ELEVRAPP2 visas med data endast om den klass som för tillfället visas i KLASSFORM. (Du får göra vissa tillägg i datakällan i ELEVRAPP2 som gör att en speciell klass visas ) Skapa formuläret KLASSELEVFORM som visar klasserna i huvudformulär och eleverna i underformulär. Med guiden kommer klasserna att en post åt gången och eleverna kontinuerligt ( tabell -form). Lägg till KLASSELEVFORM i menyformuläret. SKOLMENY KLASSFOR ELEVFOR KLASSELEVFO ELEVRAPP ELEVRAPP Databaser.doc - 26 -

- 27 - Övning i Access : GOLF Golfbacka Golfklubb ska anordna en golftävling. Man vill registrera de tävlande när de anmäler sig (namn, hemmaklubb, handicap etc) och skriva ut startlistor. Man vill också skriva in vissa uppgifter om respektive klubb (adress, telefon etc) samt ta fram listor över klubbarna där de tävlande är uppräknade under sin hemmaklubb. Efter tävlingen vill man kunna mata in resultat (antalet slag, det så kallade bruttoresultatet). Då ska nettoresultatet beräknas automatiskt (netto = brutto - hcp) Slutligen ska man kunna skriva ut resultatlistor. KLUBBAR DELTAGARE TÄVLANDE START LISTA KLUBBFORM DELTAGAR LISTA TÄVLANDEFORM RESULTAT LISTA Skapa en ny databas med namnet GOLF Skapa följande tabeller (kursiverat fältnamn = primärnyckel) Tabell KLUBBAR med dessa fält: Klubb (text 6 tkn), Klubbnamn (text 30 tkn), Adress (text 30tkn), Postnr (text 6 tkn), Telefon (text 11 tkn) Postadress (text 20 tkn), Tabell TÄVLANDE med dessa fält: AnmälnNr (Räknare), Efternamn (text 20 tkn), Förnamn (text 20 tkn), Klubb (text 6 tkn indexerat dubletter tillåtna), Hcp (heltal), Brutto (heltal), Netto (heltal) Redigera relationer: Mellan KLUBBAR och TÄVLANDE råder 1:M-relation via fälten KLUBBAR.Klubb och TÄVLANDE.Klubb (Foreign key) KLUBBAR TÄVLANDE 1 : M Skapa en fråga, DELTAGARE, som bygger på båda tabellerna. Frågan ska visa fälten KLUBBAR.Klubb, KLUBBAR.Klubbnamn, KLUBBAR.Postadress, TÄVLANDE.Efternamn, TÄVLANDE.Förnamn och TÄVLANDE.Hcp sorterade efter Klubb. Skapa ett formulär KLUBBFORM där man kan mata in klubbar. Skapa ett formulär TÄVLANDEFORM där man kan mata in tävlande. Fältet Klubb ska ersättas av en kombobox som visar de klubbar man har att välja på. (Data i kombiboxen hämtas från tabellen KLUBB. Den valda klubben ska förstås lagras i fältet Klubb) Databaser.doc - 27 -

- 28 - Markera fältet Brutto, högerklicka, välj Egenskaper och fliken Händelse. Fältet ska förses med en händelseprocedur (en modul): Klicka Kör vid avmarkering och de tre punkterna till höger. Välj Kodverktyget så kommer du till VisualBasic-editorn. I subrutinen Sub Brutto_Exit, skriv in Basicraden netto = brutto - hcp Ett alternativ är att skriva ett makro som startas vid händelsen Kör vid avmarkering. Makrot ska i fältet [netto] sätta värdet [brutto] [hcp] Skapa tre rapporter: STARTLISTA som bygger på tabellen TÄVLANDE med fälten Efternamn, Förnamn, Klubb och Hcp. Sortera efter Hcp (lägsta först), i andra hand efter AnmälnNr. DELTAGARLISTA som bygger på frågan DELTAGARE Ta med alla fält i frågan, gruppera efter Klubb, sortera efter Klubb och Efternamn. RESULTATLISTA som bygger på tabellen TÄVLANDE med fälten Efternamn, Förnamn, Klubb, Netto. Sortera efter Netto, Hcp, Efternamn. (Du behöver inte skriva rapporterna på printer. Förhandsgranskning på skärm räcker.) Gör ett menyformulär med ungefär detta utseende: GoGK:s tävling Skriv in tävlande/ Mata in resultat Skriv ut startlista Skriv ut resultatlista Skriv in ny klubb Skriv ut deltagarlista Avsluta Databaser.doc - 28 -