|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| |
Zusammenfassung
Sie lernen, wie Sie Daten zwischen ASP-Seiten übertragen und auswerten. Außerdem erfahren Sie, wie Sie Daten per ASP filtern können und erweitern damit die ASP-Raumplanung.
Techniken
ASP, HTML, ADO, SQL
Voraussetzungen
Access 2000 oder höher, IIS
Beispieldateien
Raumplanung.zip (ab Access 2000)
Beiträge zu diesem Thema: 264, 272
ASP-Raumplanung (Teil 2)
In einer der letzten Ausgaben haben Sie die ASP-Raumplanung und dabei die Grundlagen von ASP und dem Internet Information Server kennen gelernt. Dieser Beitrag ergänzt die Raumplanung um Filterfunktionen und eine Detailansicht der einzelnen Buchungen.
Einleitung
In der aktuellen Version der ASP-Raumplanung gibt die Datei raumbuchungentabelle.asp alle Raumbuchungen in einer formatierten Liste aus (s. Abb. 1). Diese Variante ist allerdings nur bei einer sehr kleinen Anzahl von Raumbuchungen praktikabel und auch dann wächst die Liste mit der Zeit stark an. Zur Eingrenzung der Liste ist deshalb eine Filterfunktion unabdingbar, die im Folgenden entwickelt wird.
HinweisNeben der Listenansicht, die nur die wichtigsten Daten der Buchungen anzeigt, ist auch eine Detailansicht erforderlich, in welcher der Benutzer dann alle Daten der Buchungen einsehen kann. Wie Sie aus der Liste in diese Einzelansicht verzweigen und die dafür nötigen Parameter an diese übergeben, lesen Sie in Kapitel 3.
Filtertechnik
Die Buchungsliste soll über den Veranstaltungsnamen, das Startdatum und den Raum eingeschränkt werden können. Für die Eingabe der Veranstaltung und des Startdatums können Sie Textfelder verwenden. Der Raum soll über ein Kombinationsfeld selektiert werden.
Die Seite raumbuchungen.asp wird dabei so aufgebaut, dass sich Filter und Ergebnisliste auf einer Seite befinden; der Filter im oberen Bereich der Seite und die Ergebnisliste darunter, wie in Abb. 2 verdeutlicht ist.
Filterformular anlegen
Um den Filter für die Buchungstabelle zu realisieren, benötigen Sie zunächst ein Standard-HTML-Formular, in das der Benutzer die Filterkriterien eingibt. Nun stehen Sie vor dem Problem, diese Kriterien auszuwerten, um das passende SQL-Statement für die Ergebnisliste zu generieren und diese anzuzeigen.
Clientseitig ist das mit ASP nicht möglich und VB-Scripte in der ASP-Seite werden nur beim erneuten Aufruf der Seite verarbeitet. Folglich müssen Sie beim Absenden des Formulars per Submit-Buttons eine ASP-Seite aufrufen, die eingegebenen Werte übergeben und die Werte in der neuen Seite abfragen und verarbeiten.

Abb. 1: Die aktuelle Ansicht der Buchungsübersicht

Abb. 2: Die fertige Ansicht mit Filter
Da sich Filter und Ergebnis auf derselben Seite befinden, muss sich die Seite selbst aufrufen. Das erreichen Sie, indem Sie beim Formular-Parameter action den Namen der Seite raumbuchungen.asp angeben. Abb. 3 zeigt den Quellcode für das Formular mit Form-Tag, das den action-Parameter sowie den Namen frmFilter des Formulars enthält.
Innerhalb des Form-Tags ist eine Tabelle vorbereitet, welche die Beschriftungen für die Filterfelder und den Submit-Button beinhaltet und später die Steuerelemente aufnimmt. Die Schaltfläche erzeugen Sie über ein Input-Tag vom Typ submit:
Die Schaltfläche hat den Namen btnFilter und die Beschriftung Filter anwenden.
Abb. 4 zeigt das Ergebnis des Quellcodes im Browser.
HinweisWenn Sie auf die Schaltfläche Filter anwenden klicken, sehen Sie in der Statusleiste des Browsers, dass die Seite neu geladen wird. Sie können so überprüfen, ob Sie die richtige ASP-Seite angegeben haben. Wenn Sie sich beispielsweise verschrieben haben, erscheint nach dem Klicken auf die Filter-Schaltfläche eine Fehlerseite. (
Mit dem Formular und der Tabelle haben Sie den Rahmen für den Filter gesetzt.
Im Folgenden legen Sie der Reihe nach die Steuerelemente an.
Textfeld für den Veranstaltungsfilter einfügen
Im ersten Schritt soll ein Textfeld zur Suche nach dem Veranstaltungsnamen zur Verfügung gestellt werden. Dazu fügen Sie an der entsprechenden Stelle in der Tabelle den nachfolgenden Code für das Textfeld ein:

Abb. 3: Grundgerüst für das Filterformular

Abb. 4: Filterformular ohne Eingabefelder in der Browser-Ansicht

Abb. 5: Anzeige des Textfeldes
Das Textfeld wird wie der Submit-Button über das Input-Tag definiert, wobei der Parameter type diesmal den Wert text erhält.
Das Textfeld hat den Namen txtVeranstaltung und über den Parameter size die Länge 40 Zeichen. Dabei handelt es sich lediglich um die Breite des Textfeldes und nicht um die maximal mögliche Anzahl Zeichen, die eingegeben werden kann.
Über den Parameter value könnten Sie dem Textfeld einen Standardwert mitgeben, der beim Aufruf des Formulars im Textfeld stehen würde. Im Beispiel ist der Wert des Parameters zunächst nicht gesetzt. Abb. 5 zeigt das Textfeld mit einer Beispieleingabe.
Abfrage des Feldinhaltes
Um den Inhalt eines Formularfeldes zu ermitteln, verwenden Sie das ASP-Objekt Request in Kombination mit der Form-Collection.
Über die Collection können Sie alle Formularfelder abfragen. Geben Sie dazu den Steuerelementnamen in Klammern als String ein. Der folgende Ausdruck weist der Variablen txtVeranstaltung den Inhalt des Steuerelements txtVeranstaltung zu:
Ebenso können Sie prüfen, ob die Submit-Schaltfläche gedrückt wurde. Ist das der Fall, hat das Steuerelement den Wert Filter anwenden. Beim ersten Aufruf des Formulars hingegen besitzt die Schaltfläche keinen Wert.
Filterbedingung erzeugen
Quellcode 1 ermittelt zunächst die Inhalte der Steuerelemente. Anschließend prüft die Prozedur, ob der Filterbutton gedrückt wurde, und setzt dann, sofern im Steuerelement txtVeranstaltung ein Wert eingegeben wurde, die Bedingung für das SQL-Statement zusammen.
Quellcode 1: Inhalt von Steuerelementen ermitteln
btnFilter = Request.Form("btnFilter")
txtVeranstaltung = Request.Form("txtVeranstaltung")
If len(btnFilter) > 0 Then
If len(txtVeranstaltung) > 0 Then
WhereCondition = " AND Veranstaltung Like '%" _ & txtVeranstaltung & "%'"
End If
End If
SQL = "Select * from qryAlleBuchungen WHERE 1=1 " _ & WhereCondition & " ORDER BY Start"

Abb. 6: Filtern über den Veranstaltungsnamen
Eingaben im Filter erhalten
Wenn Sie nun einen Wert in den Filter eingeben, wird das Ergebnis in der Buchungsübersicht entsprechend gefiltert.
Allerdings ist nach dem erneuten Aufruf des Formulars der Inhalt des Filterfeldes gelöscht.
Damit der vom Benutzer eingegebene Text erhalten bleibt, geben Sie als Standardwert beim Textfeld im Parameter value den Ausdruck <%=txtVeranstaltung%> ein. Dieser schreibt den zuvor über Request.Form ermittelten Inhalt des Textfeldes wieder in dasselbe hinein. In Abb. 6 sehen Sie zum Beispiel das Ergebnis für das Kriterium Technik. Der Filterwert bleibt dabei wie gewünscht im Eingabefeld stehen.
Datumsfilter ergänzen
Den Filter für das Startdatum können Sie analog zum Filter für den Veranstaltungsnamen anlegen. Ergänzen Sie dazu die Tabelle um zwei Textfelder mit den Namen txtStartdatumVon und txtStartdatumBis mit Hilfe der folgenden zwei Input-Tags:
<input type="text" name="txtStartdatumVon" size="10" class="value" value="<%=txtStartdatumVon%>">
<input type="text" name="txtStartdatumBis" size="10" class="value" value="<%=txtStartdatumBis%>">
Am Anfang der ASP-Seite fragen Sie die Inhalte der Steuerelemente wieder wie folgt ab:
Filterbedingung definieren
Anschließend setzen Sie mit den in Quellcode 2 gezeigten Anweisungen die Filterbedingung für das SQL-Statement zusammen.
Das Script prüft nacheinander, ob Start- und Enddatum eingegeben wurden, und passt die Filterbedingung entsprechend an.
Quellcode 2: Filterbedingung zusammensetzen
If len(txtStartdatumVon) > 0 Then
'Enddatum fehlt
If len(txtStartdatumBis) = 0 Then
WhereCondition = WhereCondition & " AND Start Between " & GetSQLDatum(txtStartdatumVon) _ & " And " & GetSQLDatumTagesende(txtStartdatumVon)
Else
'Enddatum ist angegeben
WhereCondition = WhereCondition & " AND Start Between " & GetSQLDatum(txtStartdatumVon) _ & " And " & GetSQLDatumTagesende(txtStartdatumBis)
End If
End If
'Startdatum fehlt
If len(txtStartdatumVon) = 0 And len(txtStartdatumBis) > 0 Then
WhereCondition = WhereCondition & " AND Start Between " & GetSQLDatum(txtStartdatumBis) _ & " And " & GetSQLDatumTagesende(txtStartdatumBis)
End If
Quellcode 3: Datumsformate bereitstellen
<%
Public Function GetSQLDatum(NormalDatum)
MyDate = cdate(NormalDatum)
GetSQLDatum = "#" & Month(MyDate) & "/" & Day(MyDate) & "/" & Year(MyDate) & "#"
End Function
%>
<%
Public Function GetSQLDatumTagesende(NormalDatum)
MyDate = cdate(NormalDatum)
GetSQLDatumTagesende = "#" & Month(MyDate) & "/" & Day(MyDate) & "/" & Year(MyDate) _ & " 23:59:59#"
End Function
%>
Quellcode 4: Validieren von Datumswerten
If len(txtStartdatumVon) > 0 And Not IsDate(txtStartdatumVon) Then
Error = Error & "- Der Datums-Startwert ist kein gültiger Datumswert. "
End If
If len(txtStartdatumBis) > 0 And Not IsDate(txtStartdatumBis) Then
Error = Error & "- Der Datums-Endwert ist kein gültiger Datumswert. "
End If
If len(Error) > 0 then
Error = "Es sind die folgenden Fehler aufgetreten: " & Error
End If
If len(btnFilter) > 0 And len(Error) = 0 Then
|