Nu har vi først kigget lidt på hvordan man laver en database i Access, og hvordan man laver en databaseforbindelse. Tiden er kommet til at hente indholdet i databasen over i vores ASP dokumenter.
Dette er i virkeligheden et af de mest centrale lektioner i denne tutorial. Når du har læst og forstået hvad der bliver gennemgået i denne lektion, vil du for alvor indse hvorfor databasebaserede webløsninger er så kraftfulde. Hvis du aldrig har lavet et websted med en database, vil dit syn på webudvikling blive udvidet voldsomt i løbet af denne lektion.
Kort fortalt henter man data fra databasen ved at forespørge. For eksempel kunne en forespørgsel være: "hent alle data fra tabellen personer sorteret alfabetisk", eller "hent fornavne fra tabellen personer".
Til at opbygge sådanne forespørgsler benyttes sproget Structured Query Language (SQL).
SQL er heldigvis meget simpelt at lære, prøv at kigge på dette simple eksempel:
Hent alle data fra tabellen personer
Select * from personer
En nærmere uddybelse af syntaksen burde ikke være nødvendig. Prøv at læse videre, og se hvordan SQL sætningerne bruges i eksemplerne nedenfor.
Dette eksempel tager udgangspunkt i databasen fra lektion 17 og databaseforbindelsen fra lektion 18. Det er derfor vigtigt at du først har læst disse lektioner.
Eksemplet viser hvordan oplysningerne i tabellen personer hentes med en SQL forespørgsel.
SQL Forespørgslen returnerer et resultat i form af en række records. Disse records knyttes til et såkaldt recordset. Et Recordset kan beskrives som en slags tabel i serverens hukommelse, indeholdende rækker af data (records), hver record er underopdelt i individuelle felter (eller kolonner).
Et Recordsset kan godt sammenlignes med en tabel, som du ser den i databasens dataarkvisning:

Hver record vil således kunne sammenlignes med en række i tabellen. Man kan manøvrere rundt i et recordset ved hjælp af metoderne MoveNext (gå til næste record), MovePrevious (gå til forrige record), MoveFirst (gå til første record) og MoveLast (gå til sidste record).
Nedenstående kode viser hvordan du anvender et recordset:
<html> <head> <title>Hente data fra database</title> </head> <body> <% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/cgi-bin/database.mdb") Conn.Open DSN ' SQL forespørgsel strSQL = "Select * from personer" ' Udfør forespørgsel (rs indeholder nu resultatet) Set rs = Conn.Execute(strSQL) ' Gennemløb Recordset (rs) med en løkke Do ' Udskriv værdien af kolonnen Fornavn Response.Write rs("Fornavn") & "<br>" ' Gå til næste Record i rs rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF ' Luk databaseforbindelse Conn.Close Set Conn = Nothing %> </body> </html>
Læg mærke til hvordan vi for hver record fik indholdet af kolonnen "Fornavn" returneret ved at skrive rs("Fornavn"). På samme måde kunne vi have fået returneret indholdet af kolonnen "Telefon" ved at skrive rs("Telefon").
Rækkefølgen i eksemplets recordset er nøjagtig den samme som i selve tabellen i databasen. I det næste eksempel vil det blive demonstreret hvordan man sorterer sit recordset.
Ofte vil det være en fordel hvis en liste eller tabel med data præsenteres alfabetisk kronologisk eller numerisk. En sådan sortering er utroligt simpel at lave med SQL, hvor man med syntaksen Order By Kolonnenavn kan sortere et efter indholdet af en kolonne.
Betragt SQL sætningen fra eksemplet ovenfor:
strSQL = "Select * from personer"
Rækkefølgen af records kan f.eks. gøres alfabetisk efter fornavnet på personerne på denne måde:
strSQL = "Select * From personer Order By Fornavn"
Eller kronologisk efter fødselsdato på denne måde:
strSQL = "Select * From personer Order By Foedselsdato"
Sorteringen kan gøres stigende eller faldende ved at tilføje Desc (Descending):
strSQL = "Select * From personer Order By Foedselsdato Desc"
I det nedenstående eksempel sorteres personerne i databasen efter alder:
<html> <head> <title>Hente data fra database</title> </head> <body> <% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/cgi-bin/database.mdb") Conn.Open DSN ' SQL forespørgsel strSQL = "Select * From personer Order by Foedselsdato Desc" ' Udfør forespørgsel (rs indeholder nu resultatet) Set rs = Conn.Execute(strSQL) ' Gennemløb Recordset (rs) med en løkke Do ' Udskriv værdien af kolonnen Fornavn og fødselsdato Response.Write rs("Fornavn") & " " & rs("Foedselsdato") & "<br>" ' Gå til næste Record i rs rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF ' Luk databaseforbindelse Conn.Close Set Conn = Nothing %> </body> </html>
Prøv selv at ændre på SQL sætningen, så der f.eks. sorteres efter fornavn, efternavn eller telefonnummer.
Hidtil har vores SQL sætninger hentet alle rækker fra tabellen. Ofte vil man dog have behov for at opsætte kriterier i SQL forespørgslen for hvilke data der skal hentes. Det kunne f.eks. være vi kun ønskede rækkerne for de personer, som havde et bestemt telefonnummer eller et specielt efternavn.
Lad os f.eks. sige at vi kun ønsker personerne fra databasen, som har telefonnummeret "66554433" - dette kunne f.eks. gøres på denne måde:
strSQL = "Select * From personer Where Telefon = '66554433'"
Der er seks relationelle operatorer i SQL:
= Lig med
< Mindre end
> Større end
<= Mindre end eller lig med
>= Større end eller lig med
<> Forskellig fra
Hertil kommer nogle logiske operatorer:
AND Og
OR Eller
NOT Ikke
Der henvises til Lektion 6 for yderligere beskrivelser af hvordan man opsætter betingelser.
Se næste eksempel om adressebog med links for et komplet eksempel på hvordan man opsætter betingelser.
I dette eksempel sammenkædes alt det du lige har lært i et eksempel. I eksemplet opbygges først en liste med navnene fra databasen. Hvert navn bliver et link, som linker ind til yderligere oplysninger om personen.
Til dette eksempel har vi brug for 2 filer, som navngives henholdsvis liste.asp og person.asp - indholdet af de to filer er som følger:
<html> <head> <title>Hente data fra database</title> </head> <body> <ul> <% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/cgi-bin/database.mdb") Conn.Open DSN strSQL = "Select * From personer Order by Fornavn Desc" Set rs = Conn.Execute(strSQL) Do ' Personens navn strNavn = rs("Fornavn") & " " & rs("Efternavn") ' lav et link til person.asp med Id-værdien i URL strLink = "<a href='person.asp?id=" & rs("Id") & "'>" & strNavn & "</a>" ' Liste med links Response.Write "<li>" & strLink & "</li>" rs.MoveNext Loop While Not rs.EOF Conn.Close Set Conn = Nothing %> </ul> </body> </html>
<html> <head> <title>Hente data fra database</title> </head> <body> <dl> <% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("/cgi-bin/database.mdb") Conn.Open DSN ' Hent fra databasen afhængig af værdien id fra URL strSQL = "Select * From personer Where Id = " & Request.Querystring("id") Set rs = Conn.Execute(strSQL) ' Skriv personens data Response.Write "<dt>Navn:</dt><dd>" & rs("Fornavn") & " " & rs("Efternavn") & "</dd>" Response.Write "<dt>Telefon:</dt><dd>" & rs("Telefon") & "</dd>" Response.Write "<dt>Fødselsdato:</dt><dd>" & FormatDateTime(rs("Foedselsdato"), vbLongDate) & "</dd>" Conn.Close Set Conn = Nothing %> </dl> <p><a href="liste.asp">Retur til listen</a></p> </body> </html>
Eksemplet her med adressebogen er simpelt, men det viser dig potentialet i at arbejde med ASP og databaser.
Prøv f.eks. at forestille dig at databasen havde indeholdt 10.000 produkter med udførlig beskrivelser. Så ville du i virkeligheden blot ved at ændre lidt på ovenstående filer kunne lave et produktkatalog med mere end 10.000 sider - blot med 1 database og 2 ASP filer.
Velkommen til en verden med omfangsrige websteder, som er nemme at opbygge og vedligeholde. Når du først har lært disse principper vil dine webløsninger aldrig blive det samme igen.