ex.hlp (Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
CREATEINDEX, DELETEINDEX, GETINDEX$, MOVEpos, and SETINDEX
                        Example                Contents  Index  Back
──────────────────────────────────────────────────────────────────────────────
' This example uses the CREATEINDEX, SETINDEX and DELETEINDEX statements to
' index an ISAM file in several ways. It displays records from the file
' using the GETINDEX$ and BOF functions and the MOVEdest statements.
 
' Note: To run this program, you must load the ISAM TSR program PROISAMD.EXE.
' Also, this program assumes a file called BOOKS.MDB exists in the current
' directory. BOOKS.MDB is a sample ISAM file that SETUP copies to your disk.
 
' If this program is interrupted before the database is closed, the file
' BOOKS.MDB may be left in an inconsistent state.
 
' To try this example:
' 1. Choose New Project from the File menu
' 2. Copy the code example below to the code window
' 3. Press F5 to run the example
 
 DEFINT A-Z
 TYPE BookRec
     IDNum AS DOUBLE             ' Unique ID number for each book
     Price AS CURRENCY           ' Book price
     Edition AS INTEGER          ' Book edition
     Title AS STRING * 50        ' Book title
     Publisher AS STRING * 50    ' Book publisher
     Author AS STRING * 36       ' Book author
 END TYPE
 
 DIM Library AS BookRec          ' Record structure variable
 DIM msgtxt AS STRING
 
 CONST Database = "books.mdb"    ' Name of the disk file
 CONST TableName = "Bookstock"   ' Name of the table
 tablenum = FREEFILE             ' File number
 
    OPEN Database FOR ISAM BookRec TableName AS tablenum
    CREATEINDEX tablenum, "A", 0, "Author"
    CREATEINDEX tablenum, "I", 1, "IDnum"
    CREATEINDEX tablenum, "T", 0, "Title"
    CREATEINDEX tablenum, "C", 0, "Price"
 
    ' Display static instructions
    CLS : LOCATE 13, 30
    PRINT "Choose a key:"
    PRINT SPC(9); "Move to:"; TAB(49); "Order by: X"
    PRINT : PRINT SPC(9); "F - First record"; TAB(49); "A - Author"
    PRINT : PRINT SPC(9); "L - Last record"; TAB(49); "I - ID Number"
    PRINT : PRINT SPC(9); "N - Next record"; TAB(49); "T - Title"
    PRINT : PRINT SPC(9); "P - Previous record"; TAB(49); "C - Cost"
    PRINT : PRINT SPC(9); "Q - Quit"; TAB(49); "X - No order"
    LOCATE 3, 1: PRINT TAB(37); "Books"
    PRINT STRING$(80, "-");
    VIEW PRINT 5 TO 10          ' Set viewport for displaying records
 
    MOVEFIRST tablenum
    DO
    ' Display current record.
    CLS
    RETRIEVE tablenum, Library
    PRINT "Author:    "; Library.Author;
    PRINT TAB(49); "ID #: "; Library.IDNum
    PRINT "Title:     "; Library.Title
    PRINT "Publisher: "; Library.Publisher
    PRINT "Cost:     "; Library.Price
    PRINT SPC(30); msgtxt
    PRINT STRING$(64, "-");
    IF GETINDEX$(tablenum) = "" THEN
        PRINT STRING$(15, "-");
    ELSE
        PRINT "Index in use: "; GETINDEX$(tablenum);
    END IF
 
    ' Get keystroke from user.
    validkeys$ = "FLNPQATICX"
    DO
        Keychoice$ = UCASE$(INKEY$)
    LOOP WHILE INSTR(validkeys$, Keychoice$) = 0 OR Keychoice$ = ""
    msgtxt = ""
 
' Move to appropriate record, or change indexes.
    SELECT CASE Keychoice$
        CASE "F"
        MOVEFIRST tablenum
        CASE "L"
        MOVELAST tablenum
        CASE "N"
        MOVENEXT tablenum
        IF EOF(tablenum) THEN
            MOVELAST tablenum
            BEEP: msgtxt = "** At last record **"
        END IF
        CASE "P"
        MOVEPREVIOUS tablenum
        IF BOF(tablenum) THEN
            MOVEFIRST tablenum
            BEEP: msgtxt = "** At first record **"
        END IF
        CASE "Q"
        EXIT DO
        CASE ELSE           ' User chose an index
        VIEW PRINT
        LOCATE 13, 59: PRINT Keychoice$;
        VIEW PRINT 5 TO 10
        IF Keychoice$ = "X" THEN Keychoice$ = ""
        SETINDEX tablenum, Keychoice$
        MOVEFIRST tablenum
    END SELECT
    LOOP
 
' User wants to quit, so reset viewport, delete indexes and close files.
    VIEW PRINT
    DELETEINDEX tablenum, "A"
    DELETEINDEX tablenum, "I"
    DELETEINDEX tablenum, "T"
    DELETEINDEX tablenum, "C"
    CLOSE
    END