home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / dgenius.zip / DGENI001.PRG next >
Text File  |  1987-01-31  |  13KB  |  609 lines

  1.  
  2.  
  3. * System....: dGENIUS
  4. * Program...: dGENI001.prg
  5. * Date......: 01/26/87
  6. * Version...: 1.0(x4)
  7. * Author....: Brian Corll
  8. * Notes.....: This is the database maker procedure file.
  9.  
  10.  
  11. Procedure Get_title
  12.  
  13. Public dbfname
  14. clear
  15. set colo to gr+/n,w/b+
  16. set safe off
  17. set scor on
  18. set conf on
  19. set talk off
  20.  
  21.  
  22.  
  23. dbfname=space(8)
  24.  
  25. @ 1,0 say "This program allows you to create a new database file ;
  26. quickly and easily."
  27. @ 3,0 say "You will begin by giving your database file a name."
  28. @ 5,0 say "The name can be no more than eight letters long."
  29. @ 7,0 say "Enter the name here:" get dbfname picture "!!!!!!!!"
  30. read
  31.  
  32. if dbfname="        "
  33.    do while dbfname="        "
  34.     set colo to r+/n
  35.     ? chr(7),chr(7)
  36.     @ 7,0 say "Please ENTER A NAME!:" get dbfname picture "!!!!!!!!"
  37.     read
  38.   enddo while dbfname="        "
  39. endif dbfname="        "
  40.  
  41.  
  42. sayname=trim(dbfname)
  43. set colo to gr+/n,w/b+
  44.  
  45. @ 9,0 say "The name you have chosen for your database file is "+sayname+" ."
  46. yesno=space(1)
  47. @ 11,0 say "Is this name correct? (Y or N)" get yesno picture "!"
  48. read
  49.  
  50.  
  51. if yesno="N"
  52. clear
  53.  do while yesno="N"
  54.   dbfname=space(8)
  55.   @ 7,0 say "Enter the correct name here:" get dbfname picture "!!!!!!!!"
  56.   read
  57.   sayname=trim(dbfname)
  58.   @ 9,0 say "The new name for your database file is "+sayname+" ."
  59.   @ 11,0 say "Is this name correct? (Y or N)" get yesno picture "!"
  60.   read
  61.   if yesno="Y"
  62.   return
  63.   else
  64.   loop
  65.   endif yesno="Y"
  66.  enddo while yesno="N"
  67. else
  68. return
  69. endif yesno="N"
  70.  
  71.  
  72. Procedure Fields
  73.  
  74. Parameters dbfname
  75.  
  76. clear
  77. use skeleton
  78. zap
  79.  
  80. Public no_fields
  81. no_fields=0
  82.  
  83.  
  84. @ 1,0 say "How many items do you want to be in each record"
  85. @ 3,0 say "in your database file? (The maximum is 128.)" get no_fields ;
  86. picture "@Z 999" range 1,128
  87. read
  88.  
  89. a=0
  90.  
  91.  
  92. do while a<=no_fields
  93. mname=space(10)
  94.  
  95. a=a+1
  96. if a>no_fields
  97.      return
  98. else
  99. endif a>no_fields
  100.  
  101.  
  102. mlen=0
  103. mdec=0
  104.  
  105. append blank
  106. zz=ltrim(str(no_fields))
  107.  
  108. clear
  109. @ 1,0 say "FIELD NUMBER "+ltrim(str(a))+" of "+zz+" fields."
  110. @ 2,0 say "Enter a name (10 spaces or less) for this item:" get mname ;
  111. picture "!!!!!!!!!!"
  112. set colo to r+/n
  113. @ 3,0 say "There may not be any spaces in the name."
  114. @ 4,0 say "The name must begin with a letter."
  115. read
  116. @ 4,0 clear
  117. set colo to g+/n
  118. @ 4,0 say "VERIFYING ENTRY....."
  119. set colo to gr+/n,w/b+
  120. if .not. isalpha(substr(mname,1,1))
  121.    do while .not. isalpha(substr(mname,1,1))
  122.    ? chr(7)
  123.    @ 3,0 clea to 4,79
  124.    mname=space(10)
  125.    @ 3,0 say "THE FIRST CHARACTER OF THE NAME MUST BE A LETTER!"
  126.    set colo to gr+/n,w/b+
  127.    @ 4,0 say "Enter the name again:" get mname picture "!!!!!!!!"
  128.    read
  129.    enddo while .not. isalpha(substr(mname,1,1))
  130. else
  131. endif .not. isalpha(substr(mname,1,1))
  132.  
  133. lm=len(trim(mname))
  134. x=1
  135. do while x<=lm
  136.    if x<lm .and. substr(mname,x,1)=" " .and. substr(mname,x+1,1)<>" "
  137.       do while x<lm .and. substr(mname,x,1)=" " .and. substr(mname,x+1,1)<>" "
  138.       ? chr(7)
  139.       @ 3,0 clea to 4,79
  140.       set colo to r+/n
  141.       @ 3,0 say trim(upper(mname))+":CHARACTER NUMBER "+ltrim(str(x))+" IS BLANK!"
  142.       mname=space(10)
  143.       set colo to gr+/n,w/b+
  144.       @ 4,0 say "Enter the name again:" get mname picture "!!!!!!!!"
  145.       read
  146.       x=x+1
  147.       enddo
  148.   else
  149.   x=x+1
  150.   endif
  151. if x>lm
  152. exit
  153. else
  154. endif
  155. enddo while x<=lm
  156.  
  157.  
  158.  
  159. @ 3,0 clear
  160. @ 4,0 clear
  161. set colo to r+/n
  162. @ 3,0 say "The field name is "+trim(mname)+"."
  163. aok=space(1)
  164. set colo to gr+/n,w/b+
  165. @ 4,0 say "Is this field name correct? (Y or N)" get aok picture "!"
  166. read
  167. if aok="Y"
  168. repl field_name with mname
  169. else
  170. do while aok="N"
  171. newname=space(10)
  172. @ 4,0 clear
  173. @ 4,0 say "Enter correct name:" get newname picture "!!!!!!!!!!"
  174. read
  175. @ 3,0 clear to 4,79
  176. set colo to r+/n
  177. @ 3,0 say "The field name is "+trim(newname)+"."
  178. @ 4,0 say "Is this name correct now?" get aok picture "!"
  179. read
  180. if aok="Y"
  181. repl field_name with newname
  182. exit
  183. else
  184. loop
  185. endif
  186. enddo while aok="N"
  187. endif aok="Y"
  188.  
  189.  
  190. chosen=space(1)
  191. set colo to gr+/n,w/b,*r
  192. @ 4,0 clear
  193. @ 4,0 say "What type of information do you want to be in this field?"
  194. @ 5,5 say "1. Character-alphabetic or any other characters."
  195. @ 6,5 say "2. Numeric-numbers with or without decimal places."
  196. @ 7,5 say "3. Logical-yes or no(Y or N), true or false (T or F)"
  197. @ 8,5 say "4. Date-always select this type for any date field!"
  198. @ 9,5 get chosen picture "9"
  199. @ 9,7 say "<<Enter Selection"
  200. read
  201.  
  202. do case
  203.  
  204. case chosen="1"
  205. repl field_type with "C"
  206. @ 12,0 say "How many spaces do you need for the information in this field?"
  207. @ 13,0 say "Enter a number between 1 and 254:"get mlen ;
  208. picture "@Z 999" range 1,254
  209. read
  210. repl field_len with mlen
  211.  
  212. case chosen="2"
  213. repl field_type with "N"
  214. @ 12,0 say "How many spaces do you need for the information in this field?"
  215. @ 14,0 say "Include any decimal places and the decimal point."
  216. @ 16,0 say "Enter a number between 1 and 19:" get mlen ;
  217. picture "@Z 99" range 1,19
  218. read
  219. firstans=space(1)
  220. @ 18,0 say "Do you want decimal places in this number (Y or N)?" get firstans ;
  221. picture "!"
  222. read
  223.  
  224. if firstans="Y"
  225. @ 20,0 say "How many decimal places do you want?"
  226. @ 22,0 say "Enter a number between 1 and 15:" get mdec ;
  227. picture "@Z 99" range 1,15
  228. read
  229. repl field_dec with mdec
  230. repl field_len with mlen
  231. else
  232. repl field_len with mlen
  233. endif
  234.  
  235. case chosen="3"
  236. repl field_type with "L"
  237. repl field_len with 1
  238.  
  239. case chosen="4"
  240. repl field_type with "D"
  241. repl field_len with 8
  242.  
  243. otherwise
  244. ? chr(7)
  245. aa=1
  246. do while aa<=20
  247. set colo to r+/n
  248. @ 11,5 say "INVALID NUMBER! TRY AGAIN!"
  249. aa=aa+1
  250. if aa>20
  251. set colo to gr+/n,w/b+
  252. exit
  253. else
  254. endif
  255. enddo
  256.  
  257. endcase
  258. enddo while a<=no_fields
  259.  
  260. Procedure Structure
  261.  
  262.  clear
  263.  store reccount() to rec1
  264.   go top
  265.  a=0
  266.  x=2
  267.  
  268.  do while a<=rec1 .and. x<=23
  269.  a=a+1
  270.  x=x+1
  271.  if rec1>20
  272.     @ 1,0 say "There are too many fields in your database file to display"
  273.     @ 2,0 say "on the screen. I'll print them out for you."
  274.     @ 3,0 say "Please be sure that the printer is ready."
  275.     wait
  276.     set prin on
  277.     rn=0
  278.  
  279.     do while .not.eof()
  280.        rn=rn+1
  281.        ?        "Name of Field          Length of Field     Type of Field      Decimal Places"
  282.        ? space(5)+ltrim(str(rn))+space(3)+field_name+space(3)+field_len+space(3)+field_type+space(3)+field_dec
  283.        skip
  284.     enddo
  285.     clear
  286.     yesno=space(1)
  287.     @ 1,0 say "Are all fields correct? (Y/N)" get yesno picture "!"
  288.     read
  289.     if yesno="N"
  290.     do while yesno="N"
  291.  
  292.     which_one=0
  293.     @ 2,0 say "Which field is incorrect?" get which_one range 1,rec1
  294.     read
  295.     go which_one
  296.     clea
  297.     @ 1,0 say "Name of Field"
  298.     @ 1,15 say "Length of Field"
  299.     @ 1,35 say "Type of Field"
  300.     @ 1,55 say "Decimal Places"
  301.     @ 2,0 get field_name
  302.     @ 2,15 get field_len
  303.     @ 2,35 get field_type picture "!"
  304.     if field_type="C"
  305.     @ 2,36 say "(haracter)"
  306.     endif
  307.     if field_type="N"
  308.     @ 2,36 say "(umeric)"
  309.     endif
  310.     if field_type="L"
  311.     @ 2,36 say "(ogical)"
  312.     endif
  313.     if field_type="M"
  314.     @ 2,36 say "(emo)"
  315.     endif
  316.     if field_type="D"
  317.     @ 2,36 say"(ate)"
  318.     endif
  319.     @ 3,15 say "Options:"
  320.     @ 4,15 say "C(haract.)-1 to 254"
  321.     @ 5,15 say "N(umeric)-1 to 19"
  322.     @ 3,35 say "Options:"
  323.     @ 4,35 say "C(haracter)"
  324.     @ 5,35 say "N(umeric)"
  325.     @ 6,35 say "D(ate)"
  326.     @ 7,35 say "L(ogical)"
  327.     @ 8,35 say "M(emo)"
  328.     @ 2,55 get field_dec
  329.     @ 3,55 say "Options:"
  330.     @ 4,55 say "1 to 16 spaces"
  331.     read
  332.  
  333.    if field_type="N" .and. field_len>19
  334.     do while field_len>19
  335.      ? chr(7)
  336.      @ 4,15 clear
  337.      @ 5,15 clea
  338.      set colo to r+/n,w/r
  339.      @ 4,15 say "Length of Field must be less than or equal"
  340.      @ 5,15 say "to 19 if type of field is N(umeric)!"
  341.      @ 2,15 get field_len
  342.      read
  343.     enddo
  344.    endif field_type="N" .and. field_len>19
  345.  
  346.    if field_type="C" .and. field_len>254
  347.     do while field_len>254
  348.      ? chr(7)
  349.      @ 4,15 clear
  350.      @ 5,15 clear
  351.      set colo to r+/n,w/r
  352.      @ 4,15 say "Length of Field must be less than or equal"
  353.      @ 5,15 say "to 254 if Type of Field is C(haracter)!"
  354.      @ 2,15 get field_len
  355.      read
  356.     enddo while field_len>254
  357.   endif field_type="C" .and. field_len>254
  358.  
  359.   if field_type="D"
  360.    repl field_len with 8
  361.   endif field_type="D"
  362.  
  363.   if field_type="L"
  364.    repl field_len with 1
  365.   endif field_type="L"
  366.  
  367.   if field_type="M"
  368.    repl field_len with 10
  369.   endif field_type="M"
  370.  
  371.   @ 24,0 say "Is this structure correct? (Y/N)" get yesno picture "!"
  372.   read
  373.   if yesno="Y"
  374.    do exit with dbfname
  375.   endif
  376.  
  377.   if yesno="N"
  378.   loop
  379.   endif
  380.  
  381.  enddo while yesno="N"
  382.  endif yesno="N"
  383.  
  384.  
  385. else
  386. endif rec1>20
  387.  
  388.  @ 1,0 say "Here is the completed structure of the "+dbfname ;
  389. +" database file."
  390.  set colo to g+/n
  391.  @ 2,0 say "Name of Field"
  392.  @ 2,15 say "Length of Field"
  393.  @ 2,35 say "Type of Field"
  394.  @ 2,55 say "Decimal Places"
  395.  
  396. set colo to gr+/n,w/b+
  397.  @ x,0 say ltrim(str(a))+". "+field_name
  398.  @ x,15 say field_len
  399.  
  400.  if field_type="C"
  401.  @ x,35 say "Character"
  402.  endif field_type="C"
  403.  
  404.  
  405.  if field_type="N"
  406.  @ x,35 say "Numeric"
  407.  @ x,55 say field_dec
  408.  endif field_type="N"
  409.  
  410.  if field_type="D"
  411.  @ x,35 say "Date"
  412.  endif field_type="D"
  413.  
  414.  if field_type="L"
  415.  @ x,35 say "Logical"
  416.  endif field_type="L"
  417.  
  418.  if field_type="M"
  419.  @ x,35 say "Memo"
  420.  endif field_type="M"
  421.  
  422.  if a=rec1
  423.  exit
  424.  else
  425.  skip
  426.  endif a=rec1
  427.  
  428.  
  429. enddo while a<=rec1 .and. x<=23
  430.  
  431.  
  432. thirdans=space(1)
  433. @ 24,0 say "Is this structure correct? (Y or N)" get thirdans picture "!"
  434. read
  435.  
  436. if thirdans="Y"
  437.    return
  438. endif
  439.  
  440. if thirdans="N"
  441.  
  442. do while thirdans="N"
  443.  
  444. which_one=space(3)
  445. @ 24,0 clear
  446. @ 24,0 say "Which number is incorrect?" get which_one
  447. read
  448. a=val(which_one)
  449. go a
  450. clea
  451. @ 1,0 say "Name of Field"
  452. @ 1,15 say "Length of Field"
  453. @ 1,35 say "Type of Field"
  454. @ 1,55 say "Decimal Places"
  455. @ 2,0 get field_name
  456. @ 2,15 get field_len
  457. @ 2,35 get field_type picture "!"
  458.   if field_type="C"
  459.   @ 2,36 say "(haracter)"
  460.   endif
  461.   if field_type="N"
  462.   @ 2,36 say "(umeric)"
  463.   endif
  464.   if field_type="L"
  465.   @ 2,36 say "(ogical)"
  466.   endif
  467.   if field_type="M"
  468.   @ 2,36 say "(emo)"
  469.   endif
  470.   if field_type="D"
  471.   @ 2,36 say"(ate)"
  472.   endif
  473. @ 3,15 say "Options:"
  474. @ 4,15 say "C(haract.)-1 to 254"
  475. @ 5,15 say "N(umeric)-1 to 19"
  476. @ 3,35 say "Options:"
  477. @ 4,35 say "C(haracter)"
  478. @ 5,35 say "N(umeric)"
  479. @ 6,35 say "D(ate)"
  480. @ 7,35 say "L(ogical)"
  481. @ 8,35 say "M(emo)"
  482. @ 2,55 get field_dec
  483. @ 3,55 say "Options:"
  484. @ 4,55 say "1 to 16 spaces"
  485. read
  486.  
  487. if field_type="N" .and. field_len>19
  488.    do while field_len>19
  489.    ? chr(7)
  490.    @ 4,15 clear
  491.    @ 5,15 clea
  492.    set colo to r+/n,w/r
  493.    @ 4,15 say "Length of Field must be less than or equal"
  494.    @ 5,15 say "to 19 if type of field is N(umeric)!"
  495.    @ 2,15 get field_len
  496.    read
  497.    enddo
  498. endif field_type="C" .and. field_len>254
  499.  
  500. if field_type="C" .and. field_len>254
  501.    do while field_len>254
  502.    ? chr(7)
  503.    @ 4,15 clear
  504.    @ 5,15 clear
  505.    set colo to r+/n,w/r
  506.    @ 4,15 say "Length of Field must be less than or equal"
  507.    @ 5,15 say "to 254 if Type of Field is C(haracter)!"
  508.    @ 2,15 get field_len
  509.    read
  510.    enddo while field_len>254
  511. endif field_type="C" .and. field_len>254
  512.  
  513. if field_type="D"
  514.    repl field_len with 8
  515. endif field_type="D"
  516.  
  517. if field_type="L"
  518.    repl field_len with 1
  519. endif field_type="L"
  520.  
  521. if field_type="M"
  522.    repl field_len with 10
  523. endif field_type="M"
  524.  
  525. clea
  526. go top
  527.  
  528.  
  529. @ 1,0 say "Here is the completed structure of the "+dbfname ;
  530. +" database file."
  531. set colo to gr+/n,w/b
  532.  
  533. @ 2,0 say "Name of Field"
  534. @ 2,15 say "Length of Field"
  535. @ 2,35 say "Type of Field"
  536. @ 2,55 say "Decimal Places"
  537.  
  538. a=0
  539. x=2
  540. rec1=reccount()
  541.  
  542. do while a<=rec1 .and. x<=23
  543.  
  544.  a=a+1
  545.  x=x+1
  546.  @ x,0 say ltrim(str(a))+". "+field_name
  547.  @ x,15 say field_len
  548.   if field_type="C"
  549.    @ x,35 say "Character"
  550.   endif
  551.   if field_type="N"
  552.    @ x,35 say "Numeric"
  553.    @ x,55 say field_dec
  554.   endif
  555.   if field_type="D"
  556.    @ x,35 say "Date"
  557.   endif
  558.   if field_type="L"
  559.    @ x,35 say "Logical"
  560.   endif
  561.   if field_type="M"
  562.    @ x,35 say "Memo"
  563.   endif
  564. skip
  565. if eof()
  566. exit
  567. else
  568. endif
  569. enddo while a<=rec1 .and. x<=23
  570.  
  571. thirdans=space(1)
  572. @ 24,0 say "Are all fields correct now? (Y/N)" get thirdans picture "!"
  573. read
  574.  if upper(thirdans)="N"
  575.   loop
  576.  else
  577.  exit
  578.  endif
  579. enddo while thirdans="N"
  580. return
  581.  
  582.  
  583. Procedure Exit
  584. Parameters dbfname
  585.  
  586. @ 23,0 clea to 24,79
  587. set colo to r+/n
  588. @ 24,0 say "Just a moment....."
  589. create &dbfname from skeleton
  590. clos data
  591.  
  592. clear
  593. set colo to bg+/n
  594. @ 1,0 say "Place a diskette in drive A."
  595. @ 3,0 say "I'll make a copy of your database file."
  596. wait "Press any key when you're ready...."
  597. newname=trim(dbfname)
  598. run copy c:\dbase\&newname..dbf a:/v
  599. run del c:\dbase\&newname..dbf
  600.  
  601. clear
  602. set defa to e
  603. set colo to g+/n
  604. @ 1,0 say "Copy has been completed and verified."
  605. wait "Press any key to return to dGENIUS."
  606. return
  607.  
  608.  
  609.