home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / CUSTVIEW.PAS < prev    next >
Pascal/Delphi Source File  |  1996-05-08  |  4KB  |  140 lines

  1. unit CustView;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls, StdCtrls, Mask, Buttons,
  8.   Menus;
  9.  
  10. type
  11.   TfmCustView = class(TForm)
  12.     StatusBar1: TStatusBar;
  13.     DBGrid2: TDBGrid;
  14.     Label3: TLabel;
  15.     MainMenu1: TMainMenu;
  16.     About1: TMenuItem;
  17.     DBNavigator1: TDBNavigator;
  18.     Label2: TLabel;
  19.     rgDataSet: TRadioGroup;
  20.     SpeedButton1: TSpeedButton;
  21.     DBGrid1: TDBGrid;
  22.     GroupBox1: TGroupBox;
  23.     cbFilterOrders: TCheckBox;
  24.     Label1: TLabel;
  25.     Edit1: TEdit;
  26.     procedure rgDataSetClick(Sender: TObject);
  27.     procedure SpeedButton1Click(Sender: TObject);
  28.     procedure cbFilterOrdersClick(Sender: TObject);
  29.     procedure About1Click(Sender: TObject);
  30.     procedure Edit1Change(Sender: TObject);
  31.     procedure DBGrid1Enter(Sender: TObject);
  32.     procedure DBGrid2Enter(Sender: TObject);
  33.   end;
  34.  
  35. var
  36.   fmCustView: TfmCustView;
  37.  
  38. implementation
  39.  
  40. uses DM, Filter1, About;
  41.  
  42. {$R *.DFM}
  43.  
  44. { Change the Dataset for the Customer from Query to Table,
  45.   or Table to Query. If a filter is current, set that filter
  46.   to the just-changed Dataset. }
  47. procedure TfmCustView.rgDataSetClick(Sender: TObject);
  48. var
  49.   st: string;
  50. begin
  51.   with DM1, CustomerSource do
  52.   begin
  53.     { Is the other Dataset Filtered? Get its filter. }
  54.     if Dataset.Filtered then
  55.       st := Dataset.Filter;
  56.     case rgDataset.ItemIndex of
  57.       0: if Dataset <> SQLCustomer then
  58.            Dataset := SQLCustomer;
  59.       1: if CustomerSource.Dataset <> Customer then
  60.            Dataset := Customer;
  61.     end;
  62.  
  63.     { Set the Filter of the current Dataset. }
  64.     if st <> '' then
  65.     begin
  66.       Dataset.Filter := st;
  67.       Dataset.Filtered := True;
  68.     end;
  69.   end;
  70. end;
  71.  
  72. procedure TfmCustView.SpeedButton1Click(Sender: TObject);
  73. begin
  74.   fmFilterFrm.Show;
  75. end;
  76.  
  77. procedure TfmCustView.cbFilterOrdersClick(Sender: TObject);
  78. begin
  79.   { DM1.SQLOrders.Filtered will be true if the box is checked, false otherwise. }
  80.   DM1.SQLOrders.Filtered := cbFilterOrders.Checked;
  81.  
  82.   { If the number changed while the box is unchecked, DM1.OrdersFilterAmount
  83.     won't know about it.  The Edit1Change procedure will set the value and
  84.     apply the filter.}
  85.   if cbFilterOrders.Checked then
  86.     Edit1Change(nil); { To make sure the value is set. }
  87. end;
  88.  
  89. procedure TfmCustView.About1Click(Sender: TObject);
  90. var
  91.   fmAboutBox : TfmAboutBox;
  92. begin
  93.   fmAboutBox := TFmAboutBox.Create(Self);
  94.   fmAboutBox.ShowModal;
  95.  
  96.   { When explicitly creating any object (this includes forms -- as opposed to
  97.     letting Delphi create the form for you by putting it in the project's
  98.     Auto-create list), you must explicitly free the object when you're
  99.     done with it. This can also be done at the end of the form's close method with:
  100.     Action := caFree. }
  101.   fmAboutBox.Free;
  102. end;
  103.  
  104. procedure TfmCustView.Edit1Change(Sender: TObject);
  105. begin
  106.   { We must test of Edit1.Text not being blank, or an exception will
  107.     be raised when the user clears the contents of the Edit. }
  108.   if (cbFilterOrders.checked) and (Edit1.Text <> '') then
  109.     try
  110.       { Attempt to set the variable on DM1 that holds the filter amount. }
  111.       DM1.OrdersFilterAmount := StrToFloat(fmCustView.Edit1.Text);
  112.  
  113.       { Refreshing SQLOrders will cause DM1.SQLOrdersFilterRecord to be called
  114.         once for each orders record for the current Customer. }
  115.       DM1.SQLOrders.Refresh;
  116.  
  117.     except
  118.       on EConvertError do
  119.         { This happens before DM1.SQLOrders.refresh if the user typed in a
  120.           non-numeric value, thus preventing it from trying to use an invalid
  121.           value to filter itself, which would raise an exception once for
  122.           each record displayed.}
  123.         raise Exception.Create('Threshold Amount must be a number')
  124.     end
  125. end;
  126.  
  127. { Set the navigator to the Customer Datasource. }
  128. procedure TfmCustView.DBGrid1Enter(Sender: TObject);
  129. begin
  130.   DBNavigator1.DataSource := DBGrid1.DataSource;
  131. end;
  132.  
  133. { Set the navigator to the Orders Datasource. }
  134. procedure TfmCustView.DBGrid2Enter(Sender: TObject);
  135. begin
  136.   DBNavigator1.DataSource := DBGrid2.DataSource;
  137. end;
  138.  
  139. end.
  140.