home *** CD-ROM | disk | FTP | other *** search
-
-
-
- * -- 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