home *** CD-ROM | disk | FTP | other *** search
/ PC Format Collection 48 / SENT14D.ISO / tech / delphi / disk15 / calcflds.pak / MAIN.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1995-08-24  |  3.3 KB  |  125 lines

  1. { This demonstrates the use of calculated fields and
  2.   linked tables. Note that the creation order of table
  3.   components is important. In this demo, each table opens and
  4.   closes the tables it depends on in its BeforeOpen and AfterClose events
  5.   (respectively).}
  6. unit Main;
  7.  
  8. interface
  9.  
  10. uses
  11.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  12.   Forms, Dialogs, DBTables, DB, Grids, DBGrids;
  13.  
  14. type
  15.   TForm1 = class(TForm)
  16.     OrdersGrid: TDBGrid;
  17.     ItemsGrid: TDBGrid;
  18.     Orders: TTable;
  19.     Items: TTable;
  20.     OrdersSource: TDataSource;
  21.     ItemsSource: TDataSource;
  22.     OrdersOrderNo: TFloatField;
  23.     OrdersCustNo: TFloatField;
  24.     OrdersAmountPaid: TCurrencyField;
  25.     OrdersCompany: TStringField;
  26.     ItemsItemNo: TFloatField;
  27.     ItemsOrderNo: TFloatField;
  28.     ItemsPartNo: TFloatField;
  29.     ItemsQty: TIntegerField;
  30.     ItemsDiscount: TFloatField;
  31.     ItemsExtPrice: TCurrencyField;
  32.     Cust: TTable;
  33.     CustCustNo: TFloatField;
  34.     CustCompany: TStringField;
  35.     OrdersSaleDate: TDateTimeField;
  36.     ItemsSellPrice: TCurrencyField;
  37.     ItemsDescription: TStringField;
  38.     Parts: TTable;
  39.     PartsPartNo: TFloatField;
  40.     PartsVendorNo: TFloatField;
  41.     PartsDescription: TStringField;
  42.     PartsOnHand: TFloatField;
  43.     PartsOnOrder: TFloatField;
  44.     PartsCost: TCurrencyField;
  45.     PartsListPrice: TCurrencyField;
  46.     procedure OrdersCalcFields(DataSet: TDataSet);
  47.     procedure ItemsCalcFields(DataSet: TDataSet);
  48.     procedure FormCreate(Sender: TObject);
  49.     procedure FormDestroy(Sender: TObject);
  50.     procedure OrdersAfterClose(DataSet: TDataset);
  51.     procedure OrdersBeforeOpen(DataSet: TDataset);
  52.     procedure ItemsAfterClose(DataSet: TDataset);
  53.     procedure ItemsBeforeOpen(DataSet: TDataset);
  54.   private
  55.     { Private declarations }
  56.   public
  57.     { Public declarations }
  58.   end;
  59.  
  60. var
  61.   Form1: TForm1;
  62.  
  63. implementation
  64.  
  65. {$R *.DFM}
  66.  
  67. { This is called whenever an order's row changes or
  68.   a new item is fetched into local buffers. It is only
  69.   valid to change a column in this table if its
  70.   Calculated property is True. }
  71. procedure TForm1.OrdersCalcFields(DataSet: TDataSet);
  72. begin
  73.   if Cust.FindKey([OrdersCustNo]) then
  74.     OrdersCompany.Value := CustCompany.Value;
  75. end;
  76.  
  77. { This is called whenever an item's row changes or
  78.   a new item is fetched into local buffers. It is only
  79.   valid to change a column in this table if its
  80.   Calculated property is True. }
  81. procedure TForm1.ItemsCalcFields(DataSet: TDataSet);
  82. begin
  83.   if Parts.FindKey ([ItemsPartNo]) then 
  84.   begin
  85.     ItemsExtPrice.Value := ItemsQty.Value *
  86.       PartsListPrice.Value * (100 - ItemsDiscount.Value) / 100;
  87.     ItemsSellPrice.Value := PartsListPrice.Value;
  88.     ItemsDescription.Value := PartsDescription.Value;
  89.   end;
  90. end;
  91.  
  92. procedure TForm1.FormCreate(Sender: TObject);
  93. begin
  94.   Orders.Open;
  95. end;
  96.  
  97. procedure TForm1.FormDestroy(Sender: TObject);
  98. begin
  99.   Orders.Close;
  100. end;
  101.  
  102. procedure TForm1.OrdersAfterClose(DataSet: TDataset);
  103. begin
  104.   Cust.Close;
  105.   Items.Close;
  106. end;
  107.  
  108. procedure TForm1.OrdersBeforeOpen(DataSet: TDataset);
  109. begin
  110.   Cust.Open;
  111.   Items.Open;
  112. end;
  113.  
  114. procedure TForm1.ItemsAfterClose(DataSet: TDataset);
  115. begin
  116.   Parts.Close;
  117. end;
  118.  
  119. procedure TForm1.ItemsBeforeOpen(DataSet: TDataset);
  120. begin
  121.   Parts.Open;
  122. end;
  123.  
  124. end.
  125.