Home

Benchmarks
Historie
Forum
Download
Helpware
Insider
Dokumentation
Kurs
Provider-Infos

Impressum



tdbengine news vom 16.3.2000

Das Wichtigste zuerst: Das Interesse an der tdbengine hat seit der CeBIT in Hannover enorm zugenommen. Und das, obwohl dort weder die tdbengine vorgeführt noch sonst irgendwie präsentiert wurde. Alleine die Antworten auf ganz spezielle Inter- und Intranet-Fragen am TDB/VDP-Stand brachten die tdbengine in's Gespräch. Dem Team der TDB-Software GmbH sei an dieser Stelle recht herzlich gedankt.

Die TDB-Software GmbH übernimmt löblicherweise auch die gesamte administrative Abwicklung des tdbengine-Projekts. Alle Anfragen bzgl. Partnerschaft, Lizenzierung etc. bitte nur noch an diese Stelle.

Der SQL-Konflikt

Eines der Themen, die immer wieder im Brennpunkt der Diskussion standen und stehen: tdbengine ist ja ganz gut und nett, es müsse aber eine SQL-Datenbank sein, denn das stehe schließlich in den Datenbank-Richtlinien der Firma (die gerade eine Datenbank-Applikation in das Internet stellen will). Wenn man nun mit der Gegenfrage kontert, ob diese Richtlinen für alle Datenbanken gelten, auch für diejenigen vor(!) der Firewall, wird den Herren oft mulmig, denn hier handelt es sich um Themen, von denen sie noch viel weniger verstehen als von Datenbanken oder den Spielregeln im Web. Und wenn dann noch der Datenbank-Administrator hingezugezogen wird, so bricht das Richtlinien-Konzept des Firmenverteters ganz zusammen. Denn der Datenbank-Adminstrator wird sich hüten, seinen ORACLE/Ingres/Informix/MS-SQL...-Server den "untrusted"-Usern im Internet zur Verfügung zu stellen. In jedem(!) Programm sind Sicherheitslöcher enthalten, und gerade das Hacken von Datenbanken gehört zum Lieblingssport einer besonders versierten Gruppe von Internet-Surfern...

Wenn aber eine eigene zusätzlich Datenbank speziell für die Internet-Anwendung aufgebaut werden muss, wäre hier der Einsatz eines zusätzlichen ORACLE/Ingres/Informix/MS-SQL...-Datenbank-Servers mit Panzern auf Wespen geschossen, um es einmal mit den Worten des Kriegsgottes Mars - also martialisch - auszudrücken: übertrieben, teuer, unangemessen und letztlich an der eigentlichen Aufgabe vobei.

Wir wollen an dieser Stelle das Thema (zu dem auch der Schutz personenbezogener Daten im Internet gehört) nicht vertiefen. Es wird aber neben den ganzen technischen Aspekten eines der interessantesten Themen für die Zukunft sein, dem wir in dieser Site einen gebührenden Platz einräumen werden.

Neue Versionen

Im Download-Bereich gibt es neue Versionen für Linux und Windows. Hier kurz die neuen Features:

Für Ramtexte gibt es einen Satz neuer Funktionen.

ramtext_find(ramtext,string[,startpos]) : findpos

Damit kann man eine Zeichenkette in einem Ramtext suchen. Der optionale Parameter startpos gibt den Offset im Ramtext an, ab dem gesucht wird. Der Rückgabewert entspricht der Position des ersten Zeichens der Übereinstimmung (immer vom Anfang des Ramtexts aus gesehen) bzw. 0, wenn der string nicht gefunden wird. Die Funktion entspricht in etwa der Funktion pos bei normalen Zeichenketten. 0 ist auch das Ergebnis, wenn der Startwert hinter der aktuellen Dateigröße des Ramtext liegt.

ramtext_insert(ramtext,startpos,string) : moved_chars

Diese Funktion fügt eine Zeichenkette an der Position startpos ein. Der Rückgabe ist eher von akademischem Interesse, denn es handelt sich dabei um die Anzahl der verschobenen Zeichen, also Dateigröße - startpos. Der Wert 0 wird zurückgegeben, wenn der String nicht eingefügt werden konnte, weil

  • als startpos der Wert 0 übergeben wurde
  • startpos größer als die aktuelle Dateigröße+1 war
  • die Einfügung die maximale Größe von derzeit 64 KByte gesprengt hätte.
Für startpos sind demnach nur die Werte von 1 (Einfügen ganz am Anfang) bis getsize(ramtext)+1 (Einfügen ganz am Ende) gültig.

ramtext_delete(ramtext,startpos,count) : moved_chars

Hier werden cont Zeichen ab startpos aus dem Ramtext gelöscht. Wiederum ist der Rückgabewert die Anzahl der bewegten Zeichen oder 0, wenn die Kombination aus startpos und count nicht zulässig war. Für startpos sind Werte zwischen 1 und getsize(ramtext) erlaubt. count muss zwischen 0 und getsize(ramtext)-startpos liegen.

ramtext_part(ramtext,startpos,count) : string

Mit dieser Funktion kann man Zeichenketten aus einem Ramtext extrahieren. Es werden count Zeichen ab startpos zurückgeliefert. Ist startpos=0 oder zeigt startpos über das Dateiende hinaus, so wird ein Leerstring zurückgeliefert. Für cont sind Werte von 0 bis 255 zulässig.

Allgemeine Tipps zu Ramtexten

Ein Ramtext ist eine Textdatei, die ausschließlich im Arbeitsspeicher angelegt wird und deshalb einen sehr schnellen Zuriff bietet. Die tdbengine erkennt einen Ramtext am Dateinamen. Beginnt dieser mit "ramtext:..." so handelt es sich um einen selbstdefinierten Ramtext. Zusätzlich steht ein spezieller Ramtext mit dem Namen "ramtext" zur Verfügung. Nur auf diesen Ramtext ist sind folgende Funktionen anwendbar:

loadtemplate(...)  lädt ein Template
subst(...)             führt eine Ersetzung durch
cgiwritetemplate  gibt ein Tempate aus

Für alle Ramtexte gibt es neben den oben angesprochenen noch:

OemToAnsi(ramtext) Zeichenkonvertierung von ASCII nach ANSI
AnsiToOem(ramtext) Zeichenkonvertierung von ANSI nach ASCII

Daneben kann in Ramtext immer auch dann eingesetzt werden, wenn eine Textdatei erlaubt ist. Beispiele:

copyfile('/home/tdbengine/templates/index.html','ramtext:index.html')
readmemo(datei,"Bemerkung","ramtext:memo")
copymemo(datei,"Bemerkung","ramtext:memo",0)
texthandle:=reset("ramtext:memo")
texthandle:=rewrite("ramtext:memo")

Folgende Funktionen sind nicht für Ramtexte verwendbar:

defile(..)
rename(...)
tappend(...)

Derzeit ist maximale Größe eines Ramtexts auf 64 KByte beschränkt.

Hier ein kleines Beispiel, das ein Memo in einen Ramtext einliest, und diesen dann im HTML-Format ausgibt, wobei die harten Zeilenumbrüche mit dem <p>-Tag ergänzt  werden:

VARDEF handle : REAL
VARDEF c : STRING
copymemo(datei,"Bemerkung","ramtext:memo")
IF handle:=reset("ramtext:memo")
  WHILE NOT EOT(handle)
    c:=read(handle)
    cgiwrite(tohtml(c))
    IF c=chr(10)  .. = LF
      cgiwrite('<p>')
    END
  END
  close(handle)
END

Die Konfigurationsdatei tdbengine.ini

Hier gibt es eine kleine Änderung. Unter der Abteilung [globals] kann ein Eintrag mit dem Namen "semadir" angelegt werden, der das Verzeichnis definiert, in dem die Semaphoren abgelegt werden. Vorgabe ist

[globals]
semadir=./

Zu guter Letzt

Die tdbengine meldet sich jetzt mit der internen Versionsnummer. Wenn Sie tdbengine direkt von der Konsole aus starten, erhalten Sie die übliche Meldung, wobei jedoch nach dem Wort "tdbengine" jetzt die aktuelle Versionsnummer ausgegeben wird:

tdbengine (6.02)

Newsletter

Anmeldung zum Newsletter:
Name: 
Zusatz: 
EMail: