Lathund för ASP med VBScript

Till Petter

Lathunden är ett hastverk för att klara en tentamen. Den är inte fullständig, helt korrekt eller
vidare pedagogisk. Så sålla informationen en smula :)


Innehållsförteckning
    Senast uppdaterad: 00-10-28 klockan 02.05 J   Kommentera gärna! webmaster@finnjolle.nu

Allmänt

Inledning, avgränsare, script-kod

Mer dokumentation:

----------------------

Microsofts kompletta handledning samt uttömande uppslagsdel om varje kommando, funktion och argument.

www.asphole.com

www.idg.se/webstudio

www.edgequest.com/ActiveWeb

www.activeserverpages.com

www.genusa.com/asp

www.aspdeveloper.net

 

Databaser

Koppling, Läsning, Skrivning, Uppdatering

Datum

Day, Month, Year, Time

Listor

Dictionary

Request

Hämta formulärvärden

Request med vektor

Kul kombination

Slingor

Do, For

Slumptal

Randomize

Strängar

Instr, Len, Lcase, Trim, Space, Left, Mid mfl

Subrutiner och Funktioner

Egna Subrutiner och egna funktioner

Systemobjekt

Jobba med filer, mappar och enheter

Talomvandling och matte

Heltal, Modulus, Avrundning

Variabler

Skapa och tilldela

Vektorer

Skapa, ge värden, sortera

Villkor

If, Then, Else, Jämförelser, Select

 

 

Allmänt

 

 

 

 

 

 

Active Server Pages är en teknik för att köra Script-kod på webbservrar.

 

Script-kod på server-sidan körs av webbservern innan den skickas till webbläsaren.

Detta innebär att alla kan se de sidorna.

 

Script-kod på klientsidan körs av webbläsaren när sidan tagits emot av webbservern.

Detta innebär att bara vissa kan se dina sidor då olika webbläsare stödjer olika Script.

 

-------------------------------------------------------
Man kan använda olika språk när man programmerar ASP.

T ex: VBScript, JavaScript eller Jscript.

Man skall ange det/dem scriptspråk man använder.

 

Köra Scriptspråket på klientsidan:

<HEAD><Script Language="JavaScript"></Script</HEAD>

 

Köra Scriptet på Server-sidan:

<HEAD><%@ Language=VBScript %></HEAD>

 <% ASP-KOD %> Text + <HTML> <% ASP-KOD %>

---------------------------------------------------------

 

VBScript

@Du kan blanda stora och små bokstäver som du vill men… det är lättare att följa koden om du är konsekvent.

@Vill du skriva kod på flera rader använder du: _

Kodrad1_

kodrad2

@<% Options Explicit %> tvingar dig att definiera dina variabler. VBScript returnerar ett felmeddelande om du stavat fel på variabeln istälet för att anta att du vill skapa en ny variabel.

@ Man måste inte deklarera variablerna men det rekomenderas.

 

Kommentarer skrivs i HTML med avgränsarna: <!—Kommentarà

I VBScript kan man också använda gamla hederliga REM eller en apostrof:

 

Databaser

Två kopplings-sätt: ODBC-koppling på webbservern eller Kodrader

 

MED ODBC

För att skapa en ODBC-koppling med Personal Webbserver:

Starta kontrollpanelen.

Klicka på 32-bitars ODBC-datakällor.

Välj fliken system-DNS.

Klicka på lägg till…

Nu kommer du att få upp en ny ruta där det står Skapa ny datakälla. 

Välj nu i listan det alternativ som motsvarar det databasformat som du tänker använda.

Klicka på Slutför.

Skriv nu ett logiskt och kort namn på källan med gemener och utan mellanslag. Exempelvis mindatabas.

Klicka därefter på Markera.

Bläddra till den fil som utgör databasen, markera och välj OK.

Därefter klickar du återigen på den OK-ruta som finns i den första rutan.

Nu bör du i listan för system-DNS:er se en rad med den koppling som du nyss lagt till.

Kryssa i alternativen ”Tillåt katalogbläddring” och ”Aktivera standard-dokument” under avancerat i PWS.

--------------------------------------

 

MED KODRADER

 

EX1: Recordset direkt mot en tabell
Dim koppla, poster ’deklarera kopplingsvariabler och SQL-variabel

Set koppla=Server.CreateObject("ADODB.Connection")

'koppla.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\Databas\Telefon.mdb"

koppla.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Databas\Telefon.mdb; Persist Security Info=False"

Set poster=Server.CreateObject("ADODB.Recordset")

poster.Open "Telefontabell", koppla

 

   ’Jobba med posterna

‘Döda kopplingsobjekten

poster.Close

koppla.Close

set poster=Nothing

set koppla=Nothing

------------------------------------

 

EX2: Recordset mot SQL-vy

Dim koppla, poster, sqlString ’deklarera kopplingsvariabler och SQL-variabel

Set koppla=Server.CreateObject("ADODB.Connection")

'koppla.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\Databas\Telefon.mdb"

koppla.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Databas\Telefon.mdb; Persist Security Info=False"

Set poster=Server.CreateObject("ADODB.Recordset")

sqlString="SELECT * FROM Telefontabell"

poster.Open sqlString, koppla

 

   jobba med data

 

’Döda kopplingsobjekten

poster.Close

koppla.Close

set poster=Nothing

set koppla=Nothing

 

Kommentar: Raden som har ett ’ framför sig är en äldre typ av koppling som allt mindre används

 

SQL eller Recordset? --SQL!

SQL är rekomendabelt av flera anledningar:

SQl är ett enkelt språk som innehåller många kraftfulla funktioner.

SQL är ett standardiserat språk som gäller för många databaser.

SQL kan sortera ut vissa poster direkt från databasen. Detta ökar prestanda.

SQL ger en ofta en enkel hantering av problem: För jämförelser kan du t ex skapa två frågor som körs mot varandra.

 

Skapa inkluderingsfil (SSI)

Smidigt om du vill använda samma värden för flera sidor.

Ex:

Ropa på SSI från fil:

<!-- #INCLUDE FILE = "Access_conn_telefon.asp" -->

Filen:

<%

Set koppla=Server.CreateObject("ADODB.Connection")

'koppla.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\Databas\Telefon.mdb"

koppla.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Databas\Telefon.mdb; Persist Security Info=False"

Set poster=Server.CreateObject("ADODB.Recordset")

%>

Så fort du vill använda dig av inkluderingsfilen måste du deklarera variablerna koppla och poster i filen du ropar från.

 

Skriva ut från databas med response

Do Until poster.EOF

  Response.Write poster("Fnamn") & " " & poster("Enamn") & " " & poster("Telefon") & "<BR>"

  poster.MoveNext

Loop

 

Skrivning till databas

Kompletteras senare

 

Tilläggningtill databas

Kompletteras senare

 

 

 

 

Datum

 

 

 

 

 

 

 

 

 

TOP

Datum och tids-funktioner

Date: 2000-10-26

Now:  2000-10-26 16:20:34              

Time: 16:21:12

 

Beteckningar

yyyy = år

q = kvartal

m = månad

d = dag

 

DateAdd --Lägger till år, kvartal, månad el dag

Ex: DateAdd("d",5,Date) ger: dagens datum + fem dagar 

 

DateDiff  --Beräknar skillnad mellan två datum

Ex:

<% Dim Idag, Jul

Jul= DateDiff("d", Date, "2001-01-01")

Idag= Date

%>

Dagens datum  är: <% =Idag %> <br>

Till julafton är det: <% =Jul %> dagar

 

Day, Month, Year

Tar ett datum och returnerar de tal som motsvarar Dag, Månad och År

 

Monthname

Tar ett tal mellan 1 och 12 och returnerar månadsnamnet

Egna

Funktioner
och
subrutine
r

 

 

 

 

 

 

 

 

 

TOP

En subrutin fungerar som ett VBScript-kommando. Den utför något men returnerar inte något värde. Vid anrop får man inte använda paranteser, även om subrutinen behöver argument.


En
funktion fungerar som en VBScript-funktion. Den kan kan ta emot flera värden men bara returnera ett värde. Vid anrop använder man paranteser.

 

Subrutiner och funktioner kan betraktas som avskilda enheter. De kan inte förstå variabler som är deklarerade utanför dem. Man brukar säga att man deklarerar varaibler ”lokalt” i subrutiner och variabler.

 

Subrutiner

Ex1:

Sub SkrivUt

  Response.Write ”Testar Subritiner”

End Sub

Ropa: Call SkrivUt

 

Ex2:

Sub Rakna(Variabel1, Variabel2)

  MinSub=Variabel1 + Variabel2

  Response.Write MinSub

End Sub

Ropa: Call MinSub Värde1, Värde2

 

 

--------------------------------

Funktioner

Function MinFunktion  (ßAutomatisk variabeldeklaration)

  ’ händelse

  MinFunktion = Det värde som funktionen skall lämna ifrån sig.

End Function
 
Ropa:  MinFunktion

 

Ex1: (Returnera ett värde)

Function Lyckonummer

   Randomize

   Lyckonumer=Int(Rnd*9)

End Function

Lyckonummret är: <%=Lyckonummer%>

 

Ex2: (Mottaga och returnera två värden)

Function Rakna(Varde1, Varde2)

Rakna = Varde1 * Varde2

End Function

<% =Rakna(7,8)%>

Kommentar: Man måste naturligtvis inte skriva ut värdet utan kan  t ex lika gärna skicka det till en variable för ytterligare beräkningar.

 

 

Listor

(Dictionary)

 

Se även vektorer

 

 

 

 

 

TOP

ARBETA MED LISTOR SOM OBJEKT

 

Generella principer:

Dim Objektnamn,Nyckel,Varde

Set Objektnamn = CreateObject("Scripting.Dictionary")

Nyckel = Objektnamn.Keys

Varde =  Objektnamn.Items

 

Skapande av lista:

Dim bilar, nyckel, varde

Set bilar = CreateObject("Scripting.Dictionary")

land = bilar.Keys

biltyp = bilar.Items

 

Lägga till:

bilar.Add "Sverige", "Saab"

bilar.Add "Tyskland", "BMW"

bilar.Add "Frankrike", "Renault"

bilar.Add "USA", "Jeep"

bilar.Add "Italien", "Ferrari"

 

Skriva ut:

<%=bilar.Item("USA")%><br>

 

Stega:

Dim sista, i

sista=bilar.Count-1 

For i = 0 To sista

%>

Länder:<%=land(i)%><br>

<%Next%>

 

Leta:

bilar.Exists("Sverige")

 

Ta bort:

bilar.Remove("Sverige")

 

Tömma hela listan:

bilar.RemoveAll

 

Ändra värdet hos en nyckel:

bilar.Item("Sverige")="Volvo"

'Finns inte nyckeln skapas den automatiskt!

 

Ändra namn på nyckel:

bilar.Key("Sverige")="Sweden"

 

Request

 

Se även
Request
med Vektor

 

 

 

TOP

Request är lämpligt för att hämta värden som skall bearbetas.

(T ex från ett formulär)

 

EXEMPEL1: (Från HTML-sida skickas värden till ASP-fil)

<FORM Action="skicka.asp" Method="post" Name="Frm1">

Tal 1: <INPUT TYPE=Text Name="1"><BR>

Tal 2: <INPUT TYPE=Text Name="2"><BR>

<INPUT TYPE="Submit" Value="Skicka siffror"

</FORM>

 

'Formulärdata till filen "skicka.asp":

<%Dim ett,tva,storst,summa

ett=Int(Request.Form("1"))

tva=Int(Request.Form("2"))

If tva > ett Then

storst=tva

summa=ett + tva

End if%>

Summan av talen är: <%= summa %><br>

Det största talet är: <%= storst%><br>

 

EXEMPEL2: (ASP-fil skickar till sig själv)

<% dim txt %>

<% If Request.form="" Then %>

       <Form action="skicka.asp" method="post">

       <input type="text" name="Textruta"><br>

       <INPUT Type="Submit" Value="Skicka" Name="Skicka">

       </form>

<% else txt=Request.Form("Textruta") %>

<% =txt %>

<% end if %>

 

--------------------------------------

Kommentarer till exemplen:

Eftersom det första exemplet använder sig av två olika dokument ”försvinner” formuläret när värdena returneras i webbläsaren.

För att få samma effekt i exempel två får man använda en IF-sats som kollar om användaren fyllt i formuläret. Om så ej är fallet återskapas det tills det blir ifyllt och då returneras värdena.

Vill man att formuläret skall finnas kvar i exempel 2 tar man bara bort IF-satsen.

---------------------------------------

 

Om request skall synas i adressfönstret:

Byt ut post mot get i formuläret

och

Request.Form mot Reguest.QueryString i ASP-filen

OBS! I Netscape syns variabler i adressfönstret i båda fallen

 

Skriva ut direkt från Request:

If Request.Form("Checkbox1") = "hemma" Then

Response.Write "Du bor hemma fortfarande"

 

IF-sats för att kolla om textruta är tom:

If IsEmpty(Request.Form("txt1")and Request.Form("txt2")) Then…

 

IF-sats för att kolla om formulär är tomt:

If Request.Form="" Then…

 

 

Request
med vektor

 

Request

 

 

 

 

TOP

REQUEST KOMBINERAT MED VEKTOR

Man kan ifrågasätta användningen av detta men det är bra träning för att förstå vektorer och  Request…

Dim vektor(4),i,j, temp

 

<!--Skapa formulär-->

  <Form action="test.asp" method="post">

  <input type="text" name="1"><br>

  <input type="text" name="2"><br>

  <input type="text" name="3"><br>

  <input type="text" name="4"><br>

  <INPUT Type="Submit" Value="Skicka">

  </form>

 

<!--Ladda värden i vektor-->

For i =1 to 4

  vektor(i)=Int(Request.Form(i))

Next %>

 

<!--Skriv ut vektorn-->

<%  For i =1 to 4 %>

  <%=vektor(i)%><br>

<%Next%>

 

 

 

Slingor

 

 

 

 

 

TOP

FOR

For Slinga = startvärde to slutvärde   

  ’händelse

Next

 

Slinga i slinga (kapslade slingor)

For ytterslinga = 1 To 5

  For innerslinga = 1 To 3

  Next

Next

 

Exempel på FOR med utskrift:

<% Dim Slinga

For Slinga = 1 To 10 %>

 Tjatigt<BR>

<%Next%>

 

DO

 

Do While

Do While Variabel < visst värde

  ’händelse

Loop

 

DO UNTIL

Do Until Summa > 10

  Summa = Summa + 1

Loop

 

DO WHILE

Do While Summa < 10

  Summa = Summa + 1

Loop

 

EXIT DO (lämnar slingan om visst villkor uppfylls)

Do While Summa < 20

  Summa = Summa + 1

    If Summa = 15 Then

      Exit Do

    End If

Loop

 

Exempel på Do med utskrift

<% Dim slinga

Do while slinga < 11 %>

  <% =slinga %>

  <% slinga=slinga +1

Loop %>

Slingan Slutade på: <%=slinga%>

 

 

 

Slumptal
(Randomize)

 

TOP

Ett enda decimaltal:

Dim Slumptal

Randomize

Slumptal=Rnd*10

 

Olika decimaltal:

Dim Slump

Randomize

Slump=Rnd*50

 

Olika heltal:

Dim slump

Randomize

Slump=Int(Rnd * 6)+1

’+1 för att få tal från 1till 6

 

Exempel på slumptalsprogram:

<%

Dim i, tarning

Randomize

For i = 1 to 6

  tarning=Int(Rnd*6)+1

%>

  Slag <%=i%> blev: <%=tarning%><br>

<%Next%>

 

System-
objekt

 

TOP

Man måste skapa ett FileSystemObject varje gång man vill använda det!

 

Generell princip:

Dim variabelnamn

Set Filsystem = CreateObject("Scripting.FileSystemObject")

variabelnamn.ValfrittKommando("c:\sökväg till objektet")

' ibland använder man inte paranteser!

 

Skapa textfil:

texten.CreateTextFile("c:\temp\test.txt")

 

Skapa mapp:

mapp.CreateFolder("c:\temp\test")

 

Kopiera fil:

kopiera.CopyFile "c:\temp\*.*", "c:\backup\"

 

Kopiera mapp:

kopiera.CopyFolder "c:\temp\test", "c:\backup\"

 

Ta bort fil eller mapp:

DeleteFile, DeleteFolder

 

Kontrollera om fil finns:

koll.FileExists("c:\temp\test.txt")

Finns också: FolderExists och DriveExists

 

Hämta Fil,Enhet el Mapp

Get File, Drive, Folder

 

Talomvandling

och mattematik

 

 

 

TOP

Talomvandling och andra matematiska funktioner

 

Från decimal till Hexadecimal

Ex: Dim Hexan

     Hexan = Hex(221)

 

Till heltal med Int

Ex: Slump=Int(Rnd * 6)+1

 

Till heltal + avrundning

Ex: Tal1=Round(Tal2)

 

Modulus (Mod)

Reslutatet av en modulus är den rest som blir över när två tal divideras.

Ex: If  tal1 Mod 2 =0 Then… (Om tal1 / 2 blir 0 Gör följande…)

Används ofta för att ta ut jämna tal som detta exempel visar. Användbart vid t ex utskrifter.

 

Variabler

 

Se även:
Vektorer

 

Se även:

Strängar

 

 

 

 

TOP

@<% Options Explicit %> tvingar dig att definiera dina variabler. VBScript returnerar ett felmeddelande om du stavat fel på variabeln istälet för att anta att du vill skapa en ny variabel.

@ Man måste inte deklarera variablerna men det rekomenderas.

 

Skapa variabel och tilldela värde

Dim Siffra

Siffra = 20

 

Skapa variabel med strängvärde

Dim slut

Slut=”Finito”

 

Skapa Konstant (KAN EJ ÄNDRAS)

Const frukt="apelsin"

Const siffra = 5

 

Utskrift av flera tecken

Dim Tecken

Tecken=String(10,"O")

 

 

Vektorer

 

Se även:
listor

 

Se även:
variabler

 

 

 

 

TOP

Endimensionell vektor (Även kallat array eller lista)

Dim vektor(5)

 

Tvådimensionell vektor

Dim vektor(5,5)

 

Fylla vektor med sträng-värden

Dim bilar

bilar="Array("SAAB","Volvo","BMW","Skoda")

 

Skapa ”dynamisk” vektor

Dim pengar()

 

Ändra storlek på vektor i efterhand

ReDim pengar(300)

 

EX på att fylla vektor med värden:

Dim i, vektor(5)

Randomize

For i = 1 To 5

  vektor(i)=Int(Rnd * 100)+1

Next

 

Sortera vektor stigande: (fallande: byt > mot <)

<%

  For i = 1 to 4

    For j = 1 to 4

      If vektor(i)>vektor(j) Then

          temp=vektor(i)

                   vektor(i)=vektor(j)

          vektor(j)=temp

      End if

    Next

  Next

%>

 

Skriv ut vektor

<%  For i =1 to 4 %>

  <%=vektor(i)%><br>

<%Next%>

 

                

Villkor

 

 

 

TOP

IF

If villlkor = sant Then

  ‘Programsats

End If

 

Många villkor med ElseIF

Smidigt om man använder flera variabler. Ger överskodlig kod.

Ex:

If Ålder >  70 Then

  Gammal getabock

ElseIf  Ålder > 50

  Gyllene medelåldern

ElseIF Ålder > 30

  En riktig goding

ElseIf Ålder > 18

  En ungdomlig skönhet

Else

  Livet har just börjat

End IF

 

Många villkor med Select Case

Smidigt om man endast använder samma varaibel. Ger överskodlig kod.

Select Case Varaibelnamn

Case 1

  ‘programsats

Case 2

  ‘programsats

End Select

 

Ex:

<% Dim Kaffe %>

<Form method="post" action="datum.asp">

<input type="radio" name="val" value="varmt" Checked> Varmt<br>

<input type="radio" name="val" value="ljummet"> Ljummet<br>

<input type="radio" name="val" value="kallt"> Kallt<br><br>

<input type="submit" value="Hur är kaffet?">

</form>

<%

Kaffe = Request.Form("val")

Select Case Kaffe

Case "varmt"

Response.Write "Varmt kaffe är riktigt gott"

Case "ljummet"

Response.Write "Fesljummet är bra trist"

Case "kallt"

Response.Write "USCH! -- Odrickbart"

End Select

%>>

 

 

 

Inkapsling av villkor

Om villkor1 = Sant Kör villkor2

 

    Om villkor2 = Sant

        ’gör detta

    Slut villkor2

 

Om villkor1 = falskt

  ’Gör detta

Slut villkor1

 

Ex:

<% Dim Kaffe, Varme

Varme = "varmt"

Kaffe = "svart"

If Varme = "hett" Then

    If Kaffe = "svart" Then

                 Response.Write "Tillsätt mjölk"  %><br> <%

                 Else

                 Response.Write "Bon apetit!"     %><br> <%

    End If

 

Else

    Response.Write "Koka upp kaffet"  %><br> <%

End if

%>

Prova att ändra värdena på ”kaffe” och ”varme”  och se vad resultatet blir.

Kolla sedan igenom programmet.

 

 

Jämförelser

Fem Myror > Fyra elefanter (numeriskt sett…)

5 < 10 (såvitt jag vet…)

<= mindre eller lika med

>= större eller lika med

<> inte lika med (skild från)

 

 

Booleska variabler tillsammans med IF

If Hungrig = True Then

Response.Write “Ät en smörgås”

 

Skall kompletteras

 

 

Strängar

 

Se även:

Variabler

 

 

 

TOP

Skapa variabel med strängvärde

Dim slut

Slut = ”Finito”

 

String

Skapar sträng av valfri längd, fylld med valfria tecken

Slut = String(3,”@”) ger: ”@@@”

 

Space

Skapar strängar med många mellanslag i.

Skicka med ett tal som anger hur många mellanslag som önskas.

Space(5) skickar tillbaka: ”    

 

 

Instr

Söker igenom strängar för att hitta delsträngar.

 

Exempel som letar en sökt delsträng:

<% Dim String

String = "En meningslös mening"

If (Instr(String, "mening")) Then

   Response.write "Det finns en mening med livet"

Else

   Response.Write "Dags för Nirvana?"

End IF %>

 

Exempel som returnerar den sökta strängens position

<% Dim Strang, Leta, Position

Strang = "Jag vill ha dig."

Leta = "vill"

Position = InStr(Strang, Leta)

%>

Positionen har värdet <% =Position %>

’ Position returnerar värdet 5 därför att strängen ”vill” påträffas 5 tecken från början på ”stor”.

----------------------------------------------

 

Len

Returnerar ett tal som visar stränglängden.

Ex:

<% Dim Str, Langd

Str = "Himla tråkig mening det här"

Langd = Len(Str)

%>

Meningen bestod av <%= Langd %> bokstäver.

’Langd returnerar talet 27

 

Lcase, Ucase

Tar båda emot en sträng som argument. Returnerar strängens tecken omvandlade till små respektive stora bokstäver.

Variabel = Lcase(Strang)

Variabel = Ucase(Strang)

 

Ltrim

tar bort alla mellanslag till vänster om strängen (från början)

 

Rtrim

tar bort alla mellanslag till höger om strängen (från slutet)

 

Trim

tar bort  alla mellanslag på båda sidor om strängen

 

Left och Right

Plockar ut strängdelar från vänster eller höger

Variabel = Left(Strang, nummer)

Variabel = Right(Strang, nummer)

Ex: Left(”En vacker dag”, 4) returnerar: ”En v”

 

Mid

tar tecken inne i en sträng och returnerar dem.

Variabel = Mid(”Strang”, Startpunkt, Antal)

”Startpunkt” anger var någonstans i ”Strang” som utplockningen skall börja.

”Antal” bestämmer hur många tecken som skall tas.

Ex: Mid(”Den spanska räven”, 5, 7) returnerar: ”spanska”