| # Datenanbindung (nur Microsoft)
| Allgemeines zur Datenanbindung Beispiel: Datei dynamisch in Tabelle einbinden Beispiel: Daten durchsuchbar machen HTML-Elemente für die Anzeige von externen Daten Datenmodell: Tabular Data Control (TDC) Datenmodell: Remote Data Service (RDS) Datenmodell: JDBC DataSource Applet Datenmodell: XML Data Source Datenmodell: MSHTML Data Source

## Allgemeines zur Datenanbindung

Der Internet Explorer ab Version 4.x erlaubt es, in kontrollierter Form Daten aus einer externen Datenquelle zu holen und in HTML-Elementen dynamisch anzuzeigen. So ist beispielsweise eine Tabelle denkbar, in der sich der Anwender bei jedem Klick auf einen entsprechenden Button die Bundesliga-Endtabellen der Spielsaisons von 1960 bis heute anzeigen lassen kann. Bei jedem Klick werden aus einer externen Datei eine Reihe von Daten ausgelesen und dynamisch in die Anzeigetabelle übernommen.

Microsoft hat das Konzept der Datenanbindung sehr flexibel ausgelegt. Es gibt diverse Möglichkeiten, auf externe Datenquellen zuzugreifen. Der Zugriff auf eine einfache Textdatei ist nur eine davon. Es besteht ebenso die Möglichkeit, etwa über die Datenbankabfragesprache SQL auf eine Datenbank zuzugreifen, die SQL-Befehle verarbeiten kann. Für die verschiedenen Möglichkeiten der Datenanbindung gibt es verschiedene Datenmodelle. Für jedes der Datenmodelle gibt es ein bestimmtes ActiveX-Control oder ein Java-Applet, das Sie in Ihrer HTML-Datei ansprechen müssen, um die Datenanbindung damit zu realisieren. Die Datenmodelle und deren Einbindung in HTML werden auf dieser Seite vorgestellt.

Die Vorteile der Datenanbindung liegen auf der Hand: Daten können mit einer dafür geeigneten Anwendung gepflegt und gespeichert werden. Eine HTML-Datei kann auf immer aktuelle Daten zugreifen, ohne selbst geändert werden zu müssen. Für das "Holen" der Daten gibt es kein vorgeschriebenes Protokoll. Die Datenanbindung funktioniert also auf allen Umgebungen, ob auf einem WWW-Server, lokal auf einer PC-Festplatte oder auf einer CD-ROM (zumindest auf das einfachste Datenmodell trifft dies zu). Es ist kein zusätzliches CGI-Script erforderlich, das als Vermittler zwischen HTML-Datei und Datenbestand für jede Interaktion zwischen Anwender und Datenbank immer wieder aufgerufen werden muss. Das Know How hat der Browser, und die Steuerung der Datenanbindung wird direkt in der HTML-Datei notiert. Durch dynamisches Austauschen der Inhalte von HTML-Elementen, in denen die Daten angezeigt werden, ist kein neuer Aufbau der WWW-Seite erforderlich.

Aus heutiger Sicht muss das Modell der client-seitigen Datenanbindung, das Microsoft mit dem Internet Explorer 4.0 eingeführt hat, jedoch kritisch betrachtet werden. Der Grund ist einerseits, dass es auf extrem proprietären Konzepten beruht, vor allem was die Einbindung der allgemein unbeliebten ActiveX-Controls betrifft. Und andererseits haben sich Web-Server mittlerweile so stark durchgesetzt, dass es in in den meisten Fällen - auch lokal - sinnvoller ist, server-seitige CGI-Scripts zum Handling der Datenverarbeitung einzusetzen.

### Hinweis:

Die Erläuterungen zu den Datenmodellen weiter unten auf dieser Seite sind zum Teil sehr technisch. Das ist leider nicht zu ändern, da die Materie ziemlich komplex ist. Die Erläuterungen zu den Datenmodellen richten sich auch nur an Spezialisten, die wissen, was mit den entsprechenden Begriffen anzufangen ist.

## Beispiel: Datei dynamisch in Tabelle einbinden

Die hier beschriebene Vorgehensweise erläutert, wie Sie in einer Tabelle einzelne Datensätze aus einer externen Textdatei anzeigen können. Dabei wird das Datenmodell: Tabular Data Control (TDC) verwendet. Mit Hilfe von Buttons kann der Anwender den nächsten oder vorhergehenden Datensatz in die Tabelle laden.

### Beispiel Teil 1 - externe Datei adressen.txt mit Daten:

    Name|Vorname|Strasse|PLZ|Ort|Tel|EMail
    Berger|Hans|Pfisterstr.11|38487|Grubenhausen|04987-4445631|berger@example.org
    Heidenfroh|Martina|Mittelweg 123|43985|Hatzenau|04583-2398474|mh@example.org
    Rauhbein|Eberhard|Traumstr.13|56097|Höllenbachhausen|068347-582374|-
    Truthahn|Gerlinde|Aufplatz 1|93722|Sündenstadt|032987-385750|gerlinde@example.org

### Erläuterung:

Die externe Datei ist in diesem Beispiel eine einfache Textdatei, z.B. eine Datei mit dem Namen `adressen.txt`. Die Datei ist so aufgebaut, dass jede Zeile einen Datensatz darstellt. Die einzelnen Felder eines Datensatzes werden in diesem Beispiel durch das Zeichen "`|`" getrennt. Es könnte auch ein anderes Zeichen sein. Das Zeichen "`|`" wurde hier gewählt, weil es sehr selten ist und in den Daten selbst nicht vorkommt. In der ersten Zeile der Datei stehen keine Daten, sondern Feldnamen. Der dritte Feldname lautet beispielsweise `Strasse`. In den eigentlichen Datenzeilen darunter stehen dann in entsprechender Reihenfolge die Daten. So hat das dritte Feld der ersten Datenzeile den Wert `Pfisterstr.11`. Dies ist also ein Wert für den in der ersten Zeile an dritter Stelle vergebenen Feldnamen `Strasse`.

Textdateien dieser Art sind nicht besonders komfortabel, wenn man sie selbst in einem Texteditor bearbeiten will. Doch solche Textdateien lassen sich mit fast allen Tabellenkalkulations- und Datenbankprogrammen erzeugen. Meist ist dafür der Datentyp "kommabegrenzt" ("comma delimited") mit der Standard-Dateiendung `.csv` vorgesehen. Bessere Programme erlauben es dabei auch, ein selbst definierbares Feldbegrenzerzeichen zu vergeben.

### Beispiel Teil 2 - HTML-Datei mit Datenzugriff:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title></head>
    <body>
    <object id="Adressen" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
     <param name="DataURL" value="adressen.txt">
     <param name="UseHeader" value="true">
     <param name="FieldDelim" value="|">
    </object>
    <form action="">
    <table id="Anzeigetabelle" datasrc="#Adressen" datapagesize="1" width="100%" border="1">
    <colgroup><col width="200"><col></colgroup>
    <tr>
    <td bgcolor="#EEEEEE"><b>Adressen</b></td>
    <td bgcolor="#EEEEEE" align="right">
    <input type="button" value=" &lt; " onclick="document.all.Anzeigetabelle.previousPage();">
    <input type="button" value=" &gt; " onclick="document.all.Anzeigetabelle.nextPage();">
    </td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>Name:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="Name"></span></td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>Vorname:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="Vorname"></span></td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>Straße:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="Strasse"></span></td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>Postleitzahl:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="PLZ"></span></td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>Wohnort:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="Ort"></span></td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>Telefon:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="Tel"></span></td>
    </tr><tr>
    <td bgcolor="#EEEEEE" valign="top"><b>E-Mail:</b></td>
    <td bgcolor="#FFFFE0" valign="top"><span datafld="EMail"></span></td>
    </tr></table></form>
    </body>
    </html>

### Erläuterung:

Um eine externe Datenquelle in einer HTML-Datei nutzen zu können, müssen Sie zunächst die Quelle und diverse Angaben zu deren Aufbau notieren. Dazu brauchen Sie das `<object>`-Tag. In dem einleitenden `<object>`-Tag sind zwei Attribute erforderlich: Mit dem `id`-Attribut vergeben Sie einen Namen, unter dem Sie später auf die Daten zugreifen können. Der Name sollte passend sein, im obigen Beispiel etwa `"Adressen"`. Als zweiten Parameter müssen Sie das ActiveX-Control referenzieren, dass den gesamten Zugriff auf die externe Datei abwickelt. Bei einfachen Textdateien mit zeilenweisen Datensätzen müssen Sie dabei immer die Angabe `classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"` notieren. Das ActiveX-Control mit dieser Identifikationsnummer ist im Lieferumfang des Internet Explorers ab Version 4.x enthalten - Sie brauchen sich um nichts weiter zu kümmern. Genau dabei liegt allerdings der Knackpunkt des gesamten Konzepts: ohne solche ActiveX-Controls läuft nichts.

Innerhalb des `<object>`-Tags notieren Sie Angaben zu Ort und Beschaffenheit der externen Datei.
Mit `<param name="DataURL"` können Sie die gewünschte Datei ansprechen. Im `value`-Attribut notieren Sie den Dateinamen. Wenn sich die Datei im gleichen Verzeichnis befindet, genügt der einfache Dateiname. Ansonsten gelten die gleichen Regeln wie bei Verweisen in HTML.
Mit `<param name="UseHeader" value="true">` weisen Sie den Browser an, die erste Zeile der externen Datei nicht als Datenzeile zu interpretieren, sondern als Zeile für die Definition der Feldnamen.
Mit `<param name="FieldDelim"` geben Sie an, welches das Feldtrennzeichen sein soll. Im Beispiel ist dies das Zeichen `"|"`.

Damit sind alle Voraussetzungen geschaffen, um die Daten aus der externen Datei dynamisch in HTML anzuzeigen. Die Anzeige der Daten erfolgt in einer Tabelle. Das einleitende `<table>`-Tag schafft die nötigen Voraussetzungen, um die Daten in kontrollierter Form anzuzeigen. Zunächst wird in der Tabelle mit dem `id`-Attribut ein Name vergeben (im Beispiel: `Anzeigetabelle`). Dieser Name wird bei den Buttons benötigt, die innerhalb der Tabelle das Blättern innerhalb der Datensätze ermöglichen.

Die nächste Angabe im `<table>`-Tag ist das `datasrc`-Attribut (data source, Datenquelle). Damit nehmen Sie Bezug auf die externe Datendatei. An dieser Stelle dürfen Sie jedoch nicht die Datendatei selbst angeben, sondern Sie müssen denjenigen Namen angeben, den Sie zuvor im `<object>`-Tag im `id`-Attribut vergeben haben. Und zwar mit einem vorangestellten Gatterzeichen `#`. Dadurch stellen Sie den Bezug zwischen Tabelle und Datenquelle her. Es werden dann alle Parameter berücksichtigt, die Sie innerhalb des `<object>`-Tags angegeben haben.

Ebenfalls wichtig das Attribut `datapagesize` (Datenseitengröße) im `<table>`-Tag. Damit geben Sie an, wie viele Datensätze aus der externen Datei gleichzeitig angezeigt werden sollen. Wenn Sie diese Angabe weglassen, macht der Internet Explorer die Tabelle automatisch so lang, dass alle Datensätze auf einmal darin dargestellt werden. Im obigen Beispiel wird `datapagesize="1"` angegeben. Dadurch wird immer genau ein Datensatz angezeigt.

Innerhalb der Tabelle können Sie erkennen, wie ein Datensatz aus der externen Datenquelle darin angezeigt wird. Die Tabelle selbst können Sie nach Ihren Wünschen frei gestalten. Wichtig ist nur zu wissen, wie der Bezug zu einem Datensatz der externen Datei hergestellt wird. Im obigen Beispiel geschieht dies innerhalb entsprechender Tabellenzellen mit Hilfe des `<span>`-Tags. Mit einem, Befehl wie `<span datafld="PLZ"></span>` weisen Sie den Browser an, in der betreffenden Tabellenzelle den aktuellen Inhalt des Feldes `"PLZ"` aus der externen Datenquelle anzuzeigen (datafld = data field = Datenfeld). Dabei muss der Wert des Attributs `datafld` mit dem Feldnamen übereinstimmen, den Sie in der ersten Zeile der externen Datendatei vergeben haben. Beachten Sie dabei auch die exakte Schreibweise.

Neben dem Attribut `datafld` können Sie in so einem Datenanzeigebereich auch noch das Attribut `dataformatas` (formatiere Daten als) notieren. Im obigen Beispiel wird davon kein Gebrauch gemacht. Benutzen Sie `dataformatas`, wenn die Daten in der externen Datei selbst HTML-Elemente enthalten. Mit `dataformatas="html"` erzwingen Sie dann, dass die Elemente aus der externen Datei als HTML-Elemente interpretiert werden.

Da im obigen Beispiel mit `datapagesize="1"` festgelegt wurde, dass immer nur ein Datensatz angezeigt wird, erscheint in der Tabelle zunächst der Inhalt der ersten Datenzeile der externen Datei. Natürlich soll der Anwender nun in den Datensätzen blättern können. Dazu werden Buttons zum Vor- und Zurückblättern definiert. Im Beispiel befinden sich diese Buttons in der ersten Tabellenzeile. Sie könnten aber auch an einer anderen Stelle stehen.

Mit `<input type=button value=" &lt; " onclick="document.all.Anzeigetabelle.previousPage();">` wird ein Button definiert, bei dessen Anklicken der vorhergehende Datensatz aufgerufen wird. Mit `document.all.Anzeigetabelle` greifen Sie dabei auf die Tabelle zu, in der die Daten angezeigt werden (`Anzeigetabelle` ist dabei der Name, der in der Tabelle mit dem `id`-Attribut vergeben wurde). Mit `<input type="button" value=" &gt; " onclick="document.all.Anzeigetabelle.nextPage();">` wird der Button definiert, der zum nächsten Datensatz springt. Beachten Sie, dass Sie nicht kontrollieren müssen, ob der Anwender gerade den ersten oder letzten Datensatz anzeigt. Es gibt keine Fehlermeldungen, wenn der Anwender versucht, einen nicht vorhandenen Datensatz aufzurufen. Der Button hat dann einfach keine Wirkung.

## Beispiel: Daten durchsuchbar machen

In diesem Beispiel wird gezeigt, wie Sie dem Anwender ermöglichen können, mit Hilfe eines Suchbegriffes nur diejenigen Datensätze anzuzeigen, in denen der gesuchte Begriff vorkommt. Das Beispiel zeigt auch, wie Sie mit Hilfe von Scripts auf die HTML-Elemente zur Datenanbindung zugreifen können.

### Beispiel Teil 1 - externe Datei woerterbuch.txt mit Daten:

Anzeigebeispiel: So sieht's aus (62 KByte)

    Deutsch;Englisch;Franzoesisch;Italienisch;Spanisch
    Rechner;computer;ordinateur;computer, calcolatore;ordenador
    Maschine;machine (s);machine;macchina;máquina
    Personalcomputer;personal computer;ordinateur personnel (m);computer personale;ordenador personal
    arbeitender Rechner;active computer;ordinateur active;computer attivo;ordenador activado
    ... usw. ...

### Erläuterung:

Die Datendatei dieses Beispiels zeigt ein mehrsprachiges Fachwörterbuch. In der ersten Zeile werden die Sprachen definiert. Unterhalb davon stehen die Wörter in den jeweiligen Sprachen. Die Einträge zu den Sprachen sind durch Semikola (`;`) getrennt. Wenn in einer Sprache mehrere Wörter in Frage kommen, werden diese durch Kommata getrennt, so wie in der zweiten Zeile beim italienischen Wort für `Rechner`: `computer, calcolatore`.

### Beispiel Teil 2 - HTML-Datei mit Datenzugriff:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    <script language="JScript" type="text/jscript">
    function Suchen () {
      var Datensaetze = 1000;
      document.all.Anzeigetabelle.style.display = "none";
      var Suchausdruck = "";
      var Suchbegriffe = 0;
      if (document.Eingabe.SuchDeu.value != "") {
        Suchausdruck = Suchausdruck + "Deutsch = " + document.Eingabe.SuchDeu.value;
        Suchbegriffe++;
      }
      if (document.Eingabe.SuchEng.value != "") {
        if (Suchbegriffe > 0) {
          Suchausdruck = Suchausdruck + " & Englisch = " + document.Eingabe.SuchEng.value;
        } else {
          Suchausdruck = Suchausdruck + "Englisch = " + document.Eingabe.SuchEng.value;
        }
        Suchbegriffe++;
      }
      if (document.Eingabe.SuchFra.value != "") {
        if (Suchbegriffe > 0) {
          Suchausdruck = Suchausdruck + " & Franzoesisch = " + document.Eingabe.SuchFra.value;
        } else {
          Suchausdruck = Suchausdruck + "Franzoesisch = " + document.Eingabe.SuchFra.value;
        }
        Suchbegriffe++;
      }
      if (document.Eingabe.SuchIta.value != "") {
        if (Suchbegriffe > 0) {
          Suchausdruck = Suchausdruck + " & Italienisch = " + document.Eingabe.SuchIta.value;
        } else {
          Suchausdruck = Suchausdruck + "Italienisch = " + document.Eingabe.SuchIta.value;
        }
        Suchbegriffe++;
      }
      if (document.Eingabe.SuchSpa.value != "") {
        if (Suchbegriffe > 0) {
          Suchausdruck = Suchausdruck + " & Spanisch = " + document.Eingabe.SuchSpa.value;
        } else {
          Suchausdruck = Suchausdruck + "Spanisch = " + document.Eingabe.SuchSpa.value;
        }
        Suchbegriffe++;
      }
      document.all.Begriffe.object.Filter = Suchausdruck;
      document.all.Begriffe.Reset();
      document.all.Anzeigetabelle.dataSrc = "#Begriffe";
      if (document.all.Begriffe.recordset.recordCount < Datensaetze) {
        document.all.Anzeigetabelle.dataPageSize = Begriffe.recordset.recordCount;
        document.all.Treffer.innerText = Begriffe.recordset.recordCount + " Suchtreffer!";
        document.all.Anzeigetabelle.style.display = "block";
      } else {
        document.all.Treffer.innerText = "0 Suchtreffer!";
      }
    }
    </script>
    </head>
    <body>
    <object id="Begriffe" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
     <param name="DataURL" value="woerterbuch.txt">
     <param name="UseHeader" value="true">
     <param name="Filter" value="">
     <param name="FieldDelim" value=";">
    </object>

    <p>Die durchsuchbare Datenbank enthält 1000 Einträge. Suchen Sie nach
    Begriffen in einer oder mehreren Sprachen. Bei der Suche in mehreren Sprachen
    werden die Eingaben logisch durch UND verknüpft. Sie dürfen auch das
    Wildcard-Zeichen <b>*</b> für Teilausdrücke verwenden. Suchen Sie z.B. mal im Feld
    (Deutsch) nach <b>Arbeits*</b> oder im Feld (Italienisch) nach
    <b>*ore</b> oder im Feld (Englisch) nach <b>*computer</b>.</p>

    <form name="Eingabe" action="">
    Suche nach:<br>
    <input name="SuchDeu" type="text" width="40"> (Deutsch)<br>
    <input name="SuchEng" type="text" width="40"> (Englisch)<br>
    <input name="SuchFra" type="text" width="40"> (Franzoesisch)<br>
    <input name="SuchIta" type="text" width="40"> (Italienisch)<br>
    <input name="SuchSpa" type="text" width="40"> (Spanisch)<br>
    <input type="button" style="width:150px; height:25px;" value="Suche starten" onclick="Suchen()">
    </form>

    <table border="1" cellpadding="1" cellspacing="0"><tr><td>
    <table width="100%">
    <tr>
    <td valign="top" colspan="5">
    <span id="Treffer" style="color:#0000CC; font-weight:bold;"> </span>
    </td>
    </tr>
    <tr>
    <td bgcolor="#EEEEEE" valign="top" width="20%"><b>Deutsch:</b></td>
    <td bgcolor="#EEEEEE" valign="top" width="20%"><b>Englisch:</b></td>
    <td bgcolor="#EEEEEE" valign="top" width="20%"><b>Französisch:</b></td>
    <td bgcolor="#EEEEEE" valign="top" width="20%"><b>Italienisch:</b></td>
    <td bgcolor="#EEEEEE" valign="top" width="20%"><b>Spanisch:</b></td>
    </tr>
    </table>
    <table id="Anzeigetabelle" style="display:none" width="100%">
    <tr>
    <td bgcolor="#FFFFE0" valign="top" width="20%"><span datafld="Deutsch"></span></td>
    <td bgcolor="#FFFFE0" valign="top" width="20%"><span datafld="Englisch"></span></td>
    <td bgcolor="#FFFFE0" valign="top" width="20%"><span datafld="Franzoesisch"></span></td>
    <td bgcolor="#FFFFE0" valign="top" width="20%"><span datafld="Italienisch"></span></td>
    <td bgcolor="#FFFFE0" valign="top" width="20%"><span datafld="Spanisch"></span></td>
    </tr>
    </table>
    </td></tr></table>
    </body>
    </html>

### Erläuterung:

Das Beispiel zeigt die vollständige HTML-Datei zur Realisierung einer durchsuchbaren Datenbank. Innerhalb der HTML-Datei wird wie im Beispiel: Datei dynamisch in Tabelle einbinden wieder das `<object>`-Tag notiert, um die Verbindung zu der externen Datendatei herzustellen. Es wird jedoch ein neuer Parameter angegeben:
`<param name="Filter" value="">`
Mit dem Parameter `Filter` können Sie die Datensätze, die aus der Datendatei "geholt" werden, begrenzen. Dazu können Sie im `value`-Attribut Einschränkungskriterien angeben. Bei der Objektdefinition im obigen Beispiel wird `value=""` notiert. Das bedeutet, es gibt keine Einschränkungen. Alle Datensätze werden gefunden.

In dem längeren Script, das im Kopf der HTML-Datei steht, wird der Wert für `Filter` dynamisch verändert. Dadurch wird die Anzeige auf bestimmte Datensätze eingeschränkt, nämlich solche, die den Filterkriterien entsprechen.

Die Kriterien für den Filter soll der Anwender durch seine Suchanfrage selbst bestimmen können. Im obigen Beispiel wird dazu unterhalb des `<object>`-Tags ein Formular definiert (`<form name="Eingabe" action="">`). Das Formular hat fünf Eingabefelder, eines für jede der fünf Sprachen des mehrsprachigen Wörterbuchs. Mit einem anklickbaren Button kann der Anwender die Suche abschicken. Beim Anklicken des Buttons wird die Funktion `Suchen()` aufgerufen, die in dem JScript-Bereich im Dateikopf definiert ist (`onclick="Suchen()"`).

Innerhalb der Funktion `Suchen()` wird zunächst eine Variable `Datensaetze` mit einem Wert vorbelegt (1000). Das empfiehlt sich bei größeren Datenbeständen. Denn per Voreinstellung liefert der Internet Explorer, wenn er keine Datensätze findet, die dem Suchkriterium entsprechen, alle Datensätze zurück. Angenommen, Sie haben 5000 Datensätze. Dann würde eine Tabelle mit 5000 Zeilen angezeigt. Da dies im Aufbau ziemlich lange dauert, ist eine Begrenzung sinnvoll.

Die Variable `Suchausdruck` soll die Anwenderkriterien zum Durchsuchen des Datenbestandes aufnehmen. Dabei ist es erforderlich, die Angaben aus den Formularfeldern in eine Zeichenkette zu konvertieren, die den Regeln für den Parameter `Filter` entsprechen.

Folgende wichtige Regeln gelten für Werte, die bei `Filter` erlaubt sind (diese Regeln gelten sowohl bei Wertzuweisungen innerhalb des `<object>`-Tags als auch bei dynamischen Wertzuweisungen innerhalb von Scripts):
Mit `Feldname = Wert` werden nur Datensätze gefunden, bei denen das Feld `Feldname` exakt den Wert `Wert` enthält und nicht mehr und nicht weniger. Bei `Name = Meyer` werden also nur Meyer's gefunden, keine Meyerbohm's.
Mit `Feldname <> Wert` werden Datensätze gefunden, bei denen der Wert `Wert` im Feld `Feldname` vorkommt - er kann auch exakt damit übereinstimmen. Bei `Name <> Meyer` werden also Meyer's und Meyerbohm's gefunden.
Mit `Feldname > Wert` werden Datensätze gefunden, bei denen der Wert von `Feldname` größer ist als `Wert`. Bei `Name > Y` werden also nur Namen gefunden, die mit Z anfangen.
Mit `Feldname >= Wert` werden Datensätze gefunden, bei denen der Wert von `Feldname` größer oder gleich ist im Vergleich zu `Wert`. Bei `Name >= Y` werden also nur Namen gefunden, die mit Y oder Z anfangen.
Mit `Feldname < Wert` werden Datensätze gefunden, bei denen der Wert von `Feldname` kleiner ist als `Wert`. Bei `Name < D` werden also nur Namen gefunden, die mit A,B oder C anfangen.
Mit `Feldname <= Wert` werden Datensätze gefunden, bei denen der Wert von `Feldname` kleiner oder gleich ist im Vergleich zu `Wert`. Bei `Name <= D` werden also Namen gefunden, die mit A,B,C oder D anfangen.
An jeder Stelle ist ein Platzhalterzeichen erlaubt. Dies ist ein Sternzeichen (`*`). Es steht für kein, eines oder beliebig viele Zeichen.
Sie können auch zwei oder mehrere solcher einfachen Ausdrücke mit den Zeichen `&` (für UND) oder `|` (für inklusives ODER) logisch verknüpfen. Wenn Sie mehrere Ausdrücke verknüpfen und dabei sowohl UND also auch ODER verwenden, müssen Sie Klammern verwenden, um eine eindeutige Bewertung des gesamten Kriteriums sicherzustellen. Ein komplexer Ausdruck dieser Art ist etwa `Name > M & PLZ = 8*`.

Im obigen Script wird mit diversen if-Abfragen aus den Eingabefeldern des Formulars ein gültiger Zuweisungswert für `Filter` konstruiert. Dabei wird nur die einfachste Bedingung mit dem Istgleichzeiten eingesetzt. Da der Anwender auch selbst das Sternzeichen als Platzhalterzeichen in einem Eingabefeld eingeben kann, genügt diese einfache Suche für viele Fälle. Wenn Sie dem Anwender komplexere Suchabfragen ermöglichen wollen, müssen Sie diesen Teil des Scripts entsprechend aufwendiger gestalten.

Im unteren Teil der Funktion Suchen() steht dann der Befehl:
`document.all.Begriffe.object.Filter = Suchausdruck;`
Damit wird dem Parameter `Filter` des `<object>`-Tags der Suchausdruck zugewiesen, der zuvor ermittelt und in der Variablen `Suchausdruck` gespeichert wurde.

Der nächste Befehl ist ebenfalls von entscheidender Bedeutung:
`document.all.Begriffe.Reset();`
Damit veranlassen Sie den Browser, die Anzahl der anzuzeigenden Datensätze neu zu ermitteln. Da mittlerweile ein Filter bestimmt wurde, findet der Browser nun nur noch Datensätze, die den Bedingungen des Filters entsprechen.

Auf die übrigen Anweisungen des Scripts und die Elemente in der HTML-Datei wird hier nicht näher eingegangen. Es handelt sich dabei um einfaches dynamisches HTML nach den Regeln des Internet Explorers 4.x.

## HTML-Elemente für die Anzeige von externen Daten

Im Beispiel: Datei dynamisch in Tabelle einbinden werden die externen Daten jeweils in einem `span`-Element angezeigt. Es gibt eine Reihe weiterer HTML-Elemente, in denen Sie Daten aus Datenfeldern externer Datenquellen anzeigen können. In anderen als diesen Elementen ist die Anzeige externer Daten nicht möglich. Folgende HTML-Elemente sind erlaubt:

### Verweise mit `<a>...</a>`:

Angenommen, Sie haben eine externe Textdatei `verweis.txt` mit folgenden Zeilen:
`URL,Verweistext`
`http://de.yahoo.com/,Yahoo Suchdienst`
Diese Datei können Sie mit dem `object`-Element in HTML wie folgt einbinden:
`<object id="Verweis" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">`
`<param name="DataURL" value="verweis.txt">`
`<param name="UseHeader" value="true">`
`<param name="FieldDelim" value=",">`
`</object>`
Danach können Sie folgenden Verweis konstruieren:
`<a datasrc="#Verweis" datafld="URL"><span datafld="Verweistext" datasrc="#Verweis"></span></a>`
Indem Sie `<a datafld="...">` notieren, wird der Inhalt, den das Datenfeld liefert, als Wert für das Attribut `href` bewertet (im Beispiel liefert das Feld `"URL"` diese Angaben). Innerhalb des Verweises wird dann mit Hilfe des `span`-Elements das andere Feld "geholt", nämlich der Verweistext. Solche Verweise machen beispielsweise Sinn, wenn Sie den gleichen Verweis an vielen verschiedenen Stellen auf Ihren Web-Seiten nutzen. Verweisziel und Verweistext sind dann zentral gespeichert und brauchen bei Änderungen nur in der kleinen Textdatei einmal geändert werden. Alle entsprechenden HTML-Verweise sind damit automatisch aktualisiert.

### Buttons mit `<button>...</button>`:

Angenommen, Sie haben eine externe Textdatei `daten.txt` mit folgendem Aufbau und Beispieleinträgen:
`Zeile,Text`
`1,Das ist ein Test`
`2,mit einem Button`
`3,spannend - was?`
Diese Datei können Sie mit dem `object`-Element in HTML wie folgt einbinden:
`<object id="Daten" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">`
`<param name="DataURL" value="daten.txt">`
`<param name="UseHeader" value="true">`
`<param name="FieldDelim" value=",">`
`</object>`
Danach können Sie beispielsweise folgende Tabelle konstruieren:
`<table id="Anzeige" datasrc="#Daten" datapagesize="1"><tr><td>`
`<form action=""><button datafld="Text" onclick="document.all.Anzeige.nextPage()"></button></form>`
`</td></tr></table>`
Damit springt der Anwender bei jedem Klick auf den Button einen Datensatz weiter, und die Button-Beschriftung nimmt den aktuellen Wert des Datenfeldes `Text` an.

### Bereiche mit `<div>...</div>`:

Mit diesem HTML-Tag können Sie beispielsweise innerhalb einer Tabelle externe Daten ausgeben, genau so wie es im Beispiel: Datei dynamisch in Tabelle einbinden mit dem `span`-Element gemacht wird. Der Unterschied zwischen `<div>...</div>` und `<span>...</span>` ist, dass das `div`-Element einen eigenen Anzeigeblock erzeugt, das `span`-Element dagegen nicht.

### Grafiken mit `<img>`:

Angenommen, Sie wollen eine kleine Dia-Show programmieren. Dazu können Sie eine Textdatei `daten.txt` anlegen, die etwa folgenden Aufbau hat:
`Nummer,Bild`
`1,meinhaus.gif`
`2,meinboot.gif`
`3,meinauto.gif`
`4,undich.gif`
Diese Datei können Sie mit dem `object`-Element in HTML wie folgt einbinden:
`<object id="Daten" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">`
`<param name="DataURL" value="daten.txt">`
`<param name="UseHeader" value="true">`
`<param name="FieldDelim" value=",">`
`</object>`
Danach können Sie beispielsweise folgende Tabelle konstruieren:
`<table "id=Anzeige" datasrc="#Daten" datapagesize="1"><tr>`
`<td>`
`Bild <span datafld="Nummer"></span><br> <input type=button value=" &lt; " onclick="document.all.Anzeige.previousPage();">`
`<input type=button value=" &gt; " onclick="document.all.Anzeige.nextPage();">`
`</td><td>`
`<img datafld="Bild">`
`</td></tr></table>`
Damit kann der Anwender mit den Blätterbuttons die Bilder durchblättern.

### Frames mit `<frame>`:

Angenommen, Sie haben eine externe Textdatei `besteseite.txt` mit folgenden Zeilen:
`BesteSeite`
`http://de.selfhtml.org/`
Nun können Sie folgende HTML-Datei mit einem Frameset konstruieren:
`<html><head>`
`<object id="UrlDerWoche" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">`
`<param name="DataURL" value="besteseite.txt">`
`<param name="UseHeader" value="true">`
`</object></head>`
`<frameset rows="100,*">`
`<frame src="meine.htm">`
`<frame datasrc="#UrlDerWoche" datafld="BesteSeite">`
`</frameset>`
`</html>`
Auf diese Weise können Sie in einem Frame-Fenster eine Seite anzeigen, deren Zieladresse Sie in der separaten Textdatei pflegen. Wichtig ist, dass Sie das `object`-Element genau an der Stelle platzieren wie im Beispiel.

### Eingebettete Frames mit `<iframe>`:

Siehe das Beispiel bei Frames. Der Unterschied ist, dass Sie das `object`-Element in einer normalen HTML-Datei platzieren. Mit einem Befehl wie:
`<iframe datasrc="#UrlDerWoche" datafld="BesteSeite"></iframe>`
können Sie dann in der gleichen HTML-Datei in einer eingebetteten Fensterbox den Inhalt der Seite anzeigen, die in der Textdatei angegeben ist.

### Labels mit `<label>...</label>`:

Das `label`-Element, das neu ist in HTML 4.0, erlaubt die Beschriftung eines Formularfeldes. Im Rahmen der Datenanbindung können Sie dieses HTML-Tag benutzen, wenn Sie die externen Daten in Formularfeldern ausgeben. Sie können dann dem `label`-Element, das Sie etwa einem Eingabefeld zuordnen, dynamisch den Feldnamen zuweisen, der in der externen Datendatei für dieses Feld definiert ist. Wenn sich der Feldname in der Datendatei dann ändert, wird er bei der Anzeige in der HTML-Datei automatisch aktualisiert. Beispiel:
`<label for="Vorname" datafld="prename"></label>`
Dadurch wird dem Inhalt des `label`-Elements eines Formularfeldes der Feldname `prename` zugewiesen, der in der Datenbank definiert ist.

### Lauftexte mit `<marquee>...</marquee>`:

Mit diesem HTML-Element, das mittlerweile allerdings als Musterbeispiel proprietärer HTML-Erweiterungen verschrieen ist, können Sie beispielsweise innerhalb einer Tabelle externe Daten ausgeben, genau so wie es im Beispiel: Datei dynamisch in Tabelle einbinden mit dem `span`-Element gemacht wird. Der Unterschied zwischen `<marquee>...</marquee>` und `<span>...</span>` ist, dass das `marquee`-Element einen Lauftext erzeugt, das `span`-Element dagegen nicht.

### Bereiche mit `<span>...</span>`:

Mit diesem HTML-Tag können Sie beispielsweise innerhalb einer Tabelle externe Daten ausgeben, genau so wie es im Beispiel: Datei dynamisch in Tabelle einbinden.

### Formularfelder mit `<input>`:

Mit diesem HTML-Element können Sie beispielsweise innerhalb einer Tabelle externe Daten in editierbaren Formularfeldern ausgeben. Das ist besonders dann interessant, wenn geänderte Daten auch tatsächlich in die Datenquelle zurückgeschrieben werden können. Bei einfachen Textdateien ist das derzeit nicht möglich, wohl aber beim Datenmodell: Remote Data Service (RDS) und beim Datenmodell: JDBC DataSource Applet.
Die Einbindung in HTML erfolgt ähnlich wie im Beispiel: Datei dynamisch in Tabelle einbinden, mit dem Unterschied, dass Sie die Regeln zum Einbinden des gewünschten Datenmodells beachten müssen. Notieren Sie im einleitenden `<table>`-Tag der Tabelle, in der Sie die Datensätze anzeigen, möglichst die Angabe `datapagesize="1"`. Innerhalb der Tabellenzelle, in der Sie externe Daten auf diese Weise anzeigen wollen, können Sie dann notieren (angenommene Beispiele):
`<input type="text" datafld="Vorname">`
oder:
`<input type="radio" name="Kunde" value="Bereits Kunde" datafld="BereitsKunde">`
oder:
`<input type="checkbox" name="Zahlweise" value="Mastercard" datafld="Zahlungsweise">`
Datenfelder, die in Eingabefeldern vom Typ `<input type="text">` angezeigt werden, können normale Texte sein, wie etwa ein Name. Radio-Buttons und Checkboxen stellen dagegen andere Anforderungen. Ein Radio-Button wird bei der Anzeige dann aktiviert, wenn der aktuelle Feldinhalt in der Datenbank mit dem Wert des Attributs `value` übereinstimmt. Eine Checkbox wird dann markiert, wenn der betreffende Feldinhalt in der Datenbank 1, true oder einen beliebigen Inhalt mit mehr als einem Zeichen enthält. Wenn der Inhalt 0, false oder leer ist, wird die Checkbox nicht markiert.

### Formularfelder mit `<select>`:

Dabei gelten die gleichen Bedingungen wie bei Formularfeldern vom Typ `input`. Wenn der Wert eines aktuellen Eintrags in der Datenbank mit einem der Werte übereinstimmt, die in der `value`-Angabe bei einem `option`-Element innerhalb der Auswahlliste definiert sind, ist diese Auswahl selektiert. Interessant ist diese Ausgabemöglichkeit von externen Daten wie bei anderen Formularfeldern nur, wenn auch ein Zurückschreiben geänderter Daten möglich ist. Bei Auswahllisten etwa kann ein neuer ausgewählter Wert als neuer Feldinhalt gespeichert werden. Der Internet Explorer unterstützt dabei nur die einfache Auswahl, Mehrfachauswahl nicht.

### Andere Objekte mit `<object>...</object>`:

Mit dem `object`-Element können Sie genau so arbeiten wie mit dem `img`-Element. Der Unterschied ist, dass Sie beim `img`-Element auf Grafiken beschränkt sind, während Sie mit dem `object`-Element beliebige Multimedia-Dateien oder ActiveX-Controls einbinden können. So können Sie, analog zu dem Beispiel beim `img`-Element, anstelle einer "Dia-Show" eine "Musik-Show" programmieren, die zum Beispiel aus MIDI-Dateien besteht.
In der externen Textdatei notieren Sie die gewünschten MIDI-Dateien, und bei der Einbindung in HTML können Sie dann anstelle der Datenanbindung mit `img` so etwas notieren wie:
`<object datafld="Musik" width="0" height="0"></object>`
(wobei "Musik" in der Textdatei mit den Daten als Feldüberschrift notiert sein muss).

### Java-Applets mit `<applet>...</applet>`:

Sie können das Feature der Datenanbindung nutzen, um einen Parameter eines Java-Applets aus einer externen Datenquelle zu versorgen. Beispiel:
`<applet code="verzerr.class">`
`<param name="bild" datasrc="#aktuell" datafld="b_gates_bild">`
`</applet>`

## Datenmodell: Tabular Data Control (TDC)

Dies ist das Datenmodell, wenn die externe Datenquelle eine einfache Textdatei ist, die in jeder Zeile einen Datensatz enthält, und bei der die einzelnen Datenfelder der Datensätze durch ein Begrenzerzeichen, zum Beispiel ein Komma, markiert sind. Geeignet ist dieses Datenmodell für kleinere Datenbestände mit bis zu ein paar tausend Datensätzen. Ein vollständiges Beispiel dafür finden Sie weiter oben im Abschnitt Beispiel: Datei dynamisch in Tabelle einbinden. Um eine solche Datenquelle an eine HTML-Datei anzubinden, müssen Sie folgendes Objekt in der HTML-Datei notieren:

### Schema zur Einbindung in HTML:

    <object id="Objektname" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
     <param name= value=>
     <!-- usw. weitere Parameter -->
    </object>

### Erläuterung:

Um solche Daten einzubinden, verwenden Sie das im Internet Explorer 4.x eingebaute ActiveX-Control mit der ID 333C7BC4-460F-11D0-BC04-0080C7055A83. Innerhalb des `<object>`-Tags notieren Sie verschiedene Parameter, die für die Datenpräsentation wichtig sind. Folgende Parameter sind erlaubt:

Notation | Bedeutung
--- | ---
`<param name="AppendData" value=>` | Mit diesem Parameter können Sie angeben, ob in der Ausgabetabelle beim Blättern für jedes neue Datensatz-Set (entsprechend der Größe von `datapagesize` die vorhandenen Tabellenzellen überschrieben werden sollen, oder ob neue Tabellenzellen angehängt werden sollen. Mit `value=true` erzwingen Sie das Anhängen von Daten. Per Voreinstellung werden die vorhandenen Tabellenzellen überschrieben.
`<param name="CaseSensitive" value=>` | Mit diesem Parameter können Sie angeben, ob bei Vergleichen von Anwendereingaben mit Daten aus der Datenquelle Groß-/Kleinschreibung unterschieden werden soll. Nur interessant bei der Weiterverarbeitung von Daten mit Scripts. Per Voreinstellung wird Groß-/Kleinschreibung unterschieden. Mit `value="false"` können Sie die Fallunterscheidung ausschalten.
`<param name="CharSet" value=>` | Mit diesem Parameter können Sie die Kodierung angeben, die für die Daten in der Datendatei maßgeblich ist. Per Voreinstellung ist das die Kodierung ISO-8859-1. Verwenden Sie diesen Parameter nur, wenn die Daten anders kodiert sind, z.B. ISO-8859-5 für Kyrillisch verewnden. Im `value`-Attribut können Sie den Namen der Kodierung angeben. Nähere Informationen im Abschnitt über Zeichenkodierungen.
`<param name="DataURL" value=>` | Dieser Parameter ist unbedingt erforderlich. Im `value`-Attribut geben Sie die Datei an, in der sich die Daten befinden.
`<param name="EscapeChar" value=>` | Diesen Parameter sollten Sie angeben, wenn in Ihrer Datendatei ein Zeichen als Maskierungszeichen verwendet wird. Das ist z.B. der Fall, wenn Sie in einer kommabegrenzten Datei Kommata innerhalb von Feldern mit einem vorangestellten Backslash \ maskieren. Geben Sie in diesem Fall im `value`-Attribut das Maskierungszeichen an.
`<param name="FieldDelim" value=>` | Mit diesem Parameter geben Sie an, welches Zeichen als Trennzeichen für Datenfelder innerhalb einer Zeile der externen Textdatei interpretiert werden soll. Im `value`-Attribut können Sie das Zeichen angeben.
`<param name="Filter" value=>` | Mit diesem Parameter können Sie die Datenauswahl einschränken. Per Voreinstellung werden alle Daten aus der externen Datei angezeigt. Interessant ist dieser Parameter vor allem, wenn der Anwender in einem Eingabeformular die Suche selbst definieren kann, und die Eingaben dann mit Hilfe eines Scripts dynamisch diesem Parameter des `<object>`-Tags zugewiesen werden. Im `value`-Attribut können Sie den Filter angeben. Beispiele: `value="Telefon <> '089*'"` findet in einem Feld "Telefon" nur Nummern, die mit 089 beginnen. `value="PLZ > '50000'"` findet in einem Feld "PLZ" für Postleitzahlen nur Werte, die größer als 50000 sind.
`<param name="Language" value=>` | Mit diesem Parameter können Sie die Sprache angeben, in der die Daten der externen Datendatei vorliegen. Maßgeblich sind dafür die Sprachennamen, wie sie in ISO 369 definiert sind. Im `value`-Attribut können Sie die Sprache angeben.
`<param name="RowDelim" value=>` | Wenn Ihre externe Datendatei so aufgebaut ist, dass am Ende eines Datensatzes ein Datensatzbegrenzerzeichen steht, müssen Sie dieses Zeichen mit diesem Parameter angeben. Notieren Sie im Attribut `value` das Zeichen.
`<param name="Sort" value=>` | Mit diesem Parameter können Sie veranlassen, dass bei gleichzeitiger Ausgabe mehrerer Datensätze (also bei `datapagesize` größer 1) die angezeigten Datensätze nach einem bestimmten Feld sortiert werden. Beispiele: `value="PLZ"` sortiert auszugebende Daten nach einem Feld namens "PLZ". `value="-PLZ"` sortiert auszugebende Daten nach einem Feld namens "PLZ", und zwar absteigend (Minuszeichen davor). `value="Name; PLZ"` sortiert auszugebende Daten erstens nach Name und zweitens nach Postleitzahlen.
`<param name="TextQualifier" value=>` | Wenn Ihre externe Datendatei so aufgebaut ist, dass alle Datenfelder in bestimmte Zeichen eingeschlossen sind, zum Beispiel in Anführungszeichen, dann sollten Sie mit diesem Parameter das betreffende Zeichen angeben. Mit `value="'"'"` etwa bestimmen Sie das Anführungszeichen als Zeichen für Feldanfang und Feldende.
`<param name="UseHeader" value=>` | Diesen Parameter müssen Sie dann angeben, wenn die erste Zeile der externen Datendatei keine Daten enthält, sondern die zugehörigen Feldnamen. Mit `value="true"` wird die Datendatei so interpretiert, dass die erste Zeile Feldnamen enthält. Mit `value="false"` wird sie so interpretiert, dass gleich in der ersten Zeile die Daten beginnen.

## Datenmodell: Remote Data Service (RDS)

Über das Datenmodell Remote Data Service (RDS) können Sie die Anbindung einer HTML-Datei an Daten aus einer Datenbank realisieren. Geeignet ist dieses Modell für Datenbanken, die über die Datenbank-Schnittstellen OLE-DB oder ODBC (DBMS) verfügen. Das sind beispielsweise MS Access, Oracle oder SQL-Server wie msql. Über die entsprechenden Produkte und den Aufbau von Datenbanken damit informieren Sie sich bitte bei den betreffenden Herstellern. Um eine solche Datenanbindung im WWW zu realisieren, muss die Datenbankanwendung auf dem Server-Rechner installiert sein. Fragen Sie dazu gegebenenfalls Ihren Provider.

Um eine solche Datenquelle an eine HTML-Datei anzubinden, müssen Sie folgendes Objekt in der HTML-Datei notieren:

### Schema zur Einbindung in HTML:

    <object id="Objektname" classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33">
     <param name= value=>
     <!-- usw. weitere Parameter -->
    </object>

### Erläuterung:

Um solche Daten einzubinden, verwenden Sie das im Internet Explorer 4.x eingebaute ActiveX-Control mit der ID BD96C556-65A3-11D0-983A-00C04FC29E33. Innerhalb des `<object>`-Tags notieren Sie verschiedene Parameter, die für die Datenpräsentation wichtig sind. Folgende Parameter sind möglich:

Notation | Bedeutung
--- | ---
`<param name="AppendData" value=>` | Mit diesem Parameter können Sie angeben, ob in der Ausgabetabelle beim Blättern für jedes neue Datensatz-Set (entsprechend der Größe von `datapagesize`) die vorhandenen Tabellenzellen überschrieben werden sollen, oder ob neue Tabellenzellen angehängt werden sollen. Mit `value="true"` erzwingen Sie das Anhängen von Daten. Per Voreinstellung werden die vorhandenen Tabellenzellen überschrieben.
`<param name="CaseSensitive" value=>` | Mit diesem Parameter können Sie angeben, ob bei Vergleichen von Anwendereingaben mit Daten aus der Datenquelle Groß-/Kleinschreibung unterschieden werden soll. Nur interessant bei der Weiterverarbeitung von Daten mit Scripts. Per Voreinstellung wird Groß-/Kleinschreibung unterschieden. Mit `value=false` können Sie die Fallunterscheidung ausschalten.
`<param name="CharSet" value=>` | Mit diesem Parameter können Sie die Kodierung angeben, die für die Daten in der Datendatei maßgeblich ist. Per Voreinstellung ist das die Kodierung ISO-8859-1. Verwenden Sie diesen Parameter nur, wenn die Daten anders kodiert sind, z.B. ISO-8859-5 für Kyrillisch verewnden. Im `value`-Attribut können Sie den Namen der Kodierung angeben. Nähere Informationen im Abschnitt über Zeichenkodierungen.

### Beachten Sie:

Solche Datenanbindungen sind nur sinnvoll, wenn Sie dem Anwender ein HTML-Formular zur Verfügung stellen, in dem er seine Angaben zum Durchsuchen der Datenbank machen kann. Mit Hilfe eines JavaScripts können Sie dann die Anwendereingaben in einen gültigen SQL-Befehl umwandeln, den Sie im Script dem Parameter `SQL` des `object`-Tags zuweisen. So können Sie beispielsweise mit der JavaScript-Anweisung:
`document.all.Datenbank.SQL = Abfrage;`
eine SQL-Abfrage zuordnen. In diesem Beispiel ist `"Datenbank"` der Name, der beim `object`-Tag mit dem `id`-Attribut vergeben wird, und `Abfrage` ist eine Variable, die zuvor aus Formulareingaben des Anwenders einen SQL-Befehl kreiert hat. Bei solchen Datenbanken ist es auch möglich, SQL-Befehle zum Schreiben von geänderten Datensätzen in die Datenbank zurückzuschreiben. Voraussetzung ist, dass die Daten in der HTML-Datei in editierbaren HTML-Eingabefeldern (z.B. `<input...>`) angezeigt werden.

Ausführliche Informationen zum Einrichten und Realisieren einer Datenbank mit Scripts finden Sie auf den Entwicklerseiten von Microsoft. Suchen Sie dort nach Microsoft Internet Client SDK.

## Datenmodell: JDBC DataSource Applet

Das Datenmodell JDBC DataSource Applet greift ebenso wie das Datenmodell Datenmodell: Remote Data Service (RDS) auf Datenbanken zu, die über die Datenbank-Schnittstellen OLE-DB oder ODBC (DBMS) verfügen, zum Beispiel MS Access, Oracle oder SQL-Server wie msql. Der Unterschied zwischen dem JDBC DataSource Applet und dem Remote Data Service (RDS) ist, dass letzterer in der HTML-Datei als ActiveX-Control eingebunden wird, während das JDBC DataSource Applet ein Java-Applet ist. Damit will Microsoft seine Datenanbindungs-Technologie anderen Browsern zur Verfügung stellen, die kein ActiveX unterstützen, wohl aber Java. Das tun zwar Netscape und einige andere Browser, doch solange diese das Konzept der Datenanbindung mit Dynamischem HTML nicht unterstützen, hat das Ganze eigentlich wenig Sinn.

Das Java-Applet, das diese Form der Datenanbindung steuert, gehört nicht zum Lieferumfang des Internet Explorers. Auf den Web-Seiten von Microsoft können Sie das JDBC DataSource Applet downloaden. Suchen Sie dort auf den Seiten nach JDBC DataSource Applet.

Um eine solche Datenanbindung im WWW zu realisieren, muss die Datenbankanwendung auf dem Server-Rechner installiert sein. Fragen Sie dazu gegebenenfalls Ihren Provider.

Um eine solche Datenquelle an eine HTML-Datei anzubinden, müssen Sie das JDBC DataSource Java-Applet in der HTML-Datei notieren.

### Schema zur Einbindung in HTML:

    <applet code="JDC.class" name="DSA1" id="DSA1" width="0" height="0">
     <param name= value=>
     <!-- usw. weitere Parameter -->
    </applet>

### Erläuterung:

Das Java-Applet wird wie in HTML üblich mit dem `<applet>`-Tag eingebunden. Mit dem Attribut `code` geben Sie die ausführbare Java-Datei an. Dies ist die Datei `JDC.class`, die Sie mit dem Download des JDBC DataSource Java-Applets erhalten. Innerhalb des Applets notieren Sie verschiedene Parameter, die das Applet benötigt, um korrekt zu arbeiten. Weiterführende Infos zu den Parametern entnehmen Sie der Original-Dokumentation zu dem Applet. Folgende Parameter erwartet das Applet:

Notation | Bedeutung
--- | ---
`<param name="cabbase" value=>` | Mit diesem Parameter geben Sie die Datei an, in der der Quellcode des Applets steht. Es handelt sich um eine CAB-Datei. Relative Pfadnamen oder auch absolute Adressen sind dabei erlaubt.
`<param name="dbURL" value=>` | Mit diesem Parameter geben Sie im `value`-Attribut die Datei an, in der die Datenbank gespeichert ist. Relative Pfadnamen oder auch absolute Adressen sind dabei erlaubt.
`<param name="showUI" value=>` | Mit diesem Parameter geben Sie an, ob das Applet innerhalb der HTML-Datei seine eigene Benutzeroberfläche anzeigen soll oder nicht. Mit `value="true"` wird das Applet angezeigt, mit `value="false"` nicht. Der Parameter ist optional.
`<param name="sqlStatement" value=>` | Mit diesem Parameter müssen Sie einen Befehl angeben, den Sie zum Ansprechen der Datenbank absetzen wollen. Dies kann ein beliebiger gültiger SQL-Befehl sein. SQL (Structured Query Language) ist eine standardisierte Datenbankabfragesprache. Diese Sprache und ihre Befehle müssen Sie kennen, um den Parameter mit korrekten Werten zu versorgen.
`<param name="allowInsert" value=>` | Mit diesem Parameter geben Sie an, ob der Anwender Datensätze durch Ausfüllen entsprechender Eingabefelder neue Datensätze in die Datenbank schreiben darf. Mit `value="true"` erlauben Sie das Hinzufügen von Daten, mit `value="false"` verbieten Sie es.
`<param name="allowDelete" value=>` | Mit diesem Parameter geben Sie an, ob der Anwender angezeigte Datensätze mit Hilfe entsprechender Befehlsbuttons aus der Datenbank löschen darf. Mit `value="true"` erlauben Sie das Löschen von Daten, mit `value="false"` verbieten Sie es.
`<param name="allowUpdate" value=>` | Mit diesem Parameter geben Sie an, ob der Anwender angezeigte Datensätze in entsprechenden Eingabefeldern editieren und geänderte Daten mit Hilfe entsprechender Befehlsbuttons in die Datenbank zurückschreiben darf. Mit `value="true"` erlauben Sie das Ändern von Daten, mit `value="false"` verbieten Sie es.
`<param name="user" value=>` | Mit diesem Parameter können Sie der Datenbank im `value`-Attribut den Namen eines angemeldeten Users übergeben, sofern die Datenbank dies verlangt. Der Parameter ist optional.
`<param name="password" value=>` | Mit diesem Parameter können Sie der Datenbank im `value`-Attribut das Passwort des Users übergeben, sofern die Datenbank dies verlangt. Der Parameter ist optional.

### Beachten Sie:

Beim Datenmodell JDBC DataSource Applet gelten die Anmerkungen zum Datenmodell Remote Data Service (RDS).

## Datenmodell: XML Data Source

Das Datenmodell XML Data Source könnte in Zukunft sehr interessant werden, da es die vom W3-Konsortium standardisierte Sprache XML zur Definition von Daten benutzt. Bei diesem Datenmodell werden die Daten in einer XML-Datei gespeichert. Für Datensätze und Datenfelder können Sie innerhalb der XML-Datei eigene Tags und deren Verschachtelung erfinden. Ein denkbares Schema für eine Adressendatei wäre etwa:
`<adresse>`
`<name>Meyer</name>`
`<vorname>Hubert</vorname>`
`<ort>Hamburg</ort>`
`<telefon>040-598487374</telefon>`
`</adresse>`
Die Datei muss den Konventionen zum Aufbau einer XML-Datei entsprechen. Lesen Sie dazu das Kapitel über XML/DTDs.

Im Lieferumfang des Internet Explorers 4.x ist ein Java-Applet enthalten, das solche Tag-Strukturen aus XML-Dateien interpretiert und die Datenstruktur daraus ermittelt.

Um diese Art von Datenquelle an eine HTML-Datei anzubinden, müssen Sie das zugehörige Java-Applet in der HTML-Datei notieren.

### Schema zur Einbindung in HTML:

    <applet code="com.ms.xml.dso.xmldso.class" id="xmldso" width="0" height="0" mayscript="true">
     <param name="url" value="datei.xml">
    </applet>

### Erläuterung:

Das Java-Applet wird wie in HTML üblich mit dem `<applet>`-Tag eingebunden. Notieren Sie das einleitende `<applet>`-Tag genau so wie im obigen Schema. Der Grund für den ungewöhnlichen Wert des Attributs `code` ist, dass dieses Java-Applet eine interne Ressource des Internet Explorers ist und keine separat vorliegende Datei.

Das Applet erwartet genau einen Parameter:
Mit `<param name="url" value="datei.xml">` geben Sie im Attribut `value` den Dateinamen der XML-Datei an. Dabei sind natürlich auch relative Pfadangaben oder absolute Adressen erlaubt.

## Datenmodell: MSHTML Data Source

Was Sie mit XML besonders elegant lösen können, geht etwas weniger elegant auch mit HTML selbst: hinter dem Datenmodell MSHTML Data Source verbirgt sich nichts anderes als eine Konvention, nach der die Daten in einer HTML-Datei gehalten werden - diese HTML-Datei dient dann als externe Quelle für eine andere HTML-Datei, in der die Daten angezeigt werden. Ein Schema für den Datensatz einer Adressendatei wäre etwa:
`<div id="Adresse">`
`<span id="Name">Meyer</span><br>`
`<span id="Vorname">Hubert</span><br>`
`<span id="Ort">Hamburg</span><br>`
`<span id="Telefon">040-598487374</span><br>`
`</div>`

Um diese Art von Datenquelle an eine HTML-Datei anzubinden, müssen Sie ein einfaches Objekt dafür notieren.

### Schema zur Einbindung in HTML:

    <object id="Daten" data="daten.htm" width="0" height="0">
    </object>

### Erläuterung:

Innerhalb des `<object>`-Tags vergeben Sie mit dem `id`-Attribut wie üblich einen Namen, unter dem Sie das Objekt ansprechen und die Daten aus der anderen Datei in einer Tabelle dynamisch anzeigen können. Das Zugreifen auf die Datensätze funktioniert dabei genau so wie im Beispiel: Datei dynamisch in Tabelle einbinden. Im Attribut `datafld` geben Sie den Namen an, den Sie in der externen HTML-Datei im `id`-Attribut für jedes gleiche Feld eines Datensatzes vergeben haben, z.B. `"Vorname"`.

| Dynamische Filter (nur Microsoft)
| Das ältere DHTML-Modell von Netscape

© 2007 Impressum