<< Inhaltsverzeichnis Suchen >>

c) Indexdateien

Die Datensätze von Indexdateien bestehen aus Feldern. Mit diesen Feldern werden Schlüssel gebildet. Der Zugriff auf die Datensätze erfolgt über einen Schlüssel. Die Datensätze können in beliebiger Reihenfolge über die Schlüssel gelesen und geschrieben werden.

Die Indexdateien werden zur Laufzeit des EBUS-Programms automatisch geöffnet und geschlossen. Die Konsistenz der Daten ist auch bei Programm- oder Systemabsturz gewährleistet. Voraussetzung dafür ist jedoch, daß kein Write-Cache aktiv ist. Wird nach dem Starten eines EBUS-Programms beim Öffnen der Indexdateien ein Defekt festgestellt, kann die Datei – je nach Benutzereingabe – reorganisiert werden, oder das Programm wird beendet.

Indexdateien können in den Anweisungen der Programmiersprache sowohl mit dem Indexdatei-Namen (absolut) als auch durch einen alphanumerischen Ausdruck (variabel) angesprochen werden.

Wird die Indexdatei im Programm variabel angesprochen, so muß im alphanumerischen Ausdruck der Name einer im Programm verwendeten Indexdatei enthalten sein. Falls der Name der Indexdatei im Programm nicht explizit vorkommt, muß er im Menuepunkt Verwalten Programm-Beschreibungen bei Zusätzliche Indexdateien für Unterprogramm angegeben werden. Im Datei-Namen ist Groß- und/oder Kleinschreibung möglich. Auch nachfolgende Leerzeichen (Blanks) sind zulässig.

 

 

Achtung: Bei der Verwendung eines variablen Indexdatei-Namens kann der EBUS-GENERATOR-C nicht überprüfen, ob der Indexdatei-Name syntaktisch korrekt ist. Deshalb tritt erst zur Laufzeit des EBUS-Programms ein Fehler auf, wenn der Indexdatei-Name fehlerhaft ist (z.B. führende Leerzeichen) oder die Indexdatei im Programm nicht verwendet wird. Die entsprechende Anweisung ist dann wirkungslos und der zugehörige Block ON ERROR ... END wird ausgeführt (OK=1041, OK2=919).

 

 

Im Multi-User-Betrieb wird die Konsistenz der Daten durch das Record-Locking gewährleistet.

Die Indexdatei-Variablen stellen die Verbindung zwischen Programm und Indexdatei her:

Bei den Schreib- und Leseanweisungen wird der entsprechende Schlüssel für den Dateizugriff aus dem aktuellen Inhalt der entsprechenden Indexdatei-Variablen gebildet. Bei Leseanweisungen werden die Indexdatei-Variablen mit den Werten des gelesenen Datensatzes versorgt. Man beachte dabei, daß bei den Anweisungen READ-NEXT, READ-PREVIOUS, START, READS-NEXT, READS-PREVIOUS und STARTS sich der Wert der aktuellen Schlüsselfelder auch ändern kann oder ändern muß.

Bei der Schreibanweisung WRITE wird der durch den Haupt-Schlüssel (Primär-Key) spezifizierte Satz in die Indexdatei geschrieben. Ist ein Datensatz mit diesem Schlüssel bereits vorhanden, wird er mit den aktuellen Werten überschrieben. Im Multi-User-Betrieb muß ein bereits bestehender Datensatz, der zurückgeschrieben werden soll, vorher gelesen worden sein, andernfalls wird der Fehler 1062 gemeldet.

Mit der Anweisung DELETE wird der durch den Haupt-Schlüssel spezifizierte Satz in der Indexdatei gelöscht.

Im EBUS-Programm können mit den Anweisungen PATH, NEWNAME, OPENMODE und die Pfade, die physikalischen Namen und der Zugriffsmodus von Indexdateien geändert werden.



Beispiel:

 

/*
/*   Außenstände in der Kundendatei aktualisieren
/*
/*   OPEN erfolgt automatisch beim Programmstart

KUNDEN.NR = ACT_NR                                                           /* Haupt-Schlüssel definieren

READ KUNDEN                                                                          /* Datensatz lesen
               ON ERROR GOTO FEHLER END

KUNDEN.AUSSEN = KUNDEN.AUSSEN + ACT_EINGANG
                                                                                                       /* Feld AUSSEN aktualisieren

WRITE KUNDEN                                                                        /* Datensatz zurückschreiben
               ON ERROR GOTO FEHLER END

FEHLER: ¼

/*
/*  Variabler Indexdatei-Zugriff
/*
IF SCHALTER=1
THEN DATEI$=“NEUKUND“
ELSE DATEI$=“ALTKUND“
ENDIF

READ DATEI$
ON ERROR
               IF OK=1041 AND OK2=919
               THEN ERRORMES=“Datei nicht vorhanden: „+DATEI$
               ELSE ERRORMES=“Lesefehler“+STR$(OK)+STR$(OK2)+“ in Datei „+DATEI$
               ENDIF
END

 

Bei Indexdatei-Zugriffen können folgende Fehler auftreten:

Fehlernummer in der Variablen OK

Fehler

1014

nicht genügend Speicherplatz vorhanden

1021

READ-NEXT oder READ-PREVIOUS ohne vorherigen START oder READ mit demselben Schlüssel

1031

Indexdatei nicht gefunden, Name ungültig

1041

Kommando-Fehler

1042

Knotengröße zu groß

1051

Datensatz nicht vorhanden

1061

Datensatz bereits vorhanden (Haupt-Schlüssel kommt doppelt vor.)

1062

Multi-User WRITE ohne daß der zu überschreibende Satz gesperrt ist

1065

Datensatz wurde zwischenzeitlich von anderem User gelöscht oder verändert

1071

OPEN/CLOSE Fehler

1072

Fehler bei CREATE, OK2 enthält Systemfehlernummer

1090

Indexdatei ist defekt

1097

Fehler beim Schreiben <datei>.ebu, OK2 enthält Systemfehlernummer

1801

C-ISAM: Fehler bei Release

1802

C-ISAM: Fehler bei Rewrite

1803

C-ISAM: Fehler bei Write

1901

Datensatz in Datendatei ist gesperrt

1902

Reorg nicht möglich

1903

Fehler bei Lesen des Headers aus der DBASE-Datei

1904

Fehler bei Schreiben des Headers in die DBASE-Datei

1905

CHR$(0) im Datensatz

1906

Reorgaufruf für Btrieve-Datei

1999

interner Fehler bei Reorg

 >2000

Systemfehlernummer + 2000, OK2 enthält Systemfehlernummer

 

OK2:

901

Datei bereits offen (CREATE,OPEN)

902

Datei nicht offen

903

Länge des übergebenen Schlüssels zu groß oder zu klein

904

Fehler bei OPEN <datei.ebu> (Datei nicht vorhanden)

905

Knotengröße > 1024

906

<datei>.ebu doch vorhanden bei Create (Kollision beim gleichzeitigen Anlegen der Datei)

907

OPEN nicht möglich, da Datei exklusiv gesperrt

908

<datei>.ebu defekt

909

Syntax-Fehler

910

Unzulässiges Kommando

911

Kein Speicherplatz mehr vorhanden

912

Indexdatei ist defekt

913

Exklusiv-Open nicht möglich.

914

Dateistruktur hat sich geändert. Reorg nicht möglich, da Exklusiv-OPEN nicht möglich oder Abfrage mit <N> beantwortet wurde.

915

Fehler bei OPEN: <datei>.ebu wurde nicht gefunden, obwohl <datei>.i1 oder <datei> bzw. <datei>.dbf vorhanden ist.

916

Dateityp EBUS/DBASE stimmt nicht mit Generierung überein.

917

Reorganisation wurde abgebrochen

918

DBASE-Dateistruktur (Feldaufbau) stimmt nicht mit Generierung überein. Reorganisation ist nicht möglich.

919

Ungültige Dateinummer

920

Datendatei nicht vorhanden. <datei>.ebu ist vorhanden, aber die Datendatei <datei> existiert nicht.

921

Sekundär-Key existiert nicht

922

CHR$(0) im Datensatz

924

Reorgaufruf für Btrieve-Datei

925

SHARE im Multi-User-Betrieb nicht geladen oder mehr als 1024 User

926

Zurückschreiben oder Löschen des Datensatzes nicht möglich, da der Datensatz inzwischen verändert wurde.