Die wesentlichen Teile der Ausgabeseite basieren auf dem Subtyp 'Start nur mit Eingabe', so daß die Abfrage zunächst durch das <sd:ignore>-Element ausgeblendet wird. Der Button wird um sd:only-save='true' ergänzt, das sd:as-radio-Attribut wurde per Hand hinzugefügt.
<table> <sd:input-table sd:name="sample-input" sd:table="onlinequiz" sd:cached-id="onlinequizId" sd:rel-format="auto"> <tr> <td style="width:400px"> <sd:label sd:col="begruender" /> </td> <td style="width:400px"> <sd:input-text sd:col="begruender" /> </td> </tr> <tr> <td> <sd:label sd:col="xml_start" /> </td> <td> <sd:input-text sd:col="xml_start" sd:as-radio="true" /> </td> </tr> <tr> <td> <sd:label sd:col="xls_definition" /> </td> <td> <sd:input-text sd:col="xls_definition" /> </td> </tr> <tr> <td> <sd:label sd:col="sql_verwendung" /> </td> <td> <sd:input-text sd:col="sql_verwendung" /> </td> </tr> </sd:input-table> </table> <p /> ... <sd:ignore sd:ignore-type="0 new"> Ihr Ergebnis: <sd:rs sd:name="sample-output" sd:source-type="query" sd:source-name="onlinequiz_auswertung"> <sd:with-param sd:sql-param="@i" sd:std-value="$onlinequizId" /> <sd:normal> <sd:cell-value sd:col="Score" /> </sd:normal> </sd:rs> von maximal 4 Punkten.<p/> Der derzeitige Höchststand beträgt <sd:rs sd:name="high-score" sd:source-type="query" sd:source-name="onlinequiz_highscore"> <sd:normal> <span style='background-color:red;'> <sd:cell-value sd:col="maxScore" /> </span> </sd:normal> </sd:rs> </sd:ignore>Dieses Beispiel verdeutlicht, daß das Ergebnis einer Abfrage auch beliebig in Text eingebettet werden kann.
Zusätzlich wird das sd:cached-id-Attribut genutzt, um die Id der vom Leser gespeicherten Zeile zu cachen, sie dem sd:with-param-Element zu übergeben und mit ihr die Abfrage auszuführen. Diese verwendet den folgenden Sql-Befehl:
Declare @i int Select Case A.begruender When 3 Then 1 Else 0 End + Case A.xml_start When 3 Then 1 Else 0 End + Case A.xls_definition When 2 Then 1 Else 0 End + Case A.sql_verwendung When 4 Then 1 Else 0 End As Score From onlinequiz As A Where A.onlinequizId = @iSo sieht man natürlich die korrekten Antworten.
Die 'onlinequiz_highscore' - Abfrage bildet das Maximum über alle gefundenen Einträge und liefert den Spitzenreiter:
Select Max( Case A.begruender When 3 Then 1 Else 0 End + Case A.xml_start When 3 Then 1 Else 0 End + Case A.xls_definition When 2 Then 1 Else 0 End + Case A.sql_verwendung When 4 Then 1 Else 0 End ) As maxScore From onlinequiz As AEs handelt sich also um eine aggregierende Abfrage, deren Zeilen nicht durch eine Where-Bedingung eingeschränkt sind.
Man sieht: Es genügen geeignete Tabellendefinitionen, Sql-Abfragen mit Parametern sowie die deklarative Erstellung von Ausgabeseiten, um eine solche Funktionalität anbieten zu können.
Zurück zur Startseite