home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
- DATABASE.BAS
- MicroComputer Services
- Jose Garcia
- PO Box 580 Dauphin, PA 17018
- (717)921-8764
- CIS user number 71211,124
-
-
- DATABASE.BAS is a simple name/address database program to demonstrate
- the text entry, record selection (by means of a bounce bar) and index
- routines that I have written. It was written with version 4.5 but will
- run in version 4.0 as well. QuickBASIC MUST BE STARTED WITH THE /AH
- PARAMETER - in other words for this program to work properly you MUST
- start QuickBASIC by typing QB /AH (more on this later). Any of the code
- can be used by other programmers but I ask that the comments be left
- intact. The program creates a database record file, names.dat and an
- index file, names.ndx in the default directory. If you have questions,
- comments or improvements concerning the code please drop me a line -
- either U.S. mail or CIS. I will reply as soon as my schedule permits.
-
- I originally wrote DATABASE.BAS to demonstrate the txt.edit routine that
- I had written. As I started DATABASE.BAS I realized that I needed a
- program that would emulate some common dBASE procedures. Thus,
- DATABASE.BAS grew to it's present size. It is not perfect and I hope that
- programmers who download this file will improve the coding and let me
- know the improvements made to the routines contained in DATABASE.BAS.
-
-
- The comments in the coding should help to explain what is happening and
- I will add to that now. To begin with, the TXT.EDIT routine is completely
- generic and can be used in other programs or compiled and used from
- within a QB library. All that needs to be done is to dimension a
- temporary array to hold the fields declared in the TYPE statement, make
- each element in the array represent one of those fields. Then call
- TXT.EDIT (arrayname), (starting screen row), (starting screen column),
- (flag, - 0 or 1, where 0 is overtype mode and 1 is insert mode). The
- routine will continue until all array elements (fields) have entries or
- <CR>'s. Then the array elements are switched back to the TYPE variables
- to be used by the rest of the program.
-
- The GETNAME routine can be used in other programs if the screen locations
- (LOCATE) are changed to accommodate your program and the TYPE variables
- are changed to your names. BORDER, HIGHLIGHT, LOWLIGHT, PAUSE and
- BOX routines will have to be included. It allows the user to choose a
- record entry easily by using the arrow keys, highlighting the record
- desired and pressing <RETURN>. It eliminates the errors caused by users
- having to type in the names of record entries and making typographical
- errors.
-
-
-
-
- The DB.INDEX routine called in the ON ERROR routine is used if the
- database file contains records but the index file is missing. It can be
- used to restore a corrupted index file or to build an new index file using
- the records contained in the data base. Note: it only works with database
- files created by QuickBASIC programs, it will not work with Ashton-Tate's
- dBASE version database files (.DBF). Your code will have to be changed
- to use your TYPE'd variable names, database record filename and your
- index filename in the DB.INDEX, OPENINDEX, REINDEX and UPDATENDX
- routines. The index file is read and entered into a dynamic array at the
- start of the program. All updates to the index are made to the memory
- array and are not written to file until the program exits normally (by
- using 5 at the main menu or arrowing down to QUIT and pressing <ENTER>.
- NOTE:If records are added to the database record file while running in the
- QuickBASIC environment and you "BREAK" <CTL><BRK> out of the program
- instead of QUITing with choice 5 on the menu, the index file will not be
- updated and you will get an error the next time you run the program.
- Always QUIT the program through the menu. Else DEL NAMES.NDX to fix.
- The new index is then written to disk and will be ready for the next
- session. The index array is stored dynamically in the far heap and
- outside of the 64K BASIC boundary for variables (DGROUP) so that arrays
- larger than 64K can be used (this would happen in large commercial
- applications). To ensure correct operation of the DB.INDEX, OPENINDEX,
- REINDEX and UPDATENDX routines, QB MUST be started with QB /AH.
- Also, use the /AH switch when compling from the command line with BC.
-
- The menu routine is "borrowed" from Frank Neal, it is a popular menu
- bounce-bar routine. For it to work, the variables choice% and np% MUST
- be dimensioned as shared with a DIM SHARED choice%, np% statement.
- Where choice% is the variable that returns the users menu choice and np%
- is the variable that contains the number of menu choices, also the number
- of elements in the array m$ should be dimensioned, but is not necessary.
-
- The DELETE routine is of interest because of the method used in deleting
- records. When a record is deleted, the DELETE routine simply adds an
- ASCII 20 (the paragraph symbol) as the first character in the field being
- indexed. When records are displayed, any record beginning with an ASCII
- 20 is simply skipped. When new records are added, the DATAENTRY routine
- after getting a new entry but before it is added to the database record
- file looks in the index to see if there is an entry that starts with
- an ASCII 20. If there is such an entry, the new record is saved with the
- record number of the record containing the ASCII 20, thus overwriting it
- and finally physically deleting it from the database file and index.
-
- The REINDEX, SEARCH%, NOSPACE$ and SORT routines were implemented
- from routines contained in the book Microsoft QuickBASIC Second Edition
- by Douglas Hergert. The SORT routine is a shell sort. The SEARCH%
- function is a binary search. The NOSPACE$ function removes any spaces
- in the index record of the fields names.first and names.last. The REINDEX
- routine simply adds a new entry to the index array in memory.
-
- I would appreciate any comments or improvements concerning this code.
- It did take me some time and effort to get the routines "up and running"
- so please take the time to contact me.
-
- Enjoy,
- Jose Garcia
-
- ----------------end-of-author's-documentation---------------
-
- Software Library Information:
-
- This disk copy provided as a service of
-
- The Public (Software) Library
-
- We are not the authors of this program, nor are we associated
- with the author in any way other than as a distributor of the
- program in accordance with the author's terms of distribution.
-
- Please direct shareware payments and specific questions about
- this program to the author of the program, whose name appears
- elsewhere in this documentation. If you have trouble getting
- in touch with the author, we will do whatever we can to help
- you with your questions. All programs have been tested and do
- run. To report problems, please use the form that is in the
- file PROBLEM.DOC on many of our disks or in other written for-
- mat with screen printouts, if possible. The P(s)L cannot de-
- bug programs over the telephone.
-
- Disks in the P(s)L are updated monthly, so if you did not get
- this disk directly from the P(s)L, you should be aware that
- the files in this set may no longer be the current versions.
-
- For a copy of the latest monthly software library newsletter
- and a list of the 1,800+ disks in the library, call or write
-
- The Public (Software) Library
- P.O.Box 35705 - F
- Houston, TX 77235-5705
- (713) 665-7017
-