dbServ

Einsatz von dbServ
Für die Ausgabe im HTML-Format werden spezielle Templates benutzt, die zusätzlich zu den Standardausgaben datenbankspezifische bieten. Damit diese Anforderungen vom Server bearbeitet werden können, muß ein Template auf besondere Art aufgerufen werden:

  • Ausgabe:
    HREF="http://localhost:4444/out?template=adr/adraend.shtml"
    Der Host wird mit der zusätzlichen Portadresse angesprochen (hier 4444). Als Dokument wird nur 'out' aufgerufen, dafür aber mit Parameterangabe 'template=...'.
  • Eingabe:
    HREF="http://localhost:4444/in?template=adr/adrupd.shtml"
    Datenbankänderungen beginnen mit 'in' und benötigen weitere Parameter. In der Regel werden die Statements von einem FORM direkt zusammengesetzt. Siehe dazu Arbeitsweise.

zusätzliche Tags
dburlEnthält die gewünschte Datenbank
dbschemaHier kann ein Datenbankschema angegeben werden.
dbuserDer anzumeldende Benutzer
dbpasswdDas Passwort
Diese ersten Tags werden allerdings nicht mit ausgegeben und erscheinen nur im Template.
Alle vier Angaben stehen im Dokumenten-Header.
<dbstmt>
</dbstmt>
Dieser Tag klammert das SQL-Statement. Bei 'out'-Templates wird der Befehl um die beim Aufruf übergebenen Parameter erweitert.
Wird z. B. 'id_=100' übergeben, so wird das Statement um diese Angabe ergänzt. Dies gilt auch, wenn der Befehl mit ORDER BY oder GROUP BY abgeschlossen wurde. Alle variablen SQL-where clause Argumente brauchen also nicht im Statement berücksichtigt werden, sie fließen durch den Server automatisch ein.

Im in-Statement müssen an diesere Stelle die gewünschten Feldwerte markiert werden. Dies geschieht in der Form: '##feld##'.
Soll z. B. ein Name geändert werden, so steht im Statement 'set name_ = ##name_##'. Die Referenz 'name_' muß bei der Parameterübergabe in Form von 'name_=DerName' vorkommen, sie wird dann vom Server eingesetzt.
Manchmal kommt es vor, daß numerische Werte in ein Textfeld übernommen werden sollen (z.B. Postleitzahlen). Beim Input kann deswegen eine alphanumerische Behandlung erzwungen werden, wenn bei Variablenübergabe ',c' eingefügt wird (z.B. ##plz_,c## siehe adrupd.shtml).
Große Textströme verursachen manchmal Probleme, wenn sie als String übergeben werden. Deshalb kann man sie bei der Eingabe als ASCII-Stream kennzeichnen (z.B. ##longtext_,a## siehe adrupd.shtml).

<dbcall>
</dbcall>
Innerhalb dieser Tags steht ein Aufruf einer Stored Procedure.
Sie auch dazu Arbeitsweise.
dbmaxrowWieviel Zeilen sollen ausgegeben werden?
dbincludeEs lassen sich an dieser Stellen wiederkehrende Texte aufrufen.
<dbdata>
</dbdata>
Zwischen diesen Tags stehen die wiederkehrenden Ausgaben des SQL-Statement. Solange Daten vorhanden sind, wird z. B. eine Liste gefüllt. Dazu wird wieder eine Referenz eingefügt in Form von '##name_##', die zur Laufzeit vom Server mit dem Inhalt vom Feld 'name_' gefüllt wird. Da nicht immer die Feldnamen bekannt sind, kann auch als Ersatz '##1##' für das erste Ausgabefeld angegeben werden.
<dbdata txt="no data">Zusätzlich kann in 'dbdata' ein Text für die Ausgabe definiert werden, der erscheinen soll, wenn keine Daten vorhanden sind.
<dbbreak col=???>
</dbbreak>
Eine Ausgabe kann durch 'dbBreak' gruppiert werden. Dazu wird als Parameter das Feld für die Bündelung benötigt. In der Klammer stehen dann alle zusammengehörigen Werte. 'dbBreak' kann auch geschachtelt werden.
<dbbreak typ=mail col=???>
</dbbreak>
Eine spezielle Art von Gruppierung ist der Mailtyp. Die Daten innerhalb dieser Tags werden versandt, wenn aller Rahmenbedingung erfüllt sind.
Im Debug-Modus werden die Daten auf der Konsole ausgegeben. Wenn der Mailhost nicht angegeben wird, werden die Daten in der HTML-Ausgabe angezeigt.
<dbmailto=???>
<dbmailsubject=???>
Zusätzliche Variablen, die für eine Mail gefüllt sein müssen.
dbsubErlaubt es, zusätzliche Datenbankabfragen einzubauen. Diese Tag kann nicht innerhalb von 'dbdata' stehen.
##dbrownum##dbrownum ist ein spezielle Variable mit der die Zeilennummer ausgegeben werden kann. Sie wird benutzt wie ein Feldvariable.
##dbrowplus##dbrowplus ist dbrownum plus eins. Sie wird benutzt wie ein Feldvariable.
##dbrowminus##dbrowminus ist dbrownum minus eins. Sie wird benutzt wie ein Feldvariable.
##dbswaprow txt1="???" txt2="???"##dbswaprow ermöglicht die unterschiedliche Gestaltung jeder zweiten Zeile.
##dbtan##dbtan gibt eine Transaktionsnummer aus. Dazu muß bei der Parameterübergabe beim ersten Aufruf ein Aktivierung durch 'dbtan=0' geschehen. In allen folgenden Scripten muß die Transaktionsnummer dann wieder übergeben werden, damit die Transaktion gültig bleibt. Es wird bei jedem Aufruf die Gültigkeit (vergangene Zeit und aufrufender Host) geprüft. Die Zeit der Gültigkeit wird über die Ini-Datei festgelegt.
dbtanrequiredBestimmt, daß eine Seite eine dbtan benötigt.
dbfirstrow
dbnextrow
Mit diesen beiden Variablen können die Ausgaben zusätzlich beschränkt werden. Z.B. <INPUT TYPE=HIDDEN NAME=dbfirstrow VALUE="5"> startet die Ausgabe erst ab dem 5. Datensatz.
&dbvar=???;
dbfirstrow
dbnextrow
dbprevrow
dblastrow
Dieser Variablenaufruf stehen außerhalb von <dbdata>. Z.B. <INPUT TYPE=HIDDEN NAME=dbfirstrow VALUE="&dbvar=dbprevrow;"> füllt die vorherige Zeilennummer ein. Diese wird berechnet aus 'dbfirstrow' und 'dbmaxrow'. Wenn also dbfirstrow gleich 4 ist und dbmaxrow gleich 3, dann ist dbprevrow gleich 1. (siehe Beispiel liste.shtml)
'dblastrow' gibt die letzte ausgegebene Zeile aus.
<dbnocache>Mit dieser Anweisung im Header werden Templates nicht zwischengespeichert.
##dbnow##dbnow gibt das Datum aus. Ein Aufruf mit 'form' formatiert das Datum. Beispiel: ##dbnow form="MM.yy"## gibt Monat und Jahr zurück. Es gelten die Java-Konventionen für das Datumsformat.
dbprocesswriterdbprocesswriter legt für das Template einen abweichenden Writer fest. Diese Angabe muß vor der ersten Ausgabe geschehen. Z.B. <!-dbprocesswriter="de.dbServ.writer.dbMyWriter"-> ändert die Voreinstellung dbSimpleWriter.

Besonderheiten

Einige Besonderheiten im Umgang mit Datenbank-Aktionen:

  • Einige Datenbanken bieten automatische Zähler, wenn Datensätze neu aufgenommen werden (COUNTER). Ist dies nicht der Fall, kann man sich mit Folgedem behelfen:
    Das Datenbank-Feld erhält den Namen id_. In einem Form wird als Hiddenfield die Übergabe formuliert:
    <INPUT TYPE=HIDDEN NAME=adr.id_ VALUE="-1">
    
    dann erhält das Feld id_ beim INSERT die nächst höhere Nummer (siehe Beispiel dbins.htm).

  • Auswahlboxen in Forms können können auch Value-Listen enthalten (siehe dbList.htm).

  • Um Form-Windows zugestalten, werden gern Images statt der sonst möglichen Buttons benutzt (<INPUT TYPE=image ...>). Leider werden beim Generieren der Übergabeparameter dann auch Werte für das Image (X- und Y-Werte) mit übergeben. Dies ergänzt die SELECT-generierung um die Zeilen AND X=5 AND Y=12 (oder so). Das kann mit einer Tabelle nicht funktionieren, für die diese Felder nicht definiert sind. Für dbServ sind diese Felder ausgeschlossen, Image-Buttons sind somit nutzbar. Es entfällt dafür die Möglichkeit Imagepixelwerte abzufragen (siehe dbList.htm).

  • Manchmal ist es sinnvoll, bestimmet Suchhilfen vorzugeben. Nicht jeder Benutzer kennt sich mit Ersetzungsregeln in SQL-Datenbanken aus. Deshalb folgende Hilfestellung:
    <INPUT TYPE="text" NAME="name_[%]"  size=30>
    
    Durch die Angabe des %-Zeichens hinter dem Feldnamen, wird für das SQL-Statement 'name_ like 'xxx%' eingesetzt. Siehe dazu Arbeitsweise.

Zusätzliche Funktionen durch JavaScript

Durch die dargestellten neuen Befehle für die Zusammenarbeit mit dbServ lassen sich sicher nicht alle Wünsche befriedigen.
Erweiterungsmöglichkeiten sehe ich hier durch JavaSript. Wenn z. B. eine Listbox generiert wird (siehe Beispiel 'adraend' im Zusammenspiel mit 'kunde2select'), kann nicht auch noch die Vorbelegung der Listbox bestimmt werden. Hier setzt ein Aufruf von JavaScript innerhalb der 'dbdata'-Klammer ein, der die gewünschte Vorbelegung erledigen kann (siehe Beispiel 'setSelect.js'). Weiter Einsatzgebiete sind denkbar.


Die Initialisierung

Die Voreinstellung von dbServ werden im File dbServ.ini gespeichert.
Folgende Einstellungen sind möglich:
logName des Logfiles
debugName des Debugfiles
errorName des Errorfiles
blogLogfile ein-/ausschalten
bdebugDebugfile ein-/ausschalten
berrorErrorfile ein-/ausschalten
use_xyÜbergabeparameter x/y benutzen (ein/aus). Wird bei der Gestaltung einer Seite ein Image als Button benutzt, übergibt der Client die x/y-Werte zusätzlich. Bei der IN-Methode für dies zu unerwünschten Nebeneffekten.
use_guiSoll eine Dialogbox vom Server angezeigt werden oder nicht.
pubDer Pfad zu den Templates
timeoutWartezeit für den Socket in Sekunden
tanaliveLebenszeit für eine Transaktionsnummer in Minuten
adminName für den Administrator
passwdPassword für den Administrator
counturlDatenbank-Url für die counter-Datenbank
counttimeLebenszeit für das angezeigte Bitmap (0 = nocache)
countdateformatDatumsformat für die Speicherung der Counterdaten
counttimeformatZeitformat für die Counterdatenbank
mailhostName des Mailhosts, bliebt dieser Wert leer, wird der Text in der HTML-Ausgabe angezeigt und nicht versandt.
mailfromEmail des Absenders
cachedirVerzeichnis für die Cachedateien
cachealiveLebenszeit für ein Cachedatei in Minuten, wird dieser Wert auf '0' gesetzt, wird nicht gecachet.
writersetzt den Default für die Ausgabe.
[driver]Abteilung für die benötigten Datenbank-Treiber
Die Treiber werden einfach untereinander aufgelistet.
com.mm.mysql.DriverBeispiel für einen Treiber

Axel Fischer, afischer@dbServ.de
home