home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
commands.zip
/
ERRORCHK.PRG
< prev
next >
Wrap
Text File
|
1986-05-28
|
9KB
|
357 lines
* -- ERRORCHK.PRG
* -- CHECK CONDITIONS, FROM COMMANDS.PRG
* -- 03/22/86, 03/31/86, 05/14/86
* -- Glenn R. Abelson
SELECT 2
USE DATADICT
GOTO BOTTOM
APPEND BLANK
REPLACE FIELD_NAME WITH 'RECNO()', FIELD_TYPE WITH 'N', FIELD_LEN WITH 7
GOTO TOP
CLEAR
MCOND = ' ' && Condition builder, starts empty
DO WHIL .T.
HELP_CODE = "102"
CLEAR
*
* -- If search is on ALL records (Count, Delete etc.)
* -- skip first part
*
STORE UPPER(MFIELD) TO MFIELD
?'Error check routine works on ALL conditions '
?' FIELDNAME = "DATA" '
?' or'
?' FIELDNAME < ##'
?' or'
?' RECNO() > 100 '
?
?'═════════════════════════════════════════════════════════════════════'
?'Using &MBASE '
*
* -- Replace command has a WITH ?? , so it requires special presentation
*
IF '&MCMD' = 'REPLACE'
?'Command so far is -> &MCMD &MFIELD WITH &MMB ? ? '
ELSE
?'Command so far is -> &MCMD &MFIELD ? ? '
ENDI
?'═════════════════════════════════════════════════════════════════════'
?
?'You may apply above command to '
?'1. ALL records in database'
?'2. ERROR check routine'
?'3. NON ERROR check mode -- allows faster entry of command '
?' Use Non error condition for loose string search (help after #3)'
?'<enter> to exit '
?
WAIT 'Selection ? ' TO MCD
IF MCD < "!"
STORE 'NONE' TO MCOND
USE
RETURN
ENDI
*
IF MCD = '1'
STORE 'RECNO() > 0' TO MCOND
RETURN
ENDI
*
IF MCD = '3'
*
* -- Clear MNAME in case "SSSSS"$FIELDNAME is used, or last used field name
* -- will be sought
*
MNAME = SPACE(10)
CLEAR
HELP_CODE = "103"
?' No error checking, here... check your typing before pressing <enter>'
?' Examples of syntax '
?' To find a loose string of data from anywhere in a field ->'
?' "DATA"$FIELDNAME or to look for lower and UPPER case "DATA"$UPPER(FIELDNAME)'
?' or'
?' FIELDNAMEA = "XX" .AND. ("DATA"$FIELDNAMEB)'
?
IF '&MCMD' = 'REPLACE'
?'Command so far is -> &MCMD &MFIELD WITH &MMB ? ? '
ELSE
?'Command so far is -> &MCMD &MFIELD ? ? '
ENDI
?'Please treat below without regard to line above '
ACCEPT 'Field name ONLY to act upon, or first of list ' to MNAME
?'Now enter full command ignoring field name above '
ACCEPT 'Full conditional command FOR ? .. ' to MCOND
RETURN
ENDI
*
* -- If <S> was pressed do error checking on conditions
*
CLEAR
?'Condition to work on requires three entries...'
?'...the first is a field name or database function'
?' complete error checking is provided for field name'
?' help is provided for functions'
?'...the field must = > < <> >= <= something. Choices are outlined'
?'...the last is the data to be acted on. Error checking is provided'
?
*
* -- DO WHILE LOOP IS FOR MULTIPLE CONDITION LOOPING
*
*
DO WHIL .T.
?'═════════════════════════════════════════════════════════════════════'
?MBASE
*
* -- First condition
*
IF MCOND < "!"
IF '&MCMD' = 'REPLACE'
?'&MCMD &MFIELD WITH &MMB FOR FIELD NAME ? '
ELSE
?'&MCMD &MFIELD FOR FIELD NAME ? '
ENDI
*
* -- Subsequent conditions
*
*
IF '&MCMD' = 'REPLACE'
?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? '
ELSE
?'&MCMD &MFIELD FOR &MCOND ? '
ENDI
ENDI
?'═════════════════════════════════════════════════════════════════════'
?
ACCEPT 'FIELD NAME to condition on, or <L> for field list ' TO MNAME
IF MNAME < "!"
LOOP
ENDI
*
*
IF UPPER(MNAME) = 'L'
*
* -- Use field list for clipper, because it is fast
*
IF CLIPPER
ROW = 2
CLEAR
COUNT TO MCOUNT
SELECT 1
DO WHIL .T.
FOR N = 1 TO MCOUNT
IF ROW > 22
WAIT
ROW = 2
CLEAR
ENDI
@ ROW()+1,1 SAY N PICTURE "@B"
@ ROW(),8 SAY FIELDNAME(N)
N = N+1
@ ROW(),22 SAY N PICTURE "@B"
@ ROW(),28 SAY FIELDNAME(N)
N = N+1
@ ROW(),42 SAY N PICTURE "@B"
@ ROW(),48 SAY FIELDNAME(N)
N=N+1
@ ROW(),62 SAY N PICTURE "@B"
@ ROW(),70 SAY FIELDNAME(N)
ROW = ROW + 1
NEXT N
IF "" = FIELDNAME(N)
WAIT
SELECT 2
EXIT
ENDI
LOOP
ENDD
*
* -- IF NOT CLIPPER DO BELOW, BECAUSE ITS FASTER IN DBASE
*
ENDI
IF .NOT. CLIPPER
?'Use Ctrl/Num Lock to control screen scroll '
?'List will include FIELD NAME, TYPE, LENGTH, DECIMALS'
WAIT
DISP ALL FIELD_NAME,FIELD_TYPE,FIELD_LEN,FIELD_DEC
CLEAR
LOOP
CLEAR
ELSE
*
MCOND = ' '
CLEAR
LOOP
ENDI
*
ENDI
*
* -- Look for record
*
STORE UPPER(MNAME) TO MNAME
LOCATE FOR FIELD_NAME="&MNAME"
IF EOF()
? CHR(7)
? 'That is not a field name in &MBASE'
WAIT
LOOP
ENDI
* -- GET type of condition
*
CLEAR
IF MCOND < "!"
STORE '&MNAME' TO MCOND
ELSE
STORE '&MCOND' + '&MNAME' TO MCOND
ENDI
?'═════════════════════════════════════════════════════════════════════'
IF MCOND < "!"
IF '&MCMD' = 'REPLACE'
?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ? '
ELSE
?'&MCMD &MFIELD FOR &MCOND ? ? '
ENDI
*
ELSE
*
IF '&MCMD' = 'REPLACE'
?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? '
ELSE
?'&MCMD &MFIELD FOR &MCOND ? '
ENDI
ENDI
?'═════════════════════════════════════════════════════════════════════'
?'Is &MCOND to '
?'1. = equal '
?'2. > be greater than'
?'3. < be less than '
?'4. <> not equal '
?'5. >= be greater than or equal to'
?'6. <= be less than or equal to'
?
WAIT 'Select by # 'TO CHOICE
DO CASE
CASE CHOICE = '1'
STORE ' = ' TO MEQ
CASE CHOICE = '2'
STORE ' > ' TO MEQ
CASE CHOICE = '3'
STORE ' < ' TO MEQ
CASE CHOICE = '4'
STORE ' <> ' TO MEQ
CASE CHOICE = '5'
STORE ' >= ' TO MEQ
CASE CHOICE = '6'
STORE ' <= ' TO MEQ
OTHERWISE
LOOP
ENDCASE
CLEAR
STORE '&MCOND' + '&MEQ' TO MCOND
?
?'═════════════════════════════════════════════════════════════════════'
IF MCOND < "!"
IF '&MCMD' = 'REPLACE'
?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ? '
ELSE
?'&MCMD &MFIELD FOR &MCOND ? ? '
ENDI
*
ELSE
*
IF '&MCMD' = 'REPLACE'
?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? '
ELSE
?'&MCMD &MFIELD FOR &MCOND ? '
ENDI
ENDI
?'═════════════════════════════════════════════════════════════════════'
?
*
*
LOCATE FOR FIELD_NAME = '&MNAME' && find the conditional field
IF FIELD_TYPE = 'N' && INPUT if a numeric field
MWHAT = 0
@6,1 SAY 'Enter number here -> ' GET MWHAT PICTURE '999999999999999'
READ
STORE STR(MWHAT) TO MWHAT && for display only, below
STORE LTRIM(MWHAT) TO MWHAT
ELSE
?' DO NOT USE "QUOTES" '
ACCEPT 'Put data here -> ' TO MWHAT
IF MWHAT < "!"
EXIT
ENDI
IF FIELD_TYPE = 'D' && make accomodation for DATE field
STORE DTOC(MWHAT) TO MWHAT
ENDI
STORE '"'+'&MWHAT'+'"' TO MWHAT && put quotes into memvar
ENDI
CLEAR
STORE '&MCOND' + '&MWHAT' TO MCOND
?'═════════════════════════════════════════════════════════════════════'
IF '&MCMD' = 'REPLACE'
? '&MCMD &MFIELD WITH &MMB FOR &MCOND '
ELSE
?' &MCMD &MFIELD FOR &MCOND '
ENDI
?'═════════════════════════════════════════════════════════════════════'
WAIT 'Press any key to continue, <R>edo conditions ' TO MREDO
IF UPPER(MREDO)='R'
STORE ' ' TO MCOND
EXIT
ENDI
*
*
* -- GET OUT OF LOOP
*
*
* -- PUT ALL MEMVARS TOGETHER
* -- Combine all memvars for condition to MCOND
*
* -- LOOP CONDITIONS
*
CLEAR
?'&MCMD &MFIELD FOR &MCOND'
TEXT
1. Add a .NOT. condition (i.e. STATE = "NY" .NOT. VOLUME > 100)
2. Add an .AND. condition
3. Add an .OR. condition
<enter> if no more conditions
ENDT
SET EXACT ON
WAIT TO MAGAIN
DO CASE
CASE "" = MAGAIN
?' WORKING '
CLEAR
SET EXACT OFF
RETURN
CASE MAGAIN = '1'
STORE '&MCOND' + " .NOT. " TO MCOND
LOOP
CASE MAGAIN = '2'
STORE '&MCOND' + " .AND. " TO MCOND
LOOP
CASE MAGAIN = '3'
STORE '&MCOND' + " .OR. " TO MCOND
LOOP
OTHERWISE
SELE 1
SET EXACT OFF
RETURN
ENDCASE
SET EXACT OFF
ENDD
ENDD