Tasten & Command Beschreibung
=============================


Command-Gruppe "DB": Datenbank
==============================

Beispiele für den Umgang dieser Command-Gruppe finden sich in einem eigenen Profil
mit dem Namen "Database Example". Dieses befindet sich im 2. Profil-Set, also
zuvor durch Anwahl des obersten Menü-Punktes im Systray-Popmenu das Profil-Set
umschalten.

--> Achtung !
Der Datenbankzugriff von RK basiert auf der MS-Jet-Engine 3.5 (DAO 3.5).
Leider wird DAO 3.6 und größer nicht unterstützt!
DAO 3.6 ist in ME, 2000, XP etc. enthalten.
Dies ist aber kein Grund dafür die Datenbank-Funktionalität von RK nicht nutzen
zu können. In einigen (oder vielen) Fällen ist es erforderlich, das System
für DAO 3.5 herzurichten.
Eventuell sind DAO 3.5 und DAO 3.6 dann parallel installiert, aber das scheint
nach bisherigen Erkenntnissen keine Probleme zu bereiten.

Als erstes sollte man ausprobieren, ob sich eine Datenbank mittels RK öffnen läßt
(siehe Beispiel-Profil). Tritt eine Fehlermeldung auf die da lautet
"Klasse nicht registriert, siehe nach Objekt mit CLSID ... lange Nummer ...",
dann scheint DAO 3.5 nicht auf dem System verfügbar zu sein.
Dann sollte man noch einen 2ten Test unternehmen.
Im Verzeichnis "\Programme\Gemeinsame Dateien\Microsoft Shared\DAO" wird sich
vermutlich nur die Datei dao360.dll befinden. Dies besagt, daß DAO 3.6 installiert
ist. Die komplimentäre Datei für DAO 3.5 heißt dao350.dll (oder der DAO-Ordner ist
erst gar nicht existent).
Nun wäre es aber zu einfach, sich diese Datei zu besorgen, dort hinein zu kopieren
und alles ist gut, denn DAO 3.5 erfordert noch weitere Dateien, die zudem korrekt
registriert sein müssen.

Daher ist der einfachste Weg das System auf DAO 3.5 herzurichten, wenn DAO 3.5 von
freewarehits.de downgeloaded wird und die exe auf dem System gestartet wird.
Das Archiv enthält noch die Datei vb5db.dll, die ggf. noch ins Windows\System-
Verzeichnis kopiert werden muß.

Dieses Verfahren wurde auf einer sauberen ME-Installation, sowie einer stark benutzen
NT-Installation durchgeführt und es funktionierte alles einwandfrei.
Aber der vollständigkeitshalber muß natürlich gesagt werden, daß keine Garantien gegeben
werden können und die Installation auf eigenes Risiko geschieht!

Die direkte Download-Adresse lautet:
http://www.freewarehits.de/AddFiles/dao35.zip (3.2 mb)

Die auf der Microsoft Jet-Engine aufsetzenden Datenbank-Anbindung erfordert - je nach
gewünschtem Datenbank-Zugriff - sogenannte ISAM-Treiber. Das ODBC-Verfahren ließe
sich auch einstellen (s.u.), wurde aber nicht getestet.
Folgende Datenbanken - die Installation der erforderlichen Treiber vorrausgesetzt -
werden durch RK (mindestens) unterstützt:

- Access
- DBase 3/4/5
- Excel 3/4/5/8
- FoxPro 2/2.5/2.6/3
- Lotus WK 1/3/4
- Paradox 3/4/5
- Text

Erfolgreich getestet wurden Access (.mdb), Excel (.xls) und Text (.txt).
Die Treiber sollten - zumindest bei den Office-Anwendungen - bei der Installation der
jeweiligen Programme mit-installiert worden sein.

Allerdings... auf dem RK-Entwicklungs-Rechner lief - obwohl DAO 3.5 vorhanden - zunächst
nicht viel. Der Grund war, daß die Treiber (35´er) zwar vorhanden waren, allerdings nicht
ordnungsgemäß in der Registry eingetragen. Sofern sich diese im Windows-System-Verzeichnis
befinden, kann dies folgendermaßen nachgeholt werden:

Z.B. das Ausführen-Fenster öffnen und folgende Zeilen eingeben.

Regsvr32.exe C:\Windows\System\Msexcl35.dll
Regsvr32.exe C:\Windows\System\Mstext35.dll

Danach erfolgt (hoffentlich) die Meldung, daß die Treiber erfolgreich installiert sind.

Die Treiber Msexcl40.dll/Mstext40.dll sind für DAO ab 3.6 vorgesehen und für DAO 3.5 nicht
geeignet!

Als nächstes bestand das Problem, daß die ASCII-Zeichen (Umlaute etc.) nicht ordnungsgemäß
konvertiert wurden. Um dies zu beheben, mußte manuell in die Registry eingegriffen werden:
Der entsprechde Pfad lautet (bitte suchen lassen):

Jet\3.5\Engines\Text

Folgender Schlüssel muß ggf. geändert werden:
CharacterSet von "OEM" auf "ANSI" setzen.

Ggf. bei Excel, Access etc. kontrollieren.

Diese geschilderten Probleme traten nur bei der bereits vorhandenen DAO 3.5 auf.
Bei der oben beschriebenen DAO 3.5 Installation funktionierte alles auf Anhieb.

--> Einschränkung
Beim Auslesen von Werte enthaltenen Zellen kommt es gelegentlich zu Überlauffehlern. RK fängt
diese Fehler zwar ab, kann dann aber für das betroffene Feld nur noch einen Leer-String senden.
Ferner wird auch nur das Auslesen unterstützt, beschreiben kann RK eine Datenbank durch
Direktzugriff (noch) nicht.

Vorgehensweise
--------------
Als erstes muß stets eine Datenbank geöffnet werden.
RK arbeitet intern mit 2 Zeigern. Der erste positioniert einen Datensatz, der zweite ein
Datenfeld. Welches Datenfeld beim Sende-Befehl (DB.FIELD.SEND) letztendlich an die
Anwendung gesendet wird, ist von diesen 2 Zeigern abhängig.
Nun gibt RK dem Anwender diverse Commands in die Hand, um diese Zeiger zu positionieren.
Der Select-Command eignet sich z.B. für eine einmalige Sendung eines Datenfeldes, indem der
Anwender dieses gezielt aus einer Liste heraussucht und anschließend sendet.
Andere Commands wie SET und INC sind eher für Serien-Sendungen gedacht, die z.B. in einer
Schleife untergebracht werden.

Faustregel:

1. Datenbank öffnen
2. Datensatz-Zeiger positionieren
3. Datenfeld-Zeiger positionieren
4. Senden


/DB.OPEN f[,t,p3,p4,p5]: Öffnet die Datenbank Name <f> (file), Tabelle <t>, p3/4/5 = optionale Parameter
------------------------
Beim Zugriff auf eine Access-Datenbank (.mdb) oder Excel-Mappe (.xls) müssen die Parameter
<f> & <t> definiert sein. Wird der Parameter <t> nicht angegeben, so wird autom. eine Liste
angezeigt, aus der eine Tabelle ausgewählt werden muß (entspr. DB.TABLE.SELECT).
Beim Zugriff auf eine TAB-separierte Text-Datei (.txt) wird nur der Parameter <f> angegeben.
In diesen 3 Fällen erkennt RK selbstständig das Format und stellt die verbleibenden
Parameter automatisch ein.
Allerdings werden Parameter-Setzungen mit Priorität behandelt. D.h. sofern sie angegeben werden,
wird die automatische Einstellung von RK außer Kraft gesetzt.
In anderen (ungetesteten) Fällen müssen zusätzliche Angaben gemacht werden, wenigstens den p3-
Parameter betreffend.

Die Parameter im Einzelnen:

f : File:    Dateiname = Pfad zur Datei

t : Table:   Die Excel-Mappe besteht bekanntlich aus einzelnen Tabellen.
             Es kann nur auf eine zur Zeit zugegriffen werden, die hier anzugeben ist.
             Bei Access handelt es sich um die Einzel-Datei der Datenbank.
             Texte sind sozusagen ein-dimensional, so daß der Parameter hier entfällt.

             Dem Tabellen-Name in Excel muß ein $ hinzugefügt werden (warum auch immer).
             Bei Text wird automatisch ein #txt generiert.
             Bei Access ist der Tabellen-Name unverändert anzugeben.
             Andere Formate wurden nicht geprüft.

             Im Zweifelsfalle den Parameter erstmal weglassen und die Tabelle aus der stattdessen
             erscheinenden Auswahlbox auswählen. In dieser kann man die genauen Tabellen-Bezeich-
             nungen erkennen, um die gewünschte später in den t-Parameter zu übertragen.

p3: Connect: Angabe des Datenbank-Typs. Die genauen Beschreibungen lauten (Access ohne Semikolon): 

             Access
             dBASE III;
             dBASE IV;
             dBASE 5.0;
             Excel 3.0;
             Excel 4.0;
             Excel 5.0;
             Excel 8.0;
             FoxPro 2.0;
             FoxPro 2.5;
             FoxPro 2.6;
             FoxPro 3.0;
             Lotus WK1;
             Lotus WK3;
             Lotus WK4;
             Paradox 3.x;
             Paradox 4.x;
             Paradox 5.x;
             Text;

             RK benutzt standardmäßig Excel 3.0. Damit kann problemlos auch auf 8.0-Dateien
             zugegriffen werden, ist aber eben auch für ältere Versionen geeignet.

p4: Rec-Set-Type: p4 = 0 - 2. Es können folgende Typen eingestellt werden:

             0 : Table
             1 : Dynaset  (Standard-Einstellung)
             2 : Snapshot

             Im Test (mdb/xls/txt) lief alles unter Dynaset, Table funktionierte auch.
 
p5: Engine: p5 = 0 - 1. Hier kann zwischen folgenden "Treiber-Maschinen" gewählt werden:

             0 : Jet  (MS, Standard-Einstellung)
             1 : ODBC

Beispiel: {/DB.OPEN c:\data\db.xls}
Beispiel: {/DB.OPEN c:\data\db.mdb,sheet1}
Beispiel: {/DB.OPEN c:\data\db.xls,sheet1$}
Beispiel: {/DB.OPEN c:\data\db.txt}
Beispiel: {/DB.OPEN c:\data\db.xyz,sheet1,dBASE III;}     (Parameter für dbase unbekannt!)
Beispiel: {/DB.OPEN c:\data\db.xyz,sheet1,dBASE III;,0}
Beispiel: {/DB.OPEN c:\data\db.xyz,sheet1,dBASE III;,2,1}


/DB.CLOSE .............: Schließt die aktuelle Datenbank
------------------------
Das Schließen einer Datenbank ermöglicht es, wieder von anderen Anwendungen auf
die Bank zuzugreifen und gibt darüber hinaus reservierten Speicher wieder frei.

Beispiel: {/DB.CLOSE}


/DB.FIELD.ASK .........: Legt die Feld-Nummer während der Skript-Abarbeitung fest
------------------------

Beispiel: {/DB.FIELD.ASK}


/DB.FIELD.CLIP [len] ..: Kopiert den aktuellen Feld-Inhalt in die Zw´ablage, optional max. Länge [len]
------------------------

Beispiel: {/DB.FIELD.CLIP}
Beispiel: {/DB.FIELD.CLIP 25}

Im letzten Beispiel werden die ersten 25 Zeichen des aktuellen Datenfeldes in die
Zw´ablage kopiert.


/DB.FIELD.INC .........: Setzt die Feld-Nummer um 1 nach oben
/DB.FIELD.DEC .........: Setzt die Feld-Nummer um 1 nach unten
------------------------

Beispiel: {/DB.FIELD.INC}


/DB.FIELD.NMB>VAR .....: Kopiert die Feld-Nummer in die aktuelle VAR
/DB.FIELD.NMB<VAR .....: Setzt die Feld-Nummer auf den Wert der aktuellen VAR
------------------------
Ermöglicht den Austausch der Feld-Nummer mit der Variablen VAR, sodaß Berechnungen
möglich sind.
(siehe Command-Gruppe VAR-Commands, Rechnen)

Beispiel: 

{/BTCH.EXPLICIT}
{/DB.FIELD.NMB>VAR}
{/VAR.ADD 3}
{/DB.FIELD.NMB<VAR}


/DB.FIELD.SEND [len] ..: Sendet den aktuellen Feld-Inhalt, optional max. Länge [len]
------------------------
Das Datenfeld ist das kleinste Element der Datenbank:
Datenbank -> Tabelle -> Datensatz -> Datenfeld
Nur dieses kann durch RK gesendet werden.
Ganze Datensätze sendet man daher durch eine Verkettung von DB.FIELD.SEND-Commands
im Skript. Vor dem Senden muß der Datensatz-Zeiger entsprechend positioniert werden.

Beispiel:

{/BTCH.EXPLICIT}
{/DB.REC.SELECT}
{/BTCH.EXITIF.CANCEL}
{/DB.FIELD.SET 4}
{/DB.FIELD.SEND}{KEY.TAB}
{/DB.FIELD.SET 5}
{/DB.FIELD.SEND}{KEY.TAB}
{/DB.FIELD.SET 6}
{/DB.FIELD.SEND}{KEY.TAB}

Beispiel: {/DB.FIELD.SEND 15}

In diesem Beispiel wird die Ausgabe auf 15 Zeichen begrenzt.


/DB.FIELD.SEND.FRMT str: Sendet den aktuellen Feld-Inhalt formatiert (str=###0.00 um 1,30 zu senden)
------------------------
Gestattet die formatierte Ausgabe für Zahlen- und Datums-Feldern.

Beispiel: {/DB.FIELD.SEND.FRMT ##0.00}
Beispiel: {/DB.FIELD.SEND.FRMT long date}

-> Beachte!
Für Datums-Felder trifft die Beschreibung in den DAT-Commands zu (DAT.FORMAT str),
mit Ausnahme der "Alleinstehenden Parametern" (Stand Alone).


/DB.Field.SET nmb .....: Legt die Feld-Nummer auf <nmb> fest
------------------------

Beispiel: {/DB.Field.SET 5}


/DB.Field.VIEW ........: Zeigt das aktuelle Feld im internen Textbetrachter an
------------------------

Beispiel: {/DB.Field.VIEW}


/DB.PROP.VIEW .........: Zeigt die Einstellungen der aktuellen Datenbank im internen Textbetrachter an
------------------------

Beispiel: {/DB.PROP.VIEW}


/DB.REC.ASK ...........: Legt die Datensatz-Nummer während der Skript-Abarbeitung fest
------------------------

Beispiel: {/DB.REC.ASK}


/DB.REC.INC ...........: Setzt die Datensatz-Nummer um 1 nach oben
/DB.REC.DEC ...........: Setzt die Datensatz-Nummer um 1 nach unten
------------------------

Beispiel: {/DB.REC.INC}


/DB.REC.NMB>VAR .......: Kopiert die Datensatz-Nummer in die aktuelle VAR
/DB.REC.NMB<VAR .......: Setzt die Datensatz-Nummer auf den Wert der aktuellen VAR
------------------------
Ermöglicht den Austausch der Datensatz-Nummer mit der Variablen VAR, sodaß Berechnungen
möglich sind.
(siehe Command-Gruppe VAR-Commands, Rechnen)

Beispiel: 

{/BTCH.EXPLICIT}
{/DB.REC.NMB>VAR}
{/VAR.ADD 3}
{/DB.REC.NMB<VAR}


/DB.REC.SELECT ........: Legt die Datensatz- und Datenfeld-Nummer durch Auswahl aus 2 Listen fest
------------------------
Dieses Fenster gestattet es, ein beliebiges Datenfeld eines beliebigen Datensatzes
auszuwählen. Den Datensatz selektiert man in der linken, das Datenfeld in der rechten
Liste. Die Bestimmung von Datensatz- und Datenfeld-Nummer bleibt nach dem Schließen des
Fensters erhalten, um mit ihnen ggf. weiterzuarbeiten, indem man z.B. das selektierte
Datenfeld mittels {/DB.FIELD.SEND} an eine Anwendung sendet.

Die möglichen Fenster-Einstellungen findet der Anwender durch Probieren sicher
schnell heraus.
Ein Wort zu "Auto": Diese Einstellung ermittelt, ähnlich wie in Excel, durch Prüfen
sämtlicher Datenfelder die maximal erforderliche Spaltenbreite.
Einstellungsänderungen werden - auch beim Klick auf Cancel - im Verlauf der Session
weiter benutzt. Gespeichert hingegen werden sie nur durch Klick auf OK und stehen
sodann automatisch in der kommenden Session zur Verfügung.
Text-Files besitzen nur ein Datenfeld (0), weswegen die meisten Funktionen hier deaktiviert
sind.

Beispiel: {/DB.REC.SELECT}

--> Tip
Wird der Dialog durch "Abbrechen" geschlossen, so kann die Skript-Abarbeitung
an dieser Stelle durch den Command "BTCH.EXIT-ON-CANCEL" (siehe dort) beendet
werden.

--> Tip
Die Listenbreiten lassen sich durch drag & drop verändern, indem man den Balken zwischen
den Listen greift und verschiebt.

--> Tip
Neben den windows-seitigen Steuerungsmöglichkeiten in den Listen (CRSR-DOWN/UP) sind
zusätzlich verfügbar:

[CRSR-RIGHT] : aktiviert die rechte Liste (zwecks CRSR-DOWN/UP)
[CRSR-LEFT]  : aktiviert die linke  Liste
[Enter] .....: entspricht Klick auf OK-Knopf
[Space] .....: entspricht Klick auf OK-Knopf


/DB.REC.SET nmb .......: Setzt die Datensatz-Nummer auf <nmb> fest
------------------------
Der Datensatz besteht aus einer Gruppe zusammengehörender Datenfelder, z.B.
Anrede, Nachname, Vorname, Ort etc. Im Falle von Excel ist der Datensatz eine
Zellen-Zeile und das Datenfeld die einzelne Zelle.

Beispiel: {/DB.REC.SET 155}


/DB.REC.VIEW [len] ....: Zeigt alle Felder im int. Textbetrachter an, optional max. Länge [len]
------------------------

Beispiel: {/DB.REC.VIEW}
Beispiel: {/DB.REC.VIEW 75}

Im letzten Beispiel werden 75 Zeichen (von links) sämtlicher Datenfelder (Kette) des aktuellen
Datensatzes angezeigt.

-> Beachte!
Funktionsänderung des Parameters zu RK v7.0. Ggf. Parameter anpassen.


/DB.TABLE.ASK-N .......: Legt die Tabellen-Nr. während der Skript-Abarbeitung fest
/DB.TABLE.ASK-S .......: Legt den Tabellen-Namen während der Skript-Abarbeitung fest
------------------------

Beispiel: {/DB.TABLE.ASK-N}
Beispiel: {/DB.TABLE.ASK-S}


/DB.TABLE.SELECT ......: Legt die Tabelle durch Auswahl aus einer Liste fest
------------------------
Bei geöffneter Datenbank kann so zwischen verschiedenen Tabellen hin- und hergeschaltet werden.

Beispiel: {/DB.TABLE.SELECT}


/DB.TABLE.SET-N nmb ...: Legt die Tabellen-Nr. <nmb> fest
/DB.TABLE.SET-S str ...: Legt den Tabellen-Namen <str> fest
------------------------

Beispiel: {/DB.TABLE.SET-N 4}
Beispiel: {/DB.TABLE.SET-S profit$}