TL   TR
 
Till startsida för Björns studiewebb VBScript lathund

Innehåll - del 1

Högerpil Grundläggande
Högerpil Variabler och 
   datatyper

Högerpil Utskrifter
Högerpil Operatorer
Högerpil Kontrollstrukturer
Högerpil Loopar

Del 2 Högerpil

Vänsterpil Tillbaka till ASP
Vänsterpil Till startsida för studiewebb

Denna sida innehåller första delen av lathunden för VBScript i ASP 3. Här beskrivs det grundläggande om placering av ASP-kod och VBScripts syntax. VBScript påminner mycket om Visual Basic och därför kommer referenser göras till skillnader (och likheter) mellan de två språken.

För en komplett beskrivning av VBScript i ASP rekommenderas Beginning Active Server Pages 3.0 från Wrox Press. Se även MSDN (Microsoft Developer Network) eller, för er som äger/har tillgång till Microsoft Visual InterDev 6, MSDN i hjälpen (sök på "VBScript, language reference").


Tanken med denna sida var att göra en referenslista för VBScript - det har blivit en lite väl omfattande sida. :-) Därför har lathunden delats i två delar. Framöver kommer jag (antagligen) att göra exempel för de olika sakerna som finns på denna sida. (För den vetgiriga så innehöll denna webbsida 650 rader med HTML-kod den 9/12-01.)

Observera att exemplen endast fungerar om denna webbplats finns på en webbserver som stödjer ASP! Se sidan Om på Björns studiewebb.


Grundläggande

ASP-kod "bäddas in" (eng. is embedded) i HTML-kod mellan den öppnande taggen <% och den avslutande taggen %>. ASP-taggarna kan förekomma flera gånger i HTML-koden, d.v.s. vi kan dela upp ASP-koden i flera olika delar.

<!-- Utanför ASP-taggar är det ren HTML-kod -->
<%
  Här placeras koden
%>
<!-- Utanför ASP-taggar är det ren HTML-kod -->

ASP-koden mellan taggarna tolkas och exekveras (av den s.k. ASP-motorn) varje gång som en webbläsare begär ASP-sidan. Resultatet från exekveringen kommer infogas på den plats (i den resulterande webbsidan) där ASP-koden finns. 

I exemplet nedan har ASP-koden markerats med gul bakgrund.

<P>Detta är ren HTML-kod</P>
<P>

<%
  str = "Detta är ASP-kod"
  Response.Write str
%>

</P>
<P>Detta är mer HTML-kod</P>

Resultatet från exekveringen ovan blir följande HTML-kod som skickas till besökarens webbläsare:

<P>Detta är ren HTML-kod</P>
<P>
Detta är ASP-kod
</P>
<P>Detta är mer HTML-kod</P>

Kommentarer

VBScript använder endast enradiga kommentarer och kommentaren skrivs efter ett enkelt citattecken ('). Allt på raden efter ett kommentarstecken kommer att bortses från av ASP-motorn.

I exemplet nedan så har kommentarer markerats med fet stil.

<%
  tal = 1 + 2                    'Addition av två tal - 1 + 2
  strang = "En tuff sträng"  'En kommentar till...
%>


Variabler och datatyper

Variabler

Variabler deklareras med det reserverade ordet Dim. Till skillnad mot Visual Basic så anger man ingen datatyp när man deklarerar en variabel.

Dim Tal1, Text1

ASP kräver inte att variabler deklareras, men det är att rekommendera att göra det ändå. Man bör även använda direktivet Option Explicit för att ASP-motorn ska kontrollera att variabler är deklarerade (det kan spara timmar med felsökning!).

<% Option Explicit %>
<HTML>
<HEAD>
  <TITLE>Titel på webbsida</TITLE>
</HEAD>
<BODY>
<%
  Dim Tal1, Text1
 
  Tal1 = 1
  Text1 = "Detta är en sträng"
  Text2 = "En sträng till"   'Genererar fel - ej deklarerarad!
%>

</BODY>
</HTML>

Datatyper och undertyper

VBScript har bara en datatyp: Variant. Och när en variabel deklareras så blir den alltså av datatypen Variant. En Variant kan lagra värden av alla datatyper som finns i t.ex. Visual Basic.

Men variabler av typen Variant kan sägas lagra data av viss "undertyp", t.ex. värdet 3.14 är av undertypen Single och "lite text" av undertypen String. Dessa undertyper är de samma som datatyperna i Visual Basic.

För att underlätta läsandet av ASP-kod så bör man använda prefix för att tala om vilken datatyp (undertyp) som lagras (eller är tänkt att lagras) i variabeln. Nedan visas en tabell med exempel på prefix och vilken undertyp den avser.

Prefix Undertyp
str sträng (string)
int heltal (integer)
sng decimaltal (single)
dbl decimaltal (double)
bln boolesk (boolean)
obj objekt (object)

Nedan beskrivs undertyperna lite mer ingående samt en del "fallgropar" påpekas.

Strängar

Strängar innesluts mellan dubbla citattecken ("), t.ex. "Detta är en sträng". Observera att enkla citattecken (') används för kommentarer!

Tal

När vi jobbar med tal i ASP så behöver vi inte tänka på att deklarera en variabel med tillräcklig kapacitet (t.ex. Integer eller Long) för att lagra talet i fråga. Det sköter ASP åt oss.

Decimaltal skrivs i ASP-kod (enligt amerikansk standard) med punkt, t.ex. 3.14. Vid utskrift kommer dock talet att skrivas ut enligt landspecifikt format, t.ex. med ett kommatecken (3,14) på en svensk webbserver. 

Observera att besökare med svenska webbläsare ska fylla i decimaltal med komma när dom fyller i ett formulär!

Boolean

Booleska variabler kan tilldelas något av de reserverade orden True eller False.

Objekt

Objekt måste, liksom i Visual Basic, tilldelas till en variabel med det reserverade ordet Set - man säger att man tilldelar en referens till objektet (d.v.s. en "pekare"). I nedanstående exempel tilldelas variabeln objBil en referens objektet objPersons bil.

Set objBil = objPerson.Bil

När vi jobbar med databaskopplingar (ADO) så använder vi objekt (bl.a. Connection och Recordset) och då måste vi använda Set. 


| Till början på sida |


Utskrifter

Utskrifter till den resulterande webbsidan (HTML-dokumentet) kan ske på två sätt:

  • i längre stycken med Response.Write
  • eller som enstaka variabler (eller satser).

Utskrift med Response.Write

Det vanligaste sättet att skriva till den resulterande webbsidan är att använda metoden Write() i objektet Response. Som enda parameter tar metoden en sträng - strängen kan sammanfogas av både strängar och andra värden. ASP kommer automatiskt konvertera t.ex. tal till strängar för utskrift.

<%
  Response.Write "Hej hela världen. "
  Response.Write "Klockan är nu: " & Time
%>

Resultatet från de två raderna ovan kommer bli "Hej hela världen. Klokan är nu XX:XX:XX". (Se resultatet - fungerar endast om webbserver stödjer ASP!)

Utskrift av enstaka variabler eller satser

Ibland vill vi bara skriva ut ett värde (i t.ex. en variabel) samt resultatet från ett funktionsanrop eller en sats. Då kan vi använda en "genväg" (kallat inline på engelska). Vi använder oss av likhetstecknet för att skriva ut enligt följande exempel:

Lite text <% =sats %> och mer text

Observera att endast ett värde kan skrivas ut åt gången! Vill vi skriva ut flera värden så måste vi innesluta respektive sats med ASP-taggar eller använda Response.Write. Värdet kan vara en variabel, ett funktionsanrop eller en hel sats.

<HEAD>
<%
  Dim intTal
  intTal = 5
%>

</HEAD>
<BODY>
<P>Talet är <%=intTal%>.</P>
</BODY>

Resultatet (i webbläsare) från dessa rader ovan blir "Talet är 5". (Se resultatet - fungerar endast om webbserver stödjer ASP!)

Det kan ibland vara praktiskt att samla all exekvering i början på en webbsida och spara eventuella resultat i variabler och skriva ut dem med denna genväg. Detta brukar göra både ASP- och HTML-koden lättare att läsa samt underhålla.


| Till början på sida |


Operatorer

Nedan listas de olika typerna av operatorer som finns i VBScript. Sist i detta avsnitt visas en tabell med operatorprioritet.

Tilldelning

Tilldelning sker med likhetstecknet ("=")

Dim intTal1
intTal1 = 5

Aritmetiska operator

Operatorerna är de samma som i Visual Basic, d.v.s. följande:

  • +, -, *, / - de fyra räknesätten
  • \ - heltalsdivision; returnerar hur många gånger nämnare går i täljare
  • Mod - modulusdivision; returnerar resten efter heltalsdivision.
  • ^ - exponent; returnerar ett tal upphöjt till ett annat.
  • - - negering (unärt minus).

Dim intTal1
intTal1 = 1 + 2 * 3 / 4

Operatorerna har den "vanliga" prioriteten som i de flesat språk (se nedan).

Sammanfogning av strängar

För att sammanfoga två strängar (konkatinera) kan vi använda två operatorer

  • & och +

Plusoperatorn bör undvikas då ASP-motorn ibland kan försöka addera en sträng till ett tal (när den borde konvertera talet till en sträng och sammanfoga med den andra strängen).

Dim strText1, strText2
strText1 = "Lite text" & " och lite text till"
strText2 = 1 + " mer text"                         'Kommer generera ett fel!

Jämförelse operatorer

  • = - likhetsjämförelse
  • <> - skilt från; jämför om operanderna inte är lika
  • < - mindre än
  • > - större än
  • <= - mindre än eller lika
  • >= - större än eller lika

1 <> 2   'Ger resultatet True

Logiska operatorer

  • And - logiskt och
  • Or - logiskt eller
  • Not - logiskt icke; returnerar motsatsen (sant om falskt och tvärtom)

1 <> 2 And 1 < 2          'Ger resultatet True

Operatorprioritet

Nedan visas en tabell med operatorernas prioritet. Operatorer överst tar prioritet över de nedanför och de längst till vänster på samma rad har högre prioritet än de längre till höger.

högst ^, - (unär), *, /, \, Mod, +, - (binär)
  &
  =, <>, <, >, <=, >=
lägst Not, And, Or

| Till början på sida |


Kontrollstrukturer

If- och Case-satser fungerar precis som i Visual Basic medan procedurer och funktioner skiljer sig en aning. Loopar presenteras i nästa avsnitt.

If-satser

Syntax

If villkor Then
  satser
[ ElseIf villkor2 Then
  satser
  ...
    ... ]
[Else
  satser ]
End If

Exempel

Dim intTimme
intTimme = Hour(Time)

If intTimme < 12 Then
  Response.Write "God morgon"
ElseIf intTimme < 18 Then
  Response.Write "God middag"
Else
  Response.Write "God kväll"
End If

Case-satser

Syntax

Select Case (värde_att_jämföra)
  Case värde1
    satser
  Case värde2
  ...
    ...
[ Case Else
    satser ]
End Select

Exempel

Dim intTimme
intTimme = Hour(Time)

Select Case (intTimme)
  Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
    Response.Write "God morgon"
  Case 12, 13, 14, 15, 16, 17
    Response.Write "God middag"
  Case Else
    Response.Write "God kväll"
End Select

Procedurer

I motsats till Visual Basic så anger man inga datatyper för eventuella parametrar till proceduren (d.v.s. inget As datatyp efter parametern).

Syntax

Sub Procedure_namn [ (parameter1, parameter2, .... ) ]

  satser

End Sub

Exempel

 

Funktioner

Precis som med procedurer så anger vi inga inte heller datatyper för parametrar till funktioner - inte heller för returvärdet från funktionen.

För att returnera returvärdet så tilldelare vi returvärdet till funktionens namn.

Syntax

Function Funktionsnamn( [ parameter1, parameter2, ... ] )

  satser

  Funktionsnamn = returvärde

End Function

Exempel

 


| Till början på sida |


Loopar (iteration)

Loopar egentligen också de kontrollstrukturer, men p.g.a. avsnittens (detta och föregåendes) omfattning så har det fått ett eget avsnitt. 

Observera att det är extra noga att du kontrollera att villkoret som avbryter loopar verkligen kommer att bli sant. Det finns nämligen inget sätt att avbryta exekveringen av oändliga loopar annat än att låta den tillåtna tiden för ASP-sidor ta slut (ligger mellan 1-3 minuter). Skälet till detta är att ASP-sidan exekverar på servern som utvecklare inte brukar ha tillgång till. Under tiden som loopen exekverar så är det ganska troligt att graden av CPU-utnyttjande uppgår till 100% (i.a.f. i ett system med bara en CPU)!

For...Next

Syntax

For varTal = startvärde To slutvärde [ By antalsteg ]
  satser
Next [varTal]

Exempel

Dim varTal

For varTal = 1 To 10 By 1
  Response.Write "Talet är: " & varTal & "<BR>"
Next

For Each...Next

For Each...Next-loopen används för att loopa över en vektor, d.v.s. att utföra loopen en gång för varje position i vektorn.

Syntax

For Each variabel In vektor
  satser
Next

Exempel

Dim varTemp, arrVektor

  'Fyll vektorn med innehåll

Response.Write "| "

For Each varTemp In arrVektor
  Response.Write varTemp & " | "
Next

Do While...Loop

Syntax

Do While villkor
  satser
Loop

Exempel

Dim intTal
intTal = 0

Do While intTal < 10
  Response.Write "Talet är: " & intTal & "<BR>"
  intTal = intTal + 1
Loop

While...Wend

Denna loop är endast en enklare form av Do While...Loop. Den fungerar på samma sätt.

Syntax

While villkor
  satser
Wend

Exempel

Dim intTal
intTal = 0

While intTal < 10
  Response.Write "Talet är: " & intTal & "<BR>"
  intTal = intTal + 1
Wend

Do...Loop While

Denna loop loopar så länge villkoret på sista raden är sant. Skillnaden mellan Do...Loop While och Do While...Loop (samt While...Wend) är att den första utförs minst en gång och den senare endast om villkoret är sant från början.

Syntax

Do
  satser
Loop While villkor

Exempel

Dim intTal
intTal = 0

Do
  Response.Write "Talet är: " & intTal & "<BR>"
  intTal = intTal + 1
Loop While intTal < 10

Do...Until

Do...Until-loopen exekveras minst en gång och avslutas först när villkoret blir sant.

Syntax

Do
  satser
Until villkor

Exempel

Dim intTal
intTal = 0

Do
  Response.Write "Talet är: " & intTal & "<BR>"
  intTal = intTal + 1
Until intTal > 10


| Till början på sida | Till del 2 | Tillbaka till ASP |


Skapad av: Björn Persson. Uppdaterad: 2005-05-01.

 
BL   BR