' tb-screen: 80x25 ' tb-tempdir ' ISAM (Spec isam-datenbank, Anforderungen "Cursorbewegung in der Ordnung ' des aktiven Index" und "Schluesselsuche"): MOVE-Familie, Einfuegereihen- ' folge ohne aktiven Index, EOF/BOF an den Raendern, SEEK-Familie mit ' Praefixsuche, erfolglose Suche und Suche ohne aktiven Index. ' Laeuft in einem temporaeren Verzeichnis. TYPE Satz Schluessel AS INTEGER Nachname AS STRING * 6 Vorname AS STRING * 6 END TYPE DIM s AS Satz ON ERROR GOTO Handler OPEN "cursor.isam" FOR ISAM Satz "Werte" AS #1 ' Einfuegereihenfolge 30, 10, 20 — damit sie sich von der Indexordnung ' unterscheidet. s.Schluessel = 30 s.Nachname = "Cesar" s.Vorname = "Carl" INSERT #1, s s.Schluessel = 10 s.Nachname = "Adam" s.Vorname = "Anna" INSERT #1, s s.Schluessel = 20 s.Nachname = "Adam" s.Vorname = "Bert" INSERT #1, s CREATEINDEX #1, "NachSchluessel", 1, "Schluessel" CREATEINDEX #1, "NachName", 0, "Nachname", "Vorname" ' --- 6.3: Bewegung ohne aktiven Index folgt der Einfuegereihenfolge --- SETINDEX #1 PRINT "ohne Index:"; MOVEFIRST #1 DO WHILE NOT EOF(1) RETRIEVE #1, s PRINT s.Schluessel; MOVENEXT #1 LOOP PRINT ' --- 6.2: Durchlauf in der Ordnung des aktiven Index --- SETINDEX #1, "NachSchluessel" PRINT "vorwaerts:"; MOVEFIRST #1 DO WHILE NOT EOF(1) RETRIEVE #1, s PRINT s.Schluessel; MOVENEXT #1 LOOP PRINT PRINT "rueckwaerts:"; MOVELAST #1 DO WHILE NOT BOF(1) RETRIEVE #1, s PRINT s.Schluessel; MOVEPREVIOUS #1 LOOP PRINT ' --- 6.4: MOVENEXT am Ende setzt EOF, Cursor unpositioniert --- MOVELAST #1 MOVENEXT #1 PRINT "EOF nach MOVENEXT am Ende:"; EOF(1); "BOF:"; BOF(1) RETRIEVE #1, s ' --- 6.4: MOVEPREVIOUS am Anfang setzt BOF, Cursor unpositioniert --- MOVEFIRST #1 MOVEPREVIOUS #1 PRINT "BOF nach MOVEPREVIOUS am Anfang:"; BOF(1); "EOF:"; EOF(1) RETRIEVE #1, s ' --- 6.5: SEEKGT, SEEKGE, SEEKEQ mit den Schluesseln 10, 20, 30 --- SETINDEX #1, "NachSchluessel" SEEKGT #1, 20 RETRIEVE #1, s PRINT "SEEKGT 20 ->"; s.Schluessel SEEKGE #1, 20 RETRIEVE #1, s PRINT "SEEKGE 20 ->"; s.Schluessel SEEKGE #1, 15 RETRIEVE #1, s PRINT "SEEKGE 15 ->"; s.Schluessel SEEKEQ #1, 10 RETRIEVE #1, s PRINT "SEEKEQ 10 ->"; s.Schluessel ' --- 6.5: Praefixsuche ueber einen mehrspaltigen Index --- SETINDEX #1, "NachName" SEEKGE #1, "Adam" RETRIEVE #1, s PRINT "Praefix Adam ->"; RTRIM$(s.Nachname); "/"; RTRIM$(s.Vorname) ' SEEKEQ mit unvollstaendigem Schluessel schlaegt immer fehl (Original-Hilfe). SEEKEQ #1, "Adam" PRINT "SEEKEQ mit Praefix, EOF:"; EOF(1) ' Mit beiden Werten findet SEEKEQ den Satz. SEEKEQ #1, "Adam", "Bert" RETRIEVE #1, s PRINT "SEEKEQ Adam/Bert ->"; s.Schluessel ' --- 6.6: erfolglose Suche setzt EOF, Cursor unpositioniert --- SETINDEX #1, "NachSchluessel" SEEKGT #1, 30 PRINT "SEEKGT 30, EOF:"; EOF(1) RETRIEVE #1, s ' --- 6.7: Suche ueber den NULL-Index meldet 87 --- SETINDEX #1 SEEKEQ #1, 10 CLOSE #1 PRINT "fertig" END Handler: PRINT "ERR="; ERR RESUME NEXT