Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

ISAM-Zeiger

Makroaufrufe, die sich auf einen Satz beziehen, der von einem vorangegangenen Makroaufruf bearbeitet wurde, arbeiten mit internen „Zeigern“, um die aktuelle Position in der Datei bestimmen zu können:

Sowohl für den Primärschlüssel als auch für jeden in der Datei definierten Sekundärschlüssel wird ein eigener Zeiger geführt. Eine erfolgreiche Positionierungs- oder Leseoperation über einen Sekundärschlüssel (mit SETL, GET, GETKY oder GETR) verändert zunächst den Zeiger für diesen Sekundärschlüssel und setzt über den aktualisierten Sekundärschlüsselwert den Zeiger für den Primärschlüssel auf den gelesenen Satz.

Makroaufrufe, die ISAM-Zeiger auswerten, sind alle sequenziellen Makroaufrufe oder z.B. PUTX, der einen zuvor gelesenen Satz in die Datei zurückschreibt.

Kann ein Makroaufruf nicht vollständig ausgeführt werden, weil z.B. ein Fehler oder ein PGLOCK auftrat, wird der Zeiger bei NK-ISAM auf den Wert zurückgesetzt, den er vor dem Makroaufruf hatte. Eine Ausnahme bildet allerdings der Fehler „NOFIND“: da der gesuchte Satz nicht gefunden wurde, kann auf diesen Schlüssel nicht positioniert werden.

ISAM-Zeiger werden in der Regel aktualisiert bevor der Makroaufruf ausgeführt wird. Allerdings muss bei sequenziellen Leseoperationen (GET, GETR) auch der vorausgegangene Makroaufruf berücksichtigt werden: geht einer sequenziellen Leseoperation ein SETL-Makroaufruf voraus, dient dieser SETL als „Positionierungs-Makroaufruf“.

Die ISAM-Aktionen OSTAT (Open Status) und ISREQ haben keinen Einfluss auf die Zeigerposition, da sie keine Aktionen in der Datei auslösen.

Bei Dateieröffnung wird als erste Aktion für eine ISAM-Datei intern ein „SETL B“ durchgeführt, d.h. auf den ersten Satz der Datei positioniert.

Regeln für ISAM-Zeiger

Aktionsmakro

Zeiger

Aktion

Bemerkung

ELIM

ohne Angabe von KEY: Zeiger wird nicht verändert;

mit Angabe von KEY: Zeiger wird auf den 1. Satz dieses Schlüssels gesetzt

streicht einen Satz aus der Datei

Man kann ELIM als ' left-shift' - Operation für den Teil der Datei betrachten, der rechts des definierten Satzes steht.
Daher muss bei erfolgreichem ELIM der Zeiger aktualisiert werden.

GET

setzt den Zeiger für den im Makro angesprochenen Primär- bzw. Sekundärschlüssel einen Satz weiter in Richtung Dateiende

stellt den Satz bereit, auf den der Zeiger verweist

Weist der Zeiger auf einen Satz außerhalb der Datei, wird dem Anwender die Steuerung am Ausgang EOFADDR übergeben.
War der vorausgegangene Makro ein SETL oder ELIM (mit KEY), wird der Zeiger erst beim Auffinden des Satzes geändert.


GETFL

setzt den Zeiger auf den Satz, der bereitgestellt wurde, oder auf den letzten Satz des definierten Bereichs

stellt den nächsten Satz bereit, der die Markierungskriterien erfüllt

Der Satz, der auf Grund eines korrespondierenden GET oder GETR-Makroaufrufs gefunden worden wäre, ist der erste Satz, der untersucht wird.

GETKY

setzt den Zeiger auf den Satz mit dem angegebenen Primär- bzw. Sekundärschlüsselwert oder positioniert an die Stelle der Datei, wo dieser Satz stehen müsste

stellt den Satz bereit, auf den der Zeiger verweist, falls ein Satz mit dem angegebenen Schlüssel vorhanden ist

Ein GETKY für einen Schlüssel, zu dem es keinen Datensatz gibt, ist äquivalent einem GETKY für einen Satz mit der Länge null, der zwischen zwei existenten Sätzen liegen soll.
Somit arbeitet ein nachfolgender GET oder GETR korrekt (siehe „GET“).

GETR

setzt den Zeiger für den im Makro angesprochenen Primär- bzw. Sekundärschlüssel einen Satz weiter in Richtung Dateianfang

stellt den Satz bereit, auf den der Zeiger verweist (-> Rückwärtslesen)

Weist der Zeiger auf einen Satz vor dem Dateianfang, erhält der Anwender die Steuerung am Ausgang EOFADDR (siehe „GET“).

INSRT

setzt den Zeiger auf die Position, die auf Grund des Satzschlüssels angegeben ist

fügt den Satz an der Stelle ein, auf die der Zeiger verweist

Der Satz wird nicht eingefügt, wenn bereits ein Satz mit diesem Schlüssel vorhanden ist. Der Zeiger verweist jedoch weiterhin auf die Position der Datei, an der der Satz eingefügt werden sollte.
Ein GET nach einem nicht erfolgreichen INSRT stellt den doppelten Satz wieder bereit.

OPEN

setzt den Zeiger vor ersten Satz


siehe "OPEN - Datei eröffnen"

PUT

setzt den Zeiger genau hinter das derzeitige Ende der Datei

bringt den Satz an die Stelle auf die verwiesen wird


PUTX

der Zeiger wird nicht verändert

bringt den Satz an die Stelle der Datei, auf die der Zeiger verweist

Es wird geprüft, ob unmittelbar vor dem PUTX ein GET-, GETR-, GETFL- oder GETKY-Makro aufgerufen wurde. So werden trotz nicht aktualisierten Zeigers Fehler vermieden.

RETRY

abhängig von der Operation, die wiederholt werden soll, oder von der Positionierungsoperation

wiederholt letzten Aktionsmakro bzw. positioniert Zeiger auf Ausgangsstellung oder bringt das Programm in eine Warteschlange

RETRY selbst ändert den Zeiger nicht, es sei denn, dass es zu der Ausführung eines Aktionsmakroaufrufs führt, der seinerseits den Zeiger ändert.

SETL

SETL B: Zeiger wird vor den ersten Satz der Datei gesetzt

SETL E: Zeiger wird hinter den letzten Satz der Datei gesetzt

SETL KEY: Zeiger wird auf den ersten Satz mit dem angegebenen Primär- bzw. Sekundärschlüsselwert gesetzt oder auf den Satz mit dem nächsthöheren Schlüsselwert

keine Aktion

Die Aktualisierung des Zeigers durch ein nachfolgendes GETR oder GET wird aufgehoben.

Durch das Zeigerkonzept kann bei nachfolgendem GET oder GETR ein SETL auf einen nicht vorhandenen Satz als SETL auf einen Satz der Länge null an der korrekten Position angenommen werden. Die Zeigeraktualisierung des darauf folgenden GET oder GETR wird hier nicht aufgehoben

STORE

setzt den Zeiger auf die Position, die durch den Schlüssel gegeben ist;
DUPEKY=YES: beim Auftreten doppelter Schlüssel wird hinter den vorhandenen Satz positioniert

schreibt den Satz an gewünschte Stelle

Ist bereits ein Satz mit diesem Schlüssel vorhanden, wird er überschrieben, es sei denn, DUPEKY=YES wurde vereinbart.
Bei DUPEKY=YES wird der neue Satz hinter den „alten“ Satz geschrieben