home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / commands.zip / ERRORCHK.PRG < prev    next >
Text File  |  1986-05-28  |  9KB  |  357 lines

  1.  
  2.  
  3.  
  4. * -- ERRORCHK.PRG
  5. * -- CHECK CONDITIONS, FROM COMMANDS.PRG
  6. * -- 03/22/86, 03/31/86, 05/14/86
  7. * -- Glenn R. Abelson
  8. SELECT 2
  9. USE DATADICT
  10. GOTO BOTTOM
  11. APPEND BLANK
  12. REPLACE FIELD_NAME WITH 'RECNO()', FIELD_TYPE WITH 'N', FIELD_LEN WITH 7
  13. GOTO TOP
  14. CLEAR
  15. MCOND = ' '                   && Condition builder, starts empty
  16. DO WHIL .T.
  17. HELP_CODE = "102"
  18. CLEAR
  19. *
  20. * -- If search is on ALL records (Count, Delete etc.)
  21. * -- skip first part
  22. *
  23. STORE UPPER(MFIELD) TO MFIELD
  24. ?'Error check routine works on ALL conditions  '
  25. ?'    FIELDNAME = "DATA"  '
  26. ?'         or'
  27. ?'    FIELDNAME < ##'
  28. ?'         or'
  29. ?'     RECNO() > 100 '
  30. ?
  31. ?'═════════════════════════════════════════════════════════════════════'
  32. ?'Using &MBASE '
  33. *
  34. * -- Replace command has a WITH ?? , so it requires special presentation
  35. *
  36. IF '&MCMD' = 'REPLACE'
  37. ?'Command so far is -> &MCMD &MFIELD WITH &MMB ? ? '
  38. ELSE
  39. ?'Command so far is -> &MCMD &MFIELD ? ? '
  40. ENDI
  41. ?'═════════════════════════════════════════════════════════════════════'
  42. ?
  43. ?'You may apply above command to ' 
  44. ?'1. ALL records in database'
  45. ?'2. ERROR check routine'
  46. ?'3. NON ERROR check mode -- allows faster entry of command '
  47. ?'   Use Non error condition for loose string search (help after #3)'
  48. ?'<enter> to exit '
  49. ?
  50. WAIT 'Selection ? ' TO MCD
  51.   IF MCD < "!"
  52.    STORE 'NONE' TO MCOND
  53.    USE
  54.    RETURN
  55.   ENDI
  56. *
  57.   IF MCD = '1'
  58.     STORE 'RECNO() > 0' TO MCOND
  59.     RETURN
  60.   ENDI
  61. *
  62.   IF MCD = '3'
  63. *
  64. * -- Clear MNAME in case "SSSSS"$FIELDNAME is used, or last used field name
  65. * -- will be sought
  66. *
  67.      MNAME = SPACE(10)
  68.      CLEAR
  69.      HELP_CODE = "103"    
  70.      ?' No error checking, here... check your typing before pressing <enter>'
  71.      ?' Examples of syntax '
  72.      ?' To find a loose string of data from anywhere in a field ->'
  73.      ?' "DATA"$FIELDNAME  or to look for lower and UPPER case  "DATA"$UPPER(FIELDNAME)'
  74.      ?'                         or'
  75.      ?' FIELDNAMEA = "XX" .AND. ("DATA"$FIELDNAMEB)'
  76.      ?
  77.          IF '&MCMD' = 'REPLACE'
  78.           ?'Command so far is -> &MCMD &MFIELD WITH &MMB ? ? '
  79.          ELSE
  80.           ?'Command so far is -> &MCMD &MFIELD  ? ? '
  81.          ENDI
  82.      ?'Please treat below without regard to line above '
  83.      ACCEPT 'Field name ONLY to act upon, or first of list ' to MNAME
  84.      ?'Now enter full command ignoring field name above '
  85.      ACCEPT 'Full conditional command FOR ? .. ' to MCOND
  86.      RETURN
  87.   ENDI
  88. *
  89. * -- If <S> was pressed do error checking on conditions
  90. *
  91. CLEAR
  92. ?'Condition to work on requires three entries...'
  93. ?'...the first is a field name  or  database function'
  94. ?'   complete error checking is provided for field name'
  95. ?'   help is provided for functions'
  96. ?'...the field must =  > < <>  >= <=  something.  Choices are outlined'
  97. ?'...the last is the data to be acted on. Error checking is provided'
  98. ?
  99. *
  100. * -- DO WHILE LOOP IS FOR MULTIPLE CONDITION LOOPING
  101. *
  102. *
  103. DO WHIL .T.
  104. ?'═════════════════════════════════════════════════════════════════════'
  105. ?MBASE
  106. *
  107. * -- First condition
  108. *
  109. IF MCOND < "!"
  110.   IF '&MCMD' = 'REPLACE'
  111.    ?'&MCMD &MFIELD WITH &MMB FOR FIELD NAME ? ' 
  112.   ELSE
  113.    ?'&MCMD &MFIELD FOR FIELD NAME ? ' 
  114.   ENDI
  115. *
  116. * -- Subsequent conditions
  117. *
  118. *
  119.   IF '&MCMD' = 'REPLACE'
  120.     ?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ' 
  121.   ELSE
  122.     ?'&MCMD &MFIELD FOR &MCOND ? ' 
  123.   ENDI
  124. ENDI
  125.  
  126. ?'═════════════════════════════════════════════════════════════════════'
  127. ?
  128.      ACCEPT 'FIELD NAME to condition on, or <L> for field list ' TO MNAME
  129.       IF MNAME < "!"
  130.       LOOP
  131.       ENDI
  132. *
  133. *
  134.       IF UPPER(MNAME) = 'L'
  135. *
  136. * -- Use field list for clipper, because it is fast
  137. *
  138.    IF CLIPPER
  139.      ROW = 2
  140.      CLEAR
  141.      COUNT TO MCOUNT
  142.      SELECT 1
  143.   DO WHIL .T.
  144.      FOR N = 1 TO MCOUNT
  145.        IF ROW > 22
  146.         WAIT
  147.         ROW = 2
  148.         CLEAR
  149.        ENDI
  150.        @ ROW()+1,1 SAY N PICTURE "@B"
  151.        @ ROW(),8 SAY FIELDNAME(N)
  152.         N = N+1
  153.        @ ROW(),22 SAY N PICTURE "@B"
  154.        @ ROW(),28 SAY FIELDNAME(N)
  155.          N = N+1
  156.        @ ROW(),42 SAY N PICTURE "@B"
  157.        @ ROW(),48 SAY FIELDNAME(N)
  158.          N=N+1
  159.        @ ROW(),62 SAY N PICTURE "@B"
  160.        @ ROW(),70 SAY FIELDNAME(N)
  161.          ROW = ROW + 1
  162.         NEXT N
  163.           IF "" = FIELDNAME(N)
  164.             WAIT
  165.             SELECT 2
  166.             EXIT
  167.           ENDI
  168.        LOOP
  169.    ENDD
  170. *
  171. * -- IF NOT CLIPPER DO BELOW, BECAUSE ITS FASTER IN DBASE
  172. *
  173.  ENDI
  174.     IF .NOT. CLIPPER
  175.             ?'Use Ctrl/Num Lock to control screen scroll '
  176.             ?'List will include FIELD NAME, TYPE, LENGTH, DECIMALS'
  177.            WAIT
  178.             DISP ALL FIELD_NAME,FIELD_TYPE,FIELD_LEN,FIELD_DEC
  179.             CLEAR
  180.             LOOP
  181.             CLEAR
  182.            ELSE
  183. *
  184.             MCOND = ' '
  185.             CLEAR
  186.             LOOP
  187.           ENDI
  188. *
  189.   ENDI
  190.  
  191. *
  192. * -- Look for record
  193. *
  194.       STORE UPPER(MNAME) TO MNAME
  195.       LOCATE FOR  FIELD_NAME="&MNAME"
  196.       IF EOF()
  197.        ? CHR(7)
  198.        ? 'That is not a field name in &MBASE'
  199.        WAIT
  200.        LOOP
  201.      ENDI
  202.  
  203.  
  204.  
  205. * -- GET type of condition
  206. *
  207. CLEAR
  208.   IF MCOND < "!"
  209.     STORE '&MNAME' TO MCOND
  210.   ELSE
  211.     STORE '&MCOND' + '&MNAME' TO MCOND
  212.   ENDI
  213. ?'═════════════════════════════════════════════════════════════════════'
  214. IF MCOND < "!"
  215.   IF '&MCMD' = 'REPLACE'
  216.    ?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ? '
  217.   ELSE
  218.    ?'&MCMD &MFIELD FOR &MCOND ? ? '
  219.   ENDI
  220. *
  221. ELSE
  222. *
  223.   IF '&MCMD' = 'REPLACE'
  224.    ?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ' 
  225.   ELSE
  226.    ?'&MCMD &MFIELD FOR &MCOND ? ' 
  227.   ENDI
  228. ENDI
  229.  
  230. ?'═════════════════════════════════════════════════════════════════════'
  231. ?'Is &MCOND to '
  232. ?'1. = equal '
  233. ?'2. > be greater than'
  234. ?'3. < be less than '
  235. ?'4. <> not equal '
  236. ?'5. >= be greater than or equal to'
  237. ?'6. <= be less than or equal to'
  238. ?
  239. WAIT 'Select by # 'TO CHOICE
  240.  DO CASE
  241.   CASE CHOICE = '1'
  242.     STORE ' = ' TO MEQ
  243.   CASE CHOICE = '2'
  244.     STORE ' > ' TO MEQ
  245.   CASE CHOICE = '3'
  246.     STORE ' < ' TO MEQ
  247.   CASE CHOICE = '4'
  248.      STORE ' <> ' TO MEQ
  249.   CASE CHOICE = '5'
  250.      STORE ' >= ' TO MEQ
  251.   CASE CHOICE = '6'
  252.      STORE ' <= ' TO MEQ
  253.   OTHERWISE
  254.      LOOP
  255.  ENDCASE
  256. CLEAR
  257. STORE '&MCOND' + '&MEQ' TO MCOND
  258. ?
  259. ?'═════════════════════════════════════════════════════════════════════'
  260. IF MCOND < "!"
  261.   IF '&MCMD' = 'REPLACE'
  262.    ?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ? '
  263.   ELSE
  264.    ?'&MCMD &MFIELD FOR &MCOND ? ? '
  265.   ENDI
  266. *
  267. ELSE
  268. *
  269.   IF '&MCMD' = 'REPLACE'
  270.    ?'&MCMD &MFIELD WITH &MMB FOR &MCOND ? ' 
  271.   ELSE
  272.    ?'&MCMD &MFIELD FOR &MCOND ? ' 
  273.   ENDI
  274. ENDI
  275.  
  276. ?'═════════════════════════════════════════════════════════════════════'
  277. ?
  278. *
  279. *
  280.       LOCATE FOR FIELD_NAME = '&MNAME'  && find the conditional field
  281.         IF FIELD_TYPE = 'N'             && INPUT if a numeric field
  282.         MWHAT = 0
  283.         @6,1 SAY 'Enter number here -> ' GET MWHAT PICTURE '999999999999999'
  284.         READ
  285.            STORE STR(MWHAT) TO MWHAT    && for display only, below
  286.            STORE LTRIM(MWHAT) TO MWHAT
  287.          ELSE
  288.           ?' DO NOT USE "QUOTES" '
  289.           ACCEPT 'Put data here -> ' TO MWHAT
  290.       IF MWHAT < "!"
  291.       EXIT
  292.       ENDI
  293.  
  294.            IF FIELD_TYPE = 'D'           && make accomodation for DATE field
  295.             STORE DTOC(MWHAT) TO MWHAT
  296.            ENDI
  297.           STORE '"'+'&MWHAT'+'"' TO MWHAT  && put quotes into memvar
  298.         ENDI
  299. CLEAR
  300. STORE '&MCOND' + '&MWHAT' TO MCOND
  301. ?'═════════════════════════════════════════════════════════════════════'
  302. IF '&MCMD' = 'REPLACE'
  303. ? '&MCMD &MFIELD WITH &MMB FOR &MCOND '
  304. ELSE
  305. ?' &MCMD &MFIELD FOR &MCOND '
  306. ENDI
  307. ?'═════════════════════════════════════════════════════════════════════'
  308. WAIT 'Press any key to continue, <R>edo conditions ' TO MREDO
  309.  IF UPPER(MREDO)='R'
  310.   STORE ' ' TO MCOND
  311.   EXIT
  312.  ENDI
  313. *
  314. *
  315. * -- GET OUT OF LOOP
  316. *
  317. *
  318. * -- PUT ALL MEMVARS TOGETHER
  319. * -- Combine all memvars for condition to MCOND
  320. *
  321. *  -- LOOP CONDITIONS 
  322. *
  323. CLEAR
  324. ?'&MCMD &MFIELD FOR &MCOND'
  325. TEXT
  326. 1. Add a .NOT. condition (i.e. STATE = "NY" .NOT. VOLUME > 100)
  327. 2. Add an .AND. condition
  328. 3. Add an .OR. condition
  329. <enter> if no more conditions
  330.  
  331. ENDT
  332. SET EXACT ON
  333. WAIT TO MAGAIN
  334.  DO CASE
  335.     CASE "" = MAGAIN
  336.         ?' WORKING '
  337.         CLEAR
  338.         SET EXACT OFF
  339.         RETURN
  340.     CASE MAGAIN = '1'
  341.         STORE '&MCOND' + " .NOT. " TO MCOND
  342.         LOOP
  343.     CASE MAGAIN = '2'
  344.         STORE '&MCOND' + " .AND. " TO MCOND
  345.         LOOP
  346.     CASE MAGAIN = '3'
  347.         STORE '&MCOND' + " .OR. " TO MCOND
  348.         LOOP
  349.     OTHERWISE
  350.       SELE 1
  351.       SET EXACT OFF
  352.       RETURN
  353.  ENDCASE
  354. SET EXACT OFF
  355. ENDD
  356. ENDD
  357.