Skip to content

Active Server Pages

 
Rudolf Arnold, Valckenburgschule Ulm

Vorbemerkungen

Eine der wichtigsten Voraussetzungen für E-Commerce ist die interaktive Kommunikation mit dem Webserver des Anbieters. Dynamisches HTML bietet in seinen verschiedenen Formen zahlreiche Möglichkeiten, um auf diese Anforderungen zu reagieren. Ein Teil dieser Interaktivität kann auf der Client-Seite ablaufen. Für den Netscape Navigator gibt es dafür JavaScript. Microsoft-Browser verwenden VBScript und JScript. JScript ist stark mit JavaScript verwandt, weicht aber leider in zahlreichen Punkten von ihm ab. Außerdem gibt es für Microsoft-Browser noch ActiveX, das zusätzlich Komponenten zur Kommunikation enthält. (Da ActiveX aber auf Betriebssystem-Bestandteile von Microsoft zurückgreift, läuft es auf allen anderen Betriebssystemen wie Mac, Linux, Solaris etc. überhaupt nicht). Obwohl es zunächst vorteilhaft erscheinen mag, Prozesse auf dem Client ablaufen zu lassen, ohne den Server zu belasten, bietet diese Methode einige Nachteile. Da sind einmal starke Sicherheitsbedenken: Denn wenn man JavaScript etc. zulässt, gestattet man es dem Anbieter von Webseiten, auch unerwünschte Aktionen bis hin zum Formatieren der Festplatte durchzuführen. Eine weitere Schwierigkeit besteht darin, dass keine Plattformunabhängigkeit hinsichtlich der Browser gegeben ist. Streng genommen muss man für jeden Browser ein eigenes Script schreiben. Das erschwert insbesondere die Wartung der Webseiten ungemein. Und jedes Browser-Update kann Fehlermeldungen in einem vorher noch lauffähigem Script hervorrufen.

Deshalb ist es besser, die Programmierung auf den Server zu verlegen. Von Microsoft gibt es für den Internet Information Server (IIS) 3.0 und 4.0 eine eigene CGI-Lösung: die Active Server Pages (ASP). Hier werden Scripte (in VBscript oder JScript oder auch in Perl-Script) in den HTML-Code der Seite eingebettet und dann auf der Server Seite und nicht auf dem Client ausgeführt. Um mit diesen Skripten arbeiten zu können, benötigt man die sogenannte ASP Erweiterung für den IIS. Diese findet sich auf der Original (!) SP3 CD von Microsoft, als Bestandteil der Microsoft Programmpakete Visual InterDev, Visual Studio oder zusammen mit dem IIS 4.0 auf dem NT 4.0 Option Pack.

Zielsetzung

Ziel dieses Artikels ist es, an einem (relativ) einfachen Beispiel zu zeigen, wie mit Hilfe von Active Server Pages eine Datenbank im Web veröffentlicht werden kann und wie Daten aus einer ODBC-Datenquelle (z.B. aus MS Access) gelesen und in diese geschrieben werden können. ODBC (Open DataBase Connectivity) ist eine von der Datenbank unabhängige Technologie, für den Datenzugriff, die es insbesondere Web-Anwendungen ermöglicht, mit SQL-Befehlen (Structured Query Language) auf Datenbanken zuzugreifen.

Voraussetzungen

Das folgende Beispiel wurde mit Visual InterDev 1.0 entwickelt. Dabei müssen zunächst folgende Komponenten auf dem NT 4.0 Server installiert werden, der unter TCP/IP mit dem Internet oder dem Intranet verbunden ist:

- Internet Information Server 3.0 oder 4.0

- Active Server Pages einschließlich ODBC 3.0 , ADO (ActiveX Data Objects) und OLE DB

- FrontPage Server-Erweiterungen.

Auf der Workstation, auf der die Anwendung entwickelt werden soll, muss folgendes installiert sein:

- Visual InterDev-Client, der auch einen FrontPage-Editor enthält

- Web-Browser (am besten sowohl Internet Explorer als auch Netscape Navigator)

Nützlich sind außerdem:

- Microsoft Access

- Ein Programm zur Bildbearbeitung
 

Ein einfaches ASP-Beispiel

Durch die folgende ASP-Seite soll basierend auf der Uhrzeit eine Begrüßung erzeugt werden. Als Sprache soll hier beispielhaft VBScript (Visual Basic Script) zum Einsatz kommen, da es stark mit dem an beruflichen Schulen weit verbreiteten Visual Basic verwandt ist. Die Uhrzeit wird dabei durch die VBScript-Funktion Hour(Now) ermittelt. Zu beachten ist insbesondere, dass der Programmcode in spitze Klammern mit Prozentzeichen <% ... %> eingebettet ist. Dadurch wird der Code als Server-Code gekennzeichnet und ausgewertet, bevor die Seite an den Browser gesendet wird.

<%@ LANGUAGE="VBSCRIPT" %>

<HTML>

<HEAD>

<TITLE>Hallo</TITLE>

</HEAD>

<BODY>

<%

Dim StrHallo

If Hour(Now) < 12 Then

        StrHallo = "Guten Morgen"

ElseIf Hour(Now) > 11 And Hour(Now) < 18 Then

        StrHallo = "Guten Tag"

ElseIf Hour(Now) > 17 Then

        StrHallo = "Guten Abend"

End If

%>

<H1><%=strHallo%></H1>

</BODY>

</HTML>
 

Der eigentliche HTML-Code wird dabei in der Zeile

<H1><%=strHallo%></H1>

erzeugt. Das Gleichheitszeichen weist ASP an, den Wert der Variablen als HTML-Code in die Seite einzufügen. Ruft man die Seite mit dem Browser vom Server ab und betrachtet sich den Code, so sieht man nur reines HTML:

<HTML>

<HEAD>

<TITLE>Hallo</TITLE>

</HEAD>

<BODY>

<H1>Guten Tag</H1>

</BODY>

</HTML>

Dies bedeutet, dass unabhängig von der verwendeten Script-Sprache jeder Browser bedient werden kann, da der Code ja auf dem Server abläuft.
 

ASP-Objekte und _Komponenten

Leider hat VBScript keine Funktionen, um auf externe Datenquellen zuzugreifen. Dazu gibt es aber ASP-Objekte und ASP-Komponenten.

ASP-Objekte stehen direkt zur Verfügung und brauchen nicht extra erzeugt zu werden:

- Application - Damit werden Variablen während einer Anwendung erzeugt

- Session - Damit werden Variablen für eine einzelne Benutzersitzung erzeugt

- Request - Damit werden Variablen gelesen, die vom Browser über <FORM> -Tags übermittelt wurden.

- Response - Damit werden Variablen an den Browser zurückgesandt.

- Server - Damit werden zusätzliche Funktionen geliefert und z.B. Instanzen von ASP-Komponenten erzeugt, die in Visual InterDev enthalten sind oder selbst erstellt wurden.

ASP-Komponenten dienen dazu, den Datenzugriff für Webseiten zu erledigen. Dazu muss mittels der CreateObject-Methode des Server-Objekts eine Instanz erzeugt werden. Danach können deren Eigenschaften und Methoden benutzt werden. ASP unterstützt folgende Komponenten:

  • Datenbankzugriff
  • Dateizugriff
  • Browser-Merkmale
  • Rotierende Werbeflächen
  • Inhaltsverknüpfung

Die wichtigste Komponente ist dabei die Datenbankzugriffskomponente ADO (ActiveX Data Objects). Betrachten wir dazu folgenden Code-Ausschnitt, mit dem die Verbindung zu einer SQL-Server-ODBC-Datenbank namens Lager mit Hilfe des ADODB.Connection-Objekts errichtet wird:

<%

        ` Variable deklarieren

        Dim objVerbindung
 

        ` Connection-Objekt `Verbindung' erzeugen

        Set objVerbindung = Server.CreateObject(„ADODB.Connection")

` Verbindung zur Datenquelle Lager öffnen

objVerbindung.Open "Lager", "sa", ""

%>

Wenn die Verbindung zur Datenquelle besteht, kann man das ADODB.Recordset-Objekt benutzen, um über SQL SELECT-Anweisungen Informationen aus der Datenbank abzurufen:

<%

        ` Variable deklarieren

        Dim objDatensatz
 

        ` Recordset-Objekt `Datensatz' erzeugen

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

        ` SQL-Abfrage starten mit Feld Lieferant aus Tabelle Lieferanten

        objDatensatz.Open "SELECT Lieferant FROM Lieferanten", objVerbindung

%>

Nach Erhalt der Datensätze kann man dann mit den Methoden MoveFirst, MoveLast, MoveNext, MovePrevious durch die Datensätze wandern und mit der Write-Methode des Response-Objekts (wobei <%Response.Write Variable%> identisch mit <%=Variable%> ist) zum Beispiel ein Listenfeld einrichten:

<!— SELECT-Liste aus Datensatz aufbauen —>

<SELECT SIZE=8>

<%

        Do While Not objDatensatz.EOF

%>

<!— Listeneinträge erzeugen —>

        <OPTION>

        <%=objDatensatz("Lieferant")%>

        </OPTION>

<%

        objDatensatz.MoveNext

    Loop

%>

</SELECT>

Sollen bei einer Datenbankabfrage sehr viele Ergebnisse angezeigt werden, so werden sie sinnvollerweise auf mehrere Seiten (Pages) aufgeteilt. ADO unterstützt Paging und hält im Rahmen des Recordset-Objekts die Eigenschaften PageSize, PageCount und AbsolutePage bereit.

Beispielprojekt Handreichungsliste

Hier soll gezeigt werden, wie eine Handreichungsliste, die als Tabelle einer Access-Datenbank vorliegt, mit Hilfe von ASP mit einem Browser über das Web durchsucht werden kann. Die Hauptkomponente dieses Beispiels ist die Connection-Komponente, die mit ADO-Objekten auf eine ODBC-Datenquelle zugreift. Es wird davon ausgegangen, dass die oben genannten Software-Voraussetzungen erfüllt sind.

1. Ein neues Web-Projekt einrichten

In Visual InterDev Datei _ Neu anklicken und im Register Projekte die Option Web-Projekt-Assistent wählen. Als Projektname hliste eintragen und auf OK klicken:

Der Web-Projekt-Assistent fragt jetzt nach dem Namen des Web-Servers. Hier wird der Name des Computers eingetragen, auf dem der Internet Information Server läuft. Das ist hier S1 .
 

Bei Visual InterDev bezieht sich der Begriff „Web" (genau wie bei Frontpage) auf einen Satz Web-Seiten, der vom Internet Information Server verwaltet wird. Ein „Projekt" ist dagegen ein Satz Dateien, der von Visual InterDev selbst erstellt und verwaltet wird. Als Name für das neue Web wird der Projektname hliste vorgeschlagen. Er kann durch Klicken auf Fertigstellen übernommen werden.

Der Web-Projekt-Assistent erzeugt das neue Web und öffnet an
 

schließend das Projekt.

In Visual InderDev lässt sich über die unten links befindliche Registerkarte File View das Ergebnis betrachten. Neben dem Unterverzeichnis images wurden zwei Dateien, nämlich search.htm und global.asa angelegt:

Die HTML-Datei search.htm enthält HTML-Code zur Volltextsuche
 

innerhalb des angelegten Webs. Diese Suche hat aber mit dem Suchen in einer Datenbank nichts zu tun, sondern bezieht sich nur auf Dokumente innerhalb normaler HTML-Seiten.

Die Datei global.asa ist dagegen von zentraler Bedeutung für unser Projekt. In global.asa können Routinen definiert werden, die ausgeführt werden, wenn die erste Seite der Anwendung zum allerersten Mal von einem Benutzer ausgeführt wird, wenn die Anwendung vollständig beendet wird, wenn ein Benutzer eine einzelne Sitzung startet und wenn der Benutzer die Sitzung beendet oder das Zeitlimit erreicht wird. Es sind dies: Application_OnStart, Application_OnEnd, Session_OnStart und Session_OnEnd. Im ursprünglichen Zustand enthält global.asa nur das nackte Gerüst dieser Behandlungsroutinen. Bei der späteren Datenbankanbindung sorgt Visual InterDev selbst für die nötigen Einträge. Durch einen Doppelklick auf global.asa kann die Datei in ihrem Urzustand betrachtet werden.

2. Einrichtung einer ODBC-Datenquelle

Nun soll eine ODBC-Datenquelle eingerichtet werden, die auf die Access-Datenbank Handreichungen.mdb zugreift. Dazu in der Systemsteuerung auf das Symbol ODBC-Datenquellen doppelklicken. Es öffnet sich das Fenster des ODBC-Datenquellen-Administrators. Wichtig !! Hier muss jetzt auf die Registerkarte System-DSN geklickt werden. Damit wird eine sogenannte ODBC-Systemdatenquelle eingerichtet, so dass alle Benutzer eines Computers und die NT-Dienste (also auch der Internet Information Server) darauf zugreifen können.
 

Auf Hinzufügen klicken, im Fenster Neue Datenquelle erstellen den Microsoft Access-Treiber (*.mdb) auswählen und auf Fertig stellen klicken.

Dann erscheint das ODBC Microsoft Access 97-Setup. Hier wird ein beliebiger Datenquellenname eingetragen. Die ODBC-Datenquelle wurde hier WebSeiten genannt. Über diesen Namen erfolgt später der Zugriff.
 

Jetzt auf die Auswählen klicken und im Fenster Datenbank auswählen die Access-Datenbank D:\Daten\Handreichungen.mdb wählen.

Nach dem Klick auf OK ist nur noch das Hauptfenster des ODBC-Datenquellen-Administrators offen. Dort ist jetzt die neue Systemdatenquelle WebSeiten und der zugehörige Treiber eingetragen.
 

Nun können der ODBC-Datenquellen-Administrator und die Systemsteuerung wieder verlassen werden.

Wichtige Anmerkung: Wird der Visual InterDev-Client auf einer Workstation ausgeführt, so ist es am zweckmäßigsten, die Datenbank auf ein Laufwerk und in ein Verzeichnis mit gleicher Benennung wie auf dem Server zu legen. (Also hier in beiden Fällen auf D:\Daten\Handreichungen.mdb). Außerdem muss die ODBC-Datenquelle sowohl auf dem Server als auch auf der Workstation eingerichtet werden. Nur so können die zahlreichen Automatismen von Visual InterDev problemlos genutzt werden und ein dauerndes manuelles Ändern z.B. von global.asa kann entfallen.

3. Integration der Datenverbindung in das Web-Projekt

Zur Integration der Datenverbindung zunächst wieder das Visual InterDev-Fenster maximieren. Dann in der Registerkarte File View auf die Projektbezeichnung (hier: //s1/hliste) klicken und im Menü Projekt die Befehle Dem Projekt hinzufügen _ Datenverbindung wählen:
 

Im Fenster Datenquelle auswählen das Register Computerdatenquelle aktivieren und dort die zuvor eingerichtete Datenquelle WebSeiten (vom Typ System) auswählen.

Im Register File View erscheint jetzt unterhalb von global.asa ein Symbol für die Datenverbindung DataConn.
 

Durch einen Doppelklick auf DataConn wechselt man automatisch auf das neue Register Data... . Dort wird die Datenbank Handreichungen samt ihrer Tabellen Bestellung und Handreichungsliste angezeigt.
 

Ein Doppelklick im Register File View auf global.asa zeigt hier zusätzlich folgende Zeilen an, die sich auf die gerade eingerichtete Datenverbindung beziehen:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Session_OnStart

`==Visual InterDev Generated - DataConnection startspan==

`—Project Data Connection

Session("DataConn_ConnectionString") = "DSN=WebSeiten;DBQ=D:\Daten\Handreichungen.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5;"

Session("DataConn_ConnectionTimeout") = 15

Session(«DataConn_CommandTimeout») = 30

Session(«DataConn_RuntimeUserName») = «»

Session(«DataConn_RuntimePassword») = «»

`==Visual InterDev Generated - DataConnection endspan==

End Sub

</SCRIPT>

Anmerkung: RUNAT=Server ist äquivalent zu <% ... %> .

4. Homepage erstellen

Die Homepage soll es dem Benutzer ermöglichen, Daten einzugeben, die dann an den Server geschickt werden. Im vorliegenden Fall soll nach (Teilen) der Handreichungsnummer, des Titels und des Untertitels gesucht werden. Die Eingabefelder sollen txtHandr, txtTitel1 und txtTitel2 heißen. Der HTML-Code, der in Visual InterDev über Datei _ Neu _ Dateien _ HTML-Seite unter dem Namen index.htm eingegeben wurde, sieht wie folgt aus: (Die Zeilennummern am Rand dienen hier nur der Orientierung und sind in der eigentlichen Datei index.htm nicht vorhanden.)

01 <html>

02

03 <head>

04 <title>Handreichungsliste</title>

05 </head>

06

07 <body>

08

09 <h1>Handreichungsliste des LEU</h1>

10

11 <h2>Hier können Sie nach Handreichungen suchen</h2>

12

13 <form METHOD="POST" ACTION="suchen.asp"> <p>

14 <input TYPE="TEXT" NAME="txtHandNr" size="20">Handreichungsnr.<br>

15 <input TYPE="TEXT" NAME="txtTitel1" size="20">Titel<br>

16 <input TYPE="TEXT" NAME="txtTitel2" size="20">Untertitel<br><br>

17         <input TYPE="SUBMIT" VALUE="Suche starten">

18         <input TYPE="RESET" VALUE="Zurücksetzen"> </p>

19 </form>

20

21 </body>

22

23 </html>

Der Formularteil wird in Zeile 13 mit <form> eingeleitet und in Zeile 19 mit </form> wieder beendet. Das einleitende <form> -Tag in Zeile 13 enthält auch Angaben darüber, wie die Daten behandelt werden sollen. METHOD="POST" weist den Browser an, alle Daten im Formular zu packen und an den Server zu senden. Dagegen würde GET die Daten als Bestandteil der URL an die Zielseite senden. Von dieser Methode wollen wir hier aber keinen Gebrauch machen. Das Attribut ACTION="suchen.asp" legt die Zielseite (hier suchen.asp) für die übermittelten Daten fest.

In den Zeilen 14 bis 18 befinden sich die Eingabefelder <input>. Dabei bezeichnet das Attribut TYPE= den Datentyp der Eingabe. Der wichtigste Typ ist „TEXT". NAME ist der Variablenname des Eingabefelds, MAXLENGTH die maximale Zahl der Zeichen, die eingegeben werden dürfen und SIZE bestimmt die Breite des Eingabefeldes innerhalb des Formulars.

Mit dem zusätzlichen Parameter VALUE kann das Feld vorbesetzt werden, z.B. mit einem Wert, den man z.B. aus einer Datenbank oder einem Cookie geholt hat. Beispiel: VALUE=<%=Vorname%>

Weiter braucht man eine Schaltfläche, um die Daten zum Server zu schicken. In Zeile 17 steht der entsprechende Typ „SUBMIT". Über VALUE wird die Beschriftung der Schaltfläche zugewiesen. Außerdem findet man in Zeile 18 noch den Typ „RESET" zum Zurücksetzen des Formulars.

Im Browser wird der obige HTML-Code wie folgt angezeigt:
 

5. Datenbank veröffentlichen

In der gerade erstellten Homepage wurde festgelegt, dass die Daten an die Active Server Page suchen.asp übergeben werden sollen. Die Variablen waren txtHandNr, txtTitel1 und txtTitel2. Die Seite wird in Visual InterDev über Datei _ Neu _ Dateien _ Active Server Page unter dem Namen suchen.asp angelegt:
 

Darauf öffnet sich das Fenster des Active Server Page-Editors und zeigt das Grundgerüst der Datei suchen.asp:
 

Sobald man hier eine VBScript-Befehlsfolge mit <% einleitet, wird der nachfolgende Code bis zu der Stelle gelb unterlegt angezeigt, an der die zugehörigen Abschlusszeichen %> stehen. Dadurch vergisst man zumindest nicht, die Befehlsfolgen wieder abzuschließen.

Man kann sich in Visual InterDev einen Teil der benötigten Abfrage in SQL anzeigen lassen. Dazu hangeln wir uns im Register Data... durch Klicken bis zur Tabelle Handreichungsliste durch. Dort setzen wir Häkchen in die benötigten Feldbezeichnungen und klicken im Fenster Abfrage auf die Schaltfläche SQL. Dadurch hat man zumindest einen Anhaltspunkt für die SQL-Abfrage:
 

In Microsoft Access ist es ebenfalls möglich, sich zu jeder Abfrage die SQL-Befehlsfolge anzeigen zu lassen. Diese lautet z.B. SELECT HandNr, Titel1, Titel2, Epreis FROM HANDREICHUNGSLISTE WHERE (HandNr LIKE `H-97') AND (Titel1 LIKE `Word'). Hier werden also die Felder HandNr, Titel1, Titel2, Epreis aus der Tabelle HANDREICHUNGSLISTE ausgewählt, bei denen HandNr an beliebiger Stelle die Zeichenkette `H-97'und Titel1 `Word' enthält. Zu beachten ist, dass Zeichenketten in SQL-Anweisungen in einfache obere Anführungszeichen `...' eingeschlossen werden.

Online-News Ausgabe 13, April 2001 Seite 
Nachfolgend der VBScript-Code zur Veröffentlichung der Datenbank. Die Zeilennummern dienen wieder nur der Orientierung und dürfen in der Seite suchen.asp nicht enthalten sein.

01 <%@ LANGUAGE="VBSCRIPT" %>

02

03 <HTML>

04 <HEAD>

05 <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">

06 <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">

07 <TITLE>Ergebnisse der Suche</TITLE>

08 </HEAD>

09 <BODY>

10

11 <%

12 Public dbHandr

13 Public rsHandr

14 Dim strSQL

15

16 ` Eine Verbindung zur Datenbank HANDREICHUNGEN aufbauen

17 Set dbHandr = Server.CreateObject("ADODB.Connection")

18 dbHandr.Open("WebSeiten")

19

20 ` SQL-Befehl aufbauen

21 strSQL = "SELECT HandNr, Titel1, Titel2, EPreis "

22 strSQL = strSQL & "FROM HANDREICHUNGSLISTE WHERE (1=1)"

23

24 If Request.Form("txtHandNr") <> "" Then

25         strSQL = strSQL & " AND (HandNr LIKE `%" & Request.Form("txtHandNr") & "%')"

26 End If

27

28 If Request.Form("txtTitel1") <> "" Then

29         strSQL = strSQL & " AND (Titel1 LIKE `%" & Request.Form("txtTitel1") & "%')"

30 End If

31

32 If Request.Form("txtTitel2") <> "" Then

33         strSQL = strSQL & " AND (Titel2 LIKE `%" & Request.Form("txtTitel2") & "%')"

34 End If

35

36 `Abfrage starten

37 Set rsHandr = Server.CreateObject("ADODB.Recordset")

38 rsHandr.Open strSQL, dbHandr, 3

39 %>

40 <%

41 If rsHandr.BOF And rsHandr.EOF Then%>

42

43 <h2 align="center">Sorry kein Eintrag...Nochmal !</h2>

44 <%Else

45         rsHandr.MoveLast

46         rsHandr.MoveFirst

47 End If

48 If rsHandr.RecordCount > 200 Then%>

49

50 <h2 align="center">Sorry zu viele Treffer, bitte Suche eingrenzen </h2>

51 <%Else%>

52 <%If Not rsHandr.BOF Then%>

53

54 <h2>Hier die Suchergebnisse</h2>

55

56 <table BORDER="1">

57     <tr>

58             <th>Handreichungsnummer </th>

59             <th>Titel </th>

60             <th>Untertitel </th>

61             <th>Preis in DM </th>

62     </tr>

63 <%

64 Do While NOT rsHandr.EOF

65 %>

66     <tr>

67             <td><%=rsHandr("HandNr")%></td>

68             <td><%=rsHandr("Titel1")%></td>

69             <td><%=rsHandr("Titel2")%></td>

70             <td><%=rsHandr("EPreis")%></td>

71     </tr>

72 <%

73         rsHandr.MoveNext

74 Loop

75 %>

76 </table>

77 <%End If%>

78 <%End If%>

79 <%

80 rsHandr.Close

81 dbHandr.Close

82 Set rsHandr = Nothing

83 Set dbHandr = Nothing

84 %>

85

86

87 </BODY>

88 </HTML>
 

In Zeile 01 wird die VBScript als Scriptsprache festgelegt. In den Zeilen 03 bis 10 steht ganz gewöhnlicher HTML-Code. In Zeile 12 wird die Variable dbHandr für das ADODB.Connection-Objekt deklariert. Darunter in Zeile 13 die Variable rsHandr für das ADODB.Recordset-Objekt. In Zeile 14 dann die Zeichenkette strSQL für den SQL-Befehl. In den Zeilen 16 bis 18 wird über die Objekt-Instanz dbHandr die Verbindung zur Datenbank Handreichungen aufgebaut und geöffnet. Die ODBC-Datenquelle wurde ja bereits unter dem Namen "WebSeiten" eingerichtet. In den Zeile 20 bis 34 wird der SQL-Befehl aufgebaut. Die Zeichenkette, die der Benutzer in das Formularfeld mit dem Namen txtHandNr der Seite index.htm eingegeben hat, wird in Zeile 25 über Request.Form("txtHandNr") in den SQL-Befehl eingebaut, falls die Zeichenkette tatsächlich Zeichen enthält. Mit den anderen Formularfeldern wird in Zeile 29 und 33 gleich verfahren. Die Abfrage wird ab Zeile 37 gestartet, in dem zunächst die Objekt-Instanz rsHandr für die Datensätze eingerichtet und dann in Zeile 38 die eigentliche Datenbankabfrage mit der gerade erzeugten SQL-Anweisung gestartet wird. In Zeile 41 wird ermittelt, ob die Abfrage keinen Datensatz zurückgeliefert hat. BOF zeigt an, dass sich die aktuelle Datensatzposition vor dem ersten Datensatz in einem Recordset-Objekt befindet. EOF zeigt an, dass sich die aktuelle Datensatzposition hinter dem letzten Datensatz in einem Recordset-Objekt befindet. Die entsprechende Meldung wird in Zeile 43 ausgegeben. Gibt es tatsächlich Treffer, so wird in den Zeilen 44 bis 47 gewissermaßen auf den Anfang zurückgespult. In Zeile 48 wird ermittelt, ob es mehr als 200 Treffer gibt. Wenn ja, wird der Benutzer aufgefordert, die Suche einzugrenzen. Ist dies nicht der Fall, so wird zunächst in Zeile 52 sichergestellt, dass sich die aktuelle Datensatzposition nicht vor dem ersten Datensatz befindet. Dann wird in Zeile 54 eine Überschrift, und in den Zeilen 56 bis 62 die Tabellenbeschriftung erzeugt. In der zwischen den Zeilen 64 und 74 liegenden Schleife werden die gewünschten Datenfelder in eine Tabellenzeile pro Datensatz geschrieben. Dies geschieht z.B. für das Feld EPreis über <%=rsHandr("Epreis")%>. In Zeile 73 wird dann zum nächsten Datensatz gesprungen. Die Schleife wird solange durchlaufen, bis sich die aktuelle Datensatzposition hinter dem letzten Datensatz befindet. In den Zeilen 80 bis 83 werden die Verbindungen geschlossen und die Variablen zurückgesetzt. Mit </BODY> und </HTML> endet in den Zeilen 87 und 88 der Code der Seite suchen.asp. Hat man sich bei der Eingabe des Codes nirgends vertippt, so kann der Benutzer _ und die Benutzerin natürlich auch _ die Ergebnisse der Abfrage bewundern:

Mit ein bisschen Fantasie, Energie und zusätzlichen SQL-Befehlen, lässt sich das Beispiel so ausweiten, dass auch Bestellungen entgegengenommen werden können, die dann in der Tabelle Bestellung gespeichert werden ...