Nyeste it-job

Lektion 20: Indsæt data i databasen

Når man skal indsætte nye data i din Access database er det naturligvis en mulighed at downloade hele databasen, manuelt indtaste data, og derefter uploade hele databasen igen. Metoden er dog temmelig besværlig - så i denne lektion vil vi kigge på hvordan du istedet kan indsætte data direkte fra dine ASP scripts.

Indsæt data med SQL

På samme måde som når du skal hente data benyttes SQL til at formulere forespørgslen, som indsætter data i databasen. Syntaksen for SQL sætningen er:

Insert into tabelnavn (kolonne1, kolonne2, ...) values(værdi1, værdi2, ...)

Som det ses kan man altså opdatere flere kolonner ved at angive dem i SQL sætningen som en kommasepareret liste. Men det er naturligvis også muligt kun at angive én kolonne og én værdi. De kolonner, som ikke nævnes i SQL sætningen, vil blot være tomme.

Eksempel: Indsæt en ny person i tabellen

Også denne lektion tager udgangspunkt i databasen fra lektion 17. Lad os sige at vi ønsker at opdatere databasen med en ekstra person. Det kunne være personen Fætter Guf med telefonnummeret 99887766 og fødselsdatoen 20-04-1964.

SQL sætningen for at opdatere tabellen kunne således skrives:

strSQL = "Insert into personer (Fornavn, Efternavn, Telefon, Foedselsdato) values('Fætter','Guf','99887766','20-04-1964')"
Conn.Execute(strSQL)

Som du kan se begynder SQL sætningen nu at blive lidt lang, og man kan hurtigt miste overblikket. Derfor kan det være en fordel at opstille SQL sætningen på en lidt anden måde:

strSQL = "Insert into personer ("

strSQL = strSQL & "Fornavn, "
strSQL = strSQL & "Efternavn, "
strSQL = strSQL & "Telefon, "
strSQL = strSQL & "Foedselsdato) "

strSQL = strSQL & "values( "

strSQL = strSQL & "'Fætter', "
strSQL = strSQL & "'Guf', "
strSQL = strSQL & "'99887766', "
strSQL = strSQL & "'20-04-1964')"
 
Conn.Execute(strSQL)

Princippet er altså at SQL sætningen bygges op ved at opdele sætningen i mindre bestandele, og derefter lægge disse bidder til variablen strSQL.

Det har ingen praktisk betydning om du vælger den ene eller den anden måde - men når du først begynder at arbejde med lidt større tabeller er det helt afgørende, at man hele tiden bevarer overblikket.

Prøv selv at køre nedenstående kode for at indsætte Fætter Guf til databasen:

<html>
<head>
<title>Indsætte data i databasen</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 sætning opbygges
strSQL = "Insert into personer ("

strSQL = strSQL & "Fornavn, "
strSQL = strSQL & "Efternavn, "
strSQL = strSQL & "Telefon, "
strSQL = strSQL & "Foedselsdato) "

strSQL = strSQL & "values( "

strSQL = strSQL & "'Fætter', "
strSQL = strSQL & "'Guf', "
strSQL = strSQL & "'99887766', "
strSQL = strSQL & "'20-04-1964')"

' SQL sætning eksekveres 
Conn.Execute(strSQL)

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
<h1>Databasen er opdateret!</h1>
</body>
</html>

Gem input fra brugerne i en database

Ofte vil du have behov for at gemme input fra brugerne i en database.

Som du sikkert allerede har regnet ud, kan dette gøres ved at lave en formular som beskrevet i lektion 11. Herefter benyttes værdierne fra formularens felter blot i SQL sætningen. Antag således at du har en simpel formular:

<form action="indsaet.asp" method="post">
<input type="text" name="Fornavn">
<input type="submit" value="Gem">
</form>

Formularen submittes til filen indsaet.asp, hvor du som gennemgået i lektion 11 kan få fat på brugerens input ved at requeste indeholdet af formularens felter. I det konkrete eksempel kunne en SQL sætning således skrives:

strSQL = "Insert into personer (Fornavn) values('" & Request.Form("Fornavn") & "')"

På samme måde er det naturligvis muligt at hente data fra f.eks. cookies, sessions eller querystring.

De hyppigste begynderfejl

Du vil sikkert i starten ofte få fejlmeddelelser når du forsøger at opdatere dine databaser. Dette skyldes at der ikke er plads til den mindste unøjagtighed - ét forkert placeret komma kan betyde at databasen ikke bliver opdateret - og du istedet får en fejlmeddelelse. For at hjæpe dig lidt på vej gennemgås derfor her nogle af de klassiske begynderfejl.

Feltet tillader ikke nullængde

For hver kolonne kan man i designvisning (jfr. nedenstående skærmbillede) stille parameteren "Tilladnullængde" (Allow zero length). Hvis dette felt er sat til 'Ja' eller 'Yes', og det samtidig forsøges at indsætte en nulværdi, vil det ikke være muligt at indsætte den pågældende record i databasen.

Forkerte Datatyper

Det er væsentligt, at der er overensstemmelse mellem typen af data og kolonnen. Hver kolonne kan således indstilles til en special datatype. På nedenstående skærmbillede er vist datatyperne for tabellen 'personer' i vores eksempel database.

Angivelse af datatyper og nullængde i designvisning

Fejl opstår gerne fordi det forsøges at indsætte f.eks. tekst eller tal i et datofelt. Forsøg derfor at definere datatyperne så præcist som muligt.

Det ville føre for vidt at give en komplet gennemgang af alle datatyper her. men i nedenstående tabel er listet de mest almindelige:

Indstilling Datatype Størrelse
Tekst
(Text)
(Standard) Tekst eller kombinationer af tekst og tal. Eventuelt også numre, som ikke skal indgå i beregninger, f.eks. telefonnumre. Op til 255 karakterer - eller længden defineret i 'Feltstørrelse'
Notat
(Memo)
Længere stykker tekst eller kombinationer af tekst og tal. Op til 65,535 karakterer.
Tal
(Number)
Nummeriske tal til brug for matematiske beregninger. 1, 2, 4, or 8 bytes.
Dato og klokkeslæt
(Date/Time)
Dato og klokkeslæt for årene 100 til 9999. 8 bytes.
Valuta
(Currency)
Valuta værdier og nummeriske tal til brug for matematiske beregninger med data med 1 til 4 decimaler. 8 bytes.
Autonummerering
(AutoNumber)
Et unikt tal (stigende med 1) tildelt af Microsoft Access når en ny record føjes til databasen. Felter af typen Autonummerering kan ikke opdateres 4 bytes
Ja/Nej
(Yes/No)
Ja/Nej værdier og felter, som kun kan indeholde en af to mulige værdier (Yes/No, True/False, or On/Off). 1 bit.
OLE-objekt
(OLE Object)
Et objekt (F.eks. Microsoft Excel regneark, et Microsoft Word dokument, grafik, lyd, eller andre binære data). Op til 1 gigabyte (begrænset af den tilgængelige disk plads)

SQL sætninger med ' tegnet

Hvis du giver brugeren mulighed for at indtaste noget tekst i en formular, og denne tekst indeholder tegnet ' (quot) vil den pågældende record ikke kunne indsættes i databasen. Løsningen er at erstatte et enkelt quote (') med dobbelt quote ('').

Dette kan gøres med funktionen dokumentationReplace på følgende måde:

<%
strTekst = Request.Form("Tekstfelt")
strTekst = Replace(strTekst, "'", "''")
%>

Alle ' tegn i teksten erstattes af dobbelt ' tegn, dette vil blive tolket som en enkelt ' af databasen.


Nyhedsbrev
Tilmeld dig HTML.dk's nyhedsbrev


Er du jobsøgende?

 Ja
 Nej
Se det foreløbige resultat når du har stemt!


Se tidligere afstemninger

 Community
Brugernavn

Adgangskode

Husk

 *  Bliv medlem her
 *  Glemt password?


Om HTML.dk | Oplysninger om ophavsret | Politik om persondata | Annoncer på HTML.dk | RSS

Valid XHTML 1.1! Valid CSS! Powered by Scannet