home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
commands.zip
/
COMMANDS.PRG
next >
Wrap
Text File
|
1986-05-28
|
16KB
|
628 lines
* Program.....: COMMANDS.PRG
* DATES ......: 10/25/85, 10/27/85,03/14/86, 05/14/86
* NOTICE......: Copyright 1985 1986, Glenn Abelson, Inc. All rights reserved
* NOTES.......: MUST USE WITH ERRORCHK.PRG & GLIST.PRG
CLOS DATA
SET SAFE OFF
*
* -- Look for pre set normal and reverse colors
* -- if not found establish some
*
IF TYPE('GACOLN') = 'U'
STORE 'BG+/ ,GR+/ ' TO GACOLN
STORE 'GR+/ ,BG+/ ' TO GACOLR
ENDI
*
* -- Public memvars carry into errors.prg
* --
PUBLIC CLIPPER,MCOND,MFIELD,MBASE,MCMD,MMB,MINDEX,MNAME
MBASE = ' '
MINDEX = ' '
HELP_CODE = '101' && If using Clipper, you may assign a help code
CLEA
*
*
*
DO WHIL .T.
CLEAR
CHOICE = SPACE(1)
SET EXACT ON
SET COLOR TO &GACOLN
IF CLIPPER
frame = CHR(201)+CHR(205)+CHR(187)+CHR(186)+CHR(188)+CHR(205)+CHR(200)+;
CHR(186)
@ 1,10,15,70 BOX frame
ELSE
@ 1, 10 TO 15, 70 DOUBLE
ENDI
*
* -- Command mode menu
*
@ 1, 25 SAY " Command menu selections "
SET COLOR TO &GACOLR
@ 3, 12 SAY "SET-UP DATABASE CLEAN-UP FUNCTIONS"
@ 4, 12 SAY "<U>se a database <D>elete records"
@ 5, 12 SAY "<I>ndex set up <R>ecall records"
@ 6, 12 SAY "<F>ield list <P>ack database"
@ 7, 42 SAY "<Z>ap database"
@ 8, 12 SAY "MATH FUNCTIONS"
@ 9, 12 SAY "<A>verage a field SEARCH AND LOCATE"
@ 10, 12 SAY "<C>ount records <L>ist/Display"
@ 11, 12 SAY "<T>otals/sums <S>earch/Locate records"
@ 13, 27 SAY "GLOBAL UPDATE"
@ 14, 27 SAY "<G>lobal Replace"
SET COLOR TO &GACOLN
@ 16, 11 SAY "All commands are fully error checked, with step by step"
@ 17, 11 SAY "walk through for building commands and conditions."
SET COLOR TO &GACOLR
@ 19, 11 SAY "Press letter in <> for more info, then <enter> to continue"
@ 20, 11 SAY "with function, or any other key to return to menu."
SET COLOR TO &GACOLN
@ 21, 11 SAY "F1 for more help"
SET COLOR TO &GACOLR
@ 22, 11 SAY 'Using &MBASE'
@ 23, 11 SAY "Any LETTER (F for field list) or <enter> to exit ... "
@ 23, 63 GET CHOICE
READ
DO CASE
CASE "" = CHOICE
CLOSE DATA
SET EXACT OFF
RETURN
****
****
****
CASE UPPER(CHOICE) = 'U'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Use a database from this or any other directory, any extension.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
CLEAR
?' The following databases exist'
DIR
ACCE 'USE ... ' TO MBASE
STORE UPPER(MBASE) TO MBASE
*
* Make sure correct typing
*
IF FILE('&MBASE') .OR. FILE ('&MBASE' + '.DBF')
SELECT 1
USE &MBASE
*
* -- If work is being done on database, make MLOOK True so
* -- error checking routine for field names will be in effect
*
?'Creating error check program for database in use '
COPY TO DATADICT STRUCTURE EXTENDED
SELE 2
USE DATADICT
ELSE
MBASE = ' '
?' Check list and your spelling -- then re- enter'
wait
ENDI
*
****
****
****
CASE UPPER(CHOICE) = 'I'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Set an index if you want records in a particular order '
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
IF CLIPPER
? 'Clipper requires an .NTX index. You may create an index, here.'
? '.ntx will be automatically added '
ENDI
?' Use INDEX selection or create an index'
?
?' The following index fields currently exist - See manual for which'
?' index fields belong with which databases'
DIR *.NTX
?
?'1. Use a current index '
WAIT '2. Create and use a new index ' TO MIN
IF MIN <> '2'
SELECT 1
ACCE 'SET INDEX TO 'TO MINDEX
IF FILE('&MINDEX') .OR. FILE('&MINDEX' + '.NTX') .OR. FILE('&MINDEX' + '.NDX')
SET INDEX TO &MINDEX
LOOP
ELSE
?"Can't find that index"
?'You may re-enter data'
?'or Create a new index from Index menu'
wait
loop
endi
ELSE
SELECT 1
ACCE 'Field or field combination to index on ... ' TO MINON
ACCE 'Index name... ' TO MINDEX
IF MINDEX < "!"
LOOP
ENDI
?' INDEXING TO &MINDEX '
INDEX ON &MINON TO &MINDEX
ENDI
****
****
****
CASE UPPER(CHOICE) = 'F'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'List field names, types, lengths and decimals '
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
*
SELECT 2
USE DATADICT
DO WHILE .NOT. EOF()
DISP NEXT 19 FIELD_NAME,FIELD_TYPE,FIELD_LEN,FIELD_DEC
WAIT 'MORE Y/N? ' TO MMORE
IF UPPER(MMORE) = 'Y'
LOOP
ENDI
CLEAR
EXIT
ENDD
****
****
****
CASE UPPER(CHOICE) = 'A'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Find the Average of any field for any combination of conditions.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
?' Average [<expression list>][TO <memvar>][FOR/WHILE X=Y]'
?' Average requires two Inputs from you -- '
?
?' 1. The field (from open database) you wish to average'
?' 2. The conditions. To use ALL RECORDS, press return when prompted'
?' for conditions.'
?' memvar is automatically created as MAVERAGE and displayed to screen'
?
ACCE 'Field on which to AVERAGE 'TO MFIELD
IF MFIELD < "!"
LOOP
ENDI
*
* ERROR CHECKING ROUTINE, ON DATABASE ONLY
*
SELE 2
STORE UPPER(MFIELD) TO MC
LOCATE FOR FIELD_NAME="&MC"
IF EOF()
? CHR(7)
?'That is not a field name in &MBASE'
wait
loop
ENDI
STORE FIELD_TYPE TO MTYPE
IF MTYPE <> 'N'
?CHR(7)
?'You must use a NUMERIC field with this command'
WAIT
LOOP
ENDI
STORE 'AVERAGE' TO MCMD
DO ERRORCHK && Mini error checking, on conditions only
IF MCOND = 'NONE'
LOOP
ENDI
*
* AVERAGE ALL RECORDS IF NO FOR CONDITION IS ENTERED
*
*
SELE 1
AVERAGE &MFIELD TO MAVERAGE FOR &MCOND
?MAVERAGE
wait
****
****
****
CASE UPPER(CHOICE) = 'C'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Count the number of records that meet specified conditions.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
STORE 'COUNT' TO MCMD
STORE 'ALL' TO MFIELD
DO ERRORCHK
IF MCOND = 'NONE'
LOOP
ENDI
SELE 1
COUNT ALL TO MCOUNT FOR &MCOND
?MCOUNT
WAIT
SET FILTER TO
****
****
****
CASE UPPER(CHOICE) = 'T'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Get the sum of a field for all records or specific conditions.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
?' SUM [FIELD NAME] TO MEMVAR FOR [CONDITIONS]'
?
ACCE 'SUM (field name) ' TO MCOM
IF MCOM <"!"
LOOP
ENDI
*
* ERROR CHECKING ROUTINE, ON DATABASE ONLY
*
STORE '&MCOM' TO MFIELD
SELE 2
STORE UPPER(MCOM) TO MC
LOCATE FOR FIELD_NAME="&MC"
IF EOF()
? CHR(7)
?'That is not a field name in &MBASE'
wait
loop
ENDI
STORE FIELD_TYPE TO MTYPE
IF MTYPE <> 'N'
?CHR(7)
?'You must use a NUMERIC field with this command'
WAIT
LOOP
ENDI
STORE 'SUM' TO MCMD
DO ERRORCHK
IF MCOND = 'NONE'
LOOP
ENDI
SELE 1
SUM &MCOM TO MSUM FOR &MCOND
?MSUM
WAIT
****
****
****
CASE UPPER(CHOICE) = 'D'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Delete records by number(s) or by special mark in any field'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
STORE 'DELETE' TO MCMD
STORE 'ALL' TO MFIELD
DO ERRORCHK
IF MCOND = 'NONE'
LOOP
ENDI
SELE 1
DELETE ALL FOR &MCOND
?'Deletion done'
****
****
****
CASE UPPER(CHOICE) = 'R'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Recall, or bring back deleted records.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
STORE 'RECALL' TO MCMD
STORE 'ALL' TO MFIELD
DO ERRORCHK
IF MCOND = 'NONE'
LOOP
ENDI
SELE 1
RECALL ALL FOR &MCOND
SET DELETED ON
WAIT 'Recall done - press a key for menu'
****
****
****
CASE UPPER(CHOICE) = 'P'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Pack -- permanently erase deleted records from file.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
?' ALL DELETED RECORDS IN ACTIVE &MBASE WILL BE ERASED'
?' <Enter> PACKS -- any other key ABORTS'
WAIT TO PRESS
IF PRESS >= "!"
LOOP
ENDI
?'Packing &MBASE'
?'Reindex when done'
PACK
****
****
****
CASE UPPER(CHOICE) = 'Z'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Empty a database of ALL records, but save form.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
TEXT
YOU ARE ABOUT TO ERASE ALL DATA FROM THE &MBASE IN USE.
ENDTEXT
ACCE 'Type ZAP to zap and press <enter>...anything else exits ' TO mzap
IF UPPER(mzap)="ZAP"
? CHR(7)
WAIT 'You are about to remove ALL DATA from &MBASE - (C)ontinues ' to mgo
IF UPPER(mgo) = 'C'
SELECT 1
ZAP
SELECT 2
ELSE
LOOP
ENDI
ELSE
LOOP
ENDI
****
****
****
CASE UPPER(CHOICE) = 'L'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Lists can be created and saved to Screen, text file or printer.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
DO GLIST
****
****
****
CASE UPPER(CHOICE) = 'S'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Locate information from any position within a field. '
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
STORE 'LOCATE' TO MCMD
STORE 'ALL' TO MFIELD
DO ERRORCHK
IF MCOND = 'NONE'
LOOP
ENDI
SELE 1
*
* Since SET TALK is off for Compiled dbase, below must be
* used to show results of LOCATE
*
SET TALK OFF
?'MATCHING LIST - EDIT IN EDIT MODE'
LOCATE FOR &MCOND
DO WHIL .T.
CLEAR
LINE = 1
DO WHILE LINE < 20
@ ROW()+1,1 SAY RECNO()
@ ROW(), COL()+1 SAY &MNAME
LINE = LINE + 1
IF EOF()
?'You may show a blank record at end of file. This is normal.'
WAIT
STORE ' ' TO MWHAT && To force return to menu
EXIT
ELSE
CONT
IF LINE < 20
LOOP
ENDI
ENDI
WAIT '(M)ore or <enter> exit ' to MWHAT
ENDD
IF MWHAT < "!"
EXIT
ELSE
CONT
LOOP
ENDI
ENDDO
****
****
****
CASE UPPER(CHOICE) = 'G'
SET COLOR TO W+
@ 23,0 CLEAR
@ 23,0 SAY 'Replace contents of one field with new data for part or whole database.'
WAIT '<enter> to continue, any other key to exit ' TO MGO
IF .NOT. "" = MGO
@ 23,0 CLEAR
LOOP
ENDI
IF MBASE = " "
?'YOU MUST USE A DATABASE FIRST'
WAIT
LOOP
ENDI
CLEA
SET COLOR TO W*+/ ,W/ ,W
?' BE SURE YOU HAVE A BACKUP OF FILES FIRST'
SET COLOR TO &GACOLN
STORE 'REPLACE' TO MCMD
SELECT 1
?
?'REPLACE [scope][field(s) WITH <expression>][FOR/WHILE <condition>]'
?
?'Below reassigns GRA to all SKA accounts for NY state'
?'REPLACE [ALL] [SALES_CODE] WITH ["GRA"] FOR [SALES_CODE="SKA" .AND.'
?'STATE = "NY"'
?
?' You will enter information in three sections'
?' First is field(s) to replace'
?' At next prompt enter what to replace with'
?' At third prompt enter conditions to look for'
?
ACCE 'REPLACE ALL [FIELDNAME]' TO MCOM
IF MCOM <"!"
LOOP
ENDI
*
* ERROR CHECKING ROUTINE, ON DATABASE ONLY
*
STORE '&MCOM' TO MFIELD
SELE 2
STORE UPPER(MCOM) TO MC
LOCATE FOR FIELD_NAME="&MC"
IF EOF()
? CHR(7)
?'That is not a field name in &MBASE'
wait
loop
ENDI
ACCE 'REPLACE ALL &MCOM WITH [WHAT TO REPLACE WITH]' TO MMB
IF FIELD_TYPE = 'C' .OR. FIELD_TYPE = 'L' && ADD QUOTES IF NEEDED
STORE '"'+'&MMB'+'"' TO MMB
ENDI
DO ERRORCHK
IF MCOND = 'NONE'
LOOP
ENDI
? 'REPLACE ALL &MCOM WITH &MMB FOR &MCOND'
SELE 1
REPLACE ALL &MCOM WITH &MMB FOR &MCOND
?' done'
WAIT
****
****
****
OTHERWISE
CLOSE DATABASE
SET EXACT OFF
RETURN
ENDCASE
ENDDO