home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / COMPUSCI / TOT11.ZIP / TOTDEM11.ZIP / DEMIO21.PAS < prev    next >
Pascal/Delphi Source File  |  1991-02-11  |  15KB  |  513 lines

  1. program DemoIOTwentyOne;
  2. {demIO21 - This example illustrates how you could use the
  3.  Toolkit to develop a database application}
  4.  
  5. Uses DOS, CRT,
  6.      totFAST, totREAL, totIO1, totIO2, totIO3, totSTR, totDATE, totMSG;
  7.  
  8. Const
  9.    MsgX=1;
  10.    MsgY=25;
  11. Type                   
  12. Comments = array[1..7] of string[50];
  13.  
  14. RecordInfo = record
  15.    FirstLast: string[40];
  16.    Company: string[40];
  17.    Addr1: string[40];
  18.    Addr2: string[40];
  19.    City: string[25];
  20.    State: string[20];
  21.    Zip: string[9];
  22.    Country: string[30];
  23.    Tel: string[20];
  24.    OrderDate: longint;
  25.    OrderQuantity: word;
  26.    UnitPrice: extended;
  27.    Info: Comments;
  28. end;
  29.  
  30. Var
  31.   ActiveRecord: RecordInfo;
  32.   Browsing: boolean;
  33.   Totalrecords: longint;
  34.   RecordNumber:integer;
  35.   Result: tAction;
  36.   {Now the input fields}
  37.   NextBut,PrevBut,EditBut,AddBut,SaveBut, QuitBut,HelpBut: Strip3DIOOBJ;
  38.   FirstLastField,
  39.   CompanyField,
  40.   Addr1Field,
  41.   Addr2Field,
  42.   CityField,
  43.   StateField,
  44.   CountryField: StringIOOBJ;
  45.   ZipField,
  46.   TelField: PictureIOOBJ;
  47.   OrderDateField: DateIOOBJ;
  48.   OrderQuantityField: IntIOOBJ;
  49.   UnitPriceField: FixedRealIOOBJ;
  50.   InfoField: WWArrayIOOBJ;
  51.   Controlkeys: ControlKeysIOOBJ;
  52.   Manager: FormOBJ;
  53.  
  54. {|||||||||||||||||||||||||||||||||||||||||||||||||||||||||}
  55. {                                                         }
  56. {     D a t a b a s e   A c c e s s   R o u t i n e s     }
  57. {                                                         }
  58. {|||||||||||||||||||||||||||||||||||||||||||||||||||||||||}
  59.  
  60. function LoadRecord(RecNo:longint; var Rec:RecordInfo):boolean;
  61. {This function would be responsible for getting the information from
  62.  the data base file, and might return a boolean to indicate if the 
  63.  operation was a success. 
  64.  
  65.  In this template, the function simply loads TechnoJock's details
  66.  in the record.}
  67. begin
  68.    fillchar(Rec,sizeof(Rec),#0);
  69.    with Rec do
  70.    case RecNo of
  71.       1: begin
  72.          FirstLast :=  'Bob Ainsbury';
  73.          Company := 'TechnoJock Sofware, Inc.';
  74.          Addr1 := 'PO Box 820927';
  75.          Addr2 := '';
  76.          City :=  'Houston';
  77.          State := 'TX';
  78.          Zip := '77282';
  79.          Country := '';
  80.          Tel := '7134936354';
  81.          OrderDate := GregtoJul(2,11,1991);
  82.          OrderQuantity := 7;
  83.          UnitPrice := 89.95;
  84.          Info[1] := 'Just a few comments about the good balance ';
  85.          Info[2] := 'between ease of use and power. He intends to ';
  86.          Info[3] := 'use the Toolkit to build an employee system. ';
  87.       end;
  88.       2: begin
  89.          FirstLast :=  'Joe Cholesterol';
  90.          Company := 'The Heffer Restaurant';
  91.          Addr1 := '1101 Old Spanish Trail';
  92.          Addr2 := 'The Heights';
  93.          City :=  'El Paso';
  94.          State := 'TX';
  95.          Zip := '73008';
  96.          Country := '';
  97.          Tel := '6884946324';
  98.          OrderDate := GregtoJul(2,13,1991);
  99.          OrderQuantity := 1;
  100.          UnitPrice := 89.95;
  101.          Info[1] := 'Joe said he wants to use the Toolkit to keep ';
  102.          Info[2] := 'track of his beef in the meat lockers. ';
  103.       end;
  104.       3: begin
  105.          FirstLast :=  'Mr T Vision';
  106.          Company := 'Borland International';
  107.          Addr1 := '1800 Green Hills Road';
  108.          Addr2 := 'PO Box 660001';
  109.          City :=  'Scotts Valley';
  110.          State := 'CA';
  111.          Zip := '950670001';
  112.          Country := '';
  113.          OrderDate := GregtoJul(2,20,1991);
  114.          OrderQuantity := 11;
  115.          UnitPrice := 89.95;
  116.          Info[1] := 'No comments';
  117.       end;
  118.    end; {case}
  119.    LoadRecord := true;
  120. end; {LoadRecord}
  121.  
  122. function AddRecord(Rec:RecordInfo): boolean;
  123. {Saves a new record to the database, and returns true
  124.  if successful. In this template, there is no disk access.}
  125. begin
  126.    {your record saving code would go here}
  127.    AddRecord := true;
  128. end; {AddRecord}
  129.   
  130. function ModifyRecord(RecNo:longint; Rec:RecordInfo):boolean;
  131. {Changes the value of a record in the database, and returns true
  132.  if successful. In this template, there is no disk access.}
  133. begin
  134.    ModifyRecord := true;
  135. end; {ModifyRecord}
  136. {|||||||||||||||||||||||||||||||||||||||||||||||||}
  137. {                                                 }
  138. {     S c r e e n   F o r m   R o u t i n e s     }
  139. {                                                 }
  140. {|||||||||||||||||||||||||||||||||||||||||||||||||}
  141. procedure RecordToForm;
  142. {Updates the form objects with the contents of the record - a more efficient
  143.  way would be to use MOVE, but let's not get too fancy for the demo}
  144. begin
  145.    with ActiveRecord do
  146.    begin
  147.       FirstLastField.SetValue(FirstLast);
  148.       CompanyField.SetValue(Company);
  149.       Addr1Field.SetValue(Addr1);
  150.       Addr2Field.SetValue(Addr2);
  151.       CityField.SetValue(City);
  152.       StateField.SetValue(State);
  153.       CountryField.SetValue(Country);
  154.       ZipField.SetValue(Zip);
  155.       TelField.SetValue(Tel);
  156.       OrderDateField.SetValue(OrderDate);
  157.       OrderQuantityField.SetValue(OrderQuantity);
  158.       UnitPriceField.SetValue(UnitPrice);
  159.       InfoField.AssignList(Info,7,50);
  160.       InfoField.WrapFull; 
  161.    end;
  162. end; {RecordToForm}
  163.  
  164. procedure FormToRecord;
  165. {Updates the record with the values entered into the form}
  166. begin
  167.    with ActiveRecord do
  168.    begin
  169.       Firstlast := FirstLastField.GetValue;
  170.       Company := CompanyField.GetValue;
  171.       Addr1 := Addr1Field.GetValue;
  172.       Addr2 := Addr2Field.GetValue;
  173.       City := CityField.GetValue;
  174.       State := StateField.GetValue;
  175.       Country := CountryField.GetValue;
  176.       Zip := ZipField.GetValue;
  177.       Tel := TelField.GetValue;
  178.       OrderDate := OrderDateField.GetValue;
  179.       OrderQuantity := OrderQuantityField.GetValue;
  180.       UnitPrice := UnitPriceField.GetValue;
  181.    end;
  182. end; {FormToRecord}
  183.  
  184. procedure InitFields;
  185. {Initializes all of the field objects}
  186. begin
  187.   with NextBut do
  188.   begin
  189.      Init(69,5,'  ~N~ext  ',Stop1);
  190.      SetID(100);
  191.      SetHotkey(305);
  192.      SetMessage(MsgX,MsgY,'View the next record in the database');
  193.   end;
  194.   with PrevBut do
  195.   begin
  196.      Init(69,7,'  ~P~rev  ',Stop2);
  197.      SetID(101);
  198.      SetHotkey(281);
  199.      SetMessage(MsgX,MsgY,'View the previous record in the database');
  200.   end;
  201.   with EditBut do
  202.   begin
  203.      Init(69,9,'  ~E~dit  ',Stop3);
  204.      SetID(102);
  205.      SetHotkey(274);
  206.      SetMessage(MsgX,MsgY,'Modify the contents of this record');
  207.   end;
  208.   with AddBut do
  209.   begin
  210.      Init(69,11,'  ~A~dd   ',Stop4);
  211.      SetID(103);
  212.      SetHotkey(286);
  213.      SetMessage(MsgX,MsgY,'Add a new record to the database');
  214.   end;
  215.   with SaveBut do
  216.   begin
  217.      Init(69,13,'  ~S~ave  ',Stop5);
  218.      SetID(104);
  219.      SetHotkey(287);
  220.      SetMessage(MsgX,MsgY,'Save the new record to the database');
  221.   end;
  222.   with QuitBut do
  223.   begin
  224.      Init(69,15,'  ~Q~uit  ',Finished);
  225.      SetID(105);
  226.      SetHotkey(272);
  227.      SetMessage(MsgX,MsgY,'Stop this nonsense and go home');
  228.   end;
  229.   with HelpBut do
  230.   begin
  231.      Init(69,17,'  ~H~elp  ',Help);
  232.      SetID(HelpID);
  233.      SetHotkey(291);
  234.      SetMessage(MsgX,MsgY,'Seek further guidance from the machine!');
  235.   end;
  236.   with FirstLastField do
  237.   begin
  238.      Init(20,4,40);
  239.      SetID(1);
  240.      SetForceCase(true);
  241.      SetCase(Upper);
  242.      SetLabel('Customer Name');
  243.      SetMessage(MsgX,MsgY,'Name in FIRST M. LAST format');
  244.   end;
  245.   with CompanyField do
  246.   begin
  247.      Init(20,5,40);
  248.      SetID(2);
  249.      SetLabel('Company');
  250.      SetMessage(MsgX,MsgY,'Enter the FULL company name');
  251.   end;
  252.   with Addr1Field do
  253.   begin
  254.      Init(20,6,40);
  255.      SetID(3);
  256.      SetLabel('Address');
  257.      SetMessage(MsgX,MsgY,'Street address only no PO BOXES!');
  258.   end;
  259.   with Addr2Field do
  260.   begin
  261.      Init(20,7,40);
  262.      SetID(4);
  263.      SetMessage(MsgX,MsgY,'Add second line if necessary.');
  264.   end;
  265.   with CityField do
  266.   begin
  267.      Init(20,8,25);
  268.      SetID(5);
  269.      SetLabel('City');
  270.      SetMessage(MsgX,MsgY,'Enter the City name');
  271.   end;
  272.   with StateField do
  273.   begin
  274.      Init(20,9,20);
  275.      SetID(6);
  276.      SetForceCase(true);
  277.      SetCase(Upper);
  278.      SetLabel('State');
  279.      SetMessage(MsgX,MsgY,'Enter the State, Province