' tb-screen: 80x25 ' tb-tempdir ' ISAM (Spec isam-datenbank, Anforderung "Indexverwaltung"): CREATEINDEX ' mit einer und mit mehreren Spalten, eindeutig und mehrdeutig, auf- und ' absteigend; SETINDEX/GETINDEX$, DELETEINDEX und die Fehler 83 und 84. ' Laeuft in einem temporaeren Verzeichnis. TYPE Person Nachname AS STRING * 8 Vorname AS STRING * 8 Alter AS INTEGER END TYPE DIM p AS Person ON ERROR GOTO Handler OPEN "leute.isam" FOR ISAM Person "Leute" AS #1 p.Nachname = "Meier" p.Vorname = "Anna" p.Alter = 30 INSERT #1, p p.Nachname = "Meier" p.Vorname = "Bert" p.Alter = 50 INSERT #1, p p.Nachname = "Adam" p.Vorname = "Cara" p.Alter = 40 INSERT #1, p ' --- 5.2: eine Spalte, mehrdeutig, aufsteigend --- CREATEINDEX #1, "NachName", 0, "Nachname" SETINDEX #1, "NachName" PRINT "einspaltig aufsteigend:"; GOSUB Durchlauf ' --- 5.2: eine Spalte, absteigend --- CREATEINDEX #1, "AlterAb", 0, "-Alter" SETINDEX #1, "AlterAb" PRINT "absteigend nach Alter:"; GOSUB Durchlauf ' --- 5.2: mehrspaltig, eindeutig --- CREATEINDEX #1, "VollName", 1, "Nachname", "Vorname" SETINDEX #1, "VollName" PRINT "mehrspaltig eindeutig:"; GOSUB Durchlauf ' --- 5.2: mehrspaltig gemischte Richtung --- CREATEINDEX #1, "NachAbAlter", 0, "Nachname", "-Alter" SETINDEX #1, "NachAbAlter" PRINT "Nachname auf, Alter ab:"; GOSUB Durchlauf ' --- 5.4: GETINDEX$ liefert den aktiven Index zurueck --- SETINDEX #1, "NachName" PRINT "aktiv: ["; GETINDEX$(1); "]" ' Ohne Namen gilt der NULL-Index (Einfuegereihenfolge). SETINDEX #1 PRINT "NULL-Index: ["; GETINDEX$(1); "]" ' --- 5.4: nach SETINDEX ist der erste Satz der neuen Ordnung aktuell --- SETINDEX #1, "NachName" RETRIEVE #1, p PRINT "erster nach NachName: "; RTRIM$(p.Nachname); "/"; RTRIM$(p.Vorname) SETINDEX #1, "AlterAb" RETRIEVE #1, p PRINT "erster nach AlterAb: "; RTRIM$(p.Nachname); "/"; RTRIM$(p.Vorname) SETINDEX #1 RETRIEVE #1, p PRINT "erster im NULL-Index: "; RTRIM$(p.Nachname); "/"; RTRIM$(p.Vorname) ' --- 5.5: unbekannter Index meldet 83 --- SETINDEX #1, "GibtsNicht" ' --- 5.5: unbekannte Spalte meldet 84 --- CREATEINDEX #1, "Falsch", 0, "GibtsNicht" ' --- 5.3: DELETEINDEX; danach ist der Index nicht mehr setzbar --- DELETEINDEX #1, "NachName" PRINT "Index geloescht" SETINDEX #1, "NachName" CLOSE #1 PRINT "fertig" END ' Sätze in der Ordnung des aktiven Index ausgeben. Durchlauf: MOVEFIRST #1 DO WHILE NOT EOF(1) RETRIEVE #1, p PRINT " "; RTRIM$(p.Nachname); "/"; RTRIM$(p.Vorname); p.Alter; MOVENEXT #1 LOOP PRINT RETURN Handler: PRINT "ERR="; ERR RESUME NEXT