home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / chap24 / music / search.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  5KB  |  187 lines

  1. unit Search;
  2.  
  3. { Program copyright (c) 1995 by Charles Calvert }
  4. { Project Name: MUSIC }
  5.  
  6. {
  7. The local interbase provides what pdox/db files can't:
  8.  
  9. 1)  Full native ANSI SQL support
  10. 2)  Fast joins
  11. 3)  Referential integrity
  12. 4)  Seamless scalability/Interoperability with larger servers
  13. 5)  Integrated data dictionary
  14. 6)  Multiversioning
  15. 7)  Stored procedures
  16. 8)  Multidimensional arrays
  17. 9)  Unlimited blob sizes
  18. 10)  Descending indices
  19. 11)  High-performance optimizer with sparse bitmap technology
  20. 12)  Transaction support with immediate rollback/commit
  21. }
  22.  
  23. interface
  24.  
  25. uses
  26.   WinTypes, WinProcs, Classes,
  27.   Graphics, Forms, Controls,
  28.   Buttons, StdCtrls, DB,
  29.   DBTables, Grids, DBGrids,
  30.   ExtCtrls, SrchStr, Messages,
  31.   Editor;
  32.  
  33. const
  34.   wm_Switch = wm_User + 0;
  35.  
  36. type
  37.   TNextMove = (nmShowSearch, nmShowEdit, nmClose);
  38.  
  39.   TSearcher = class(TForm)
  40.     Bevel1: TBevel;
  41.     DataSource1: TDataSource;
  42.     DBGrid1: TDBGrid;
  43.     Query1: TQuery;
  44.     SubCat: TGroupBox;
  45.     rbJJ: TRadioButton;
  46.     rbRR: TRadioButton;
  47.     rbSS: TRadioButton;
  48.     rbPC: TRadioButton;
  49.     rbCS: TRadioButton;
  50.     rbFJ: TRadioButton;
  51.     rbCM: TRadioButton;
  52.     rbFB: TRadioButton;
  53.     rbNA: TRadioButton;
  54.     rbRB: TRadioButton;
  55.     MainCat: TGroupBox;
  56.     rbJ: TRadioButton;
  57.     rbP: TRadioButton;
  58.     rbR: TRadioButton;
  59.     rbF: TRadioButton;
  60.     rbC: TRadioButton;
  61.     rbG: TRadioButton;
  62.     rbE: TRadioButton;
  63.     rbB: TRadioButton;
  64.     Ok: TBitBtn;
  65.     BSearch: TBitBtn;
  66.     Switch: TBitBtn;
  67.     NSearch: TBitBtn;
  68.     CSearch: TBitBtn;
  69.     procedure rbJClick(Sender: TObject);
  70.     procedure rbJJClick(Sender: TObject);
  71.     procedure BSearchClick(Sender: TObject);
  72.     procedure FormCreate(Sender: TObject);
  73.     procedure NSearchClick(Sender: TObject);
  74.     procedure SwitchClick(Sender: TObject);
  75.     procedure CSearchClick(Sender: TObject);
  76.   private
  77.     FMusicType: String;
  78.     FSubType: String;
  79.     procedure SetQueryType(QType: TQueryType);
  80.     procedure wmSwitch(var Msg: TMessage); message wm_Switch;
  81.   end;
  82.  
  83. var
  84.   Searcher: TSearcher;
  85.  
  86. implementation
  87.  
  88. {$R *.DFM}
  89.  
  90. procedure TSearcher.rbJClick(Sender: TObject);
  91. begin
  92.   if Sender = rbJ then FMusicType := 'J'
  93.   else if Sender = rbP then FMusicType := 'P'
  94.   else if Sender = rbR then FMusicType := 'R'
  95.   else if Sender = rbF then FMusicType := 'F'
  96.   else if Sender = rbC then FMusicType := 'C'
  97.   else if Sender = rbE then FMusicType := 'E'
  98.   else if Sender = rbB then FMusicType := 'B'
  99.   else if Sender = rbG then FMusicType := 'G';
  100. end;
  101.  
  102. procedure TSearcher.rbJJClick(Sender: TObject);
  103. begin
  104.   if Sender = rbJJ then FSubType := 'JJ'
  105.   else if Sender = rbRR then FSubType := 'RR'
  106.   else if Sender = rbSS then FSubType := 'SS'
  107.   else if Sender = rbPC then FSubType := 'PC'
  108.   else if Sender = rbCS then FSubType := 'CS'
  109.   else if Sender = rbFJ then FSubType := 'FJ'
  110.   else if Sender = rbCM then FSubType := 'CM'
  111.   else if Sender = rbNA then FSubType := 'NA'
  112.   else if Sender = rbRB then FSubType := 'RB'
  113.   else if Sender = rbFB then FSubType := 'FB';
  114. end;
  115.  
  116. procedure TSearcher.SetQueryType(QType: TQueryType);
  117. var
  118.   S: string;
  119. begin
  120.   case QType of
  121.     qtFirst: S := 'select * from MusicList where First like :First';
  122.     qtLastGroup: S := 'select * from MusicList where LastGroup like :LastGroup';
  123.     qtAlbum: S := 'select * from MusicList where Album like :Album';
  124.     qtStockNo: S := 'select * from MusicList where StockNo like :StockNo';
  125.   end;
  126.   Query1.SQL.Clear;
  127.   Query1.SQL.Add(S);
  128. end;
  129.  
  130. procedure TSearcher.BSearchClick(Sender: TObject);
  131. begin
  132.   Query1.Close;
  133.   SetQueryType(qtStockNo);
  134.   Query1.Params[0].AsString := FMusicType + '-' + FSubType + '%';
  135.   Query1.Open;
  136. end;
  137.  
  138. procedure TSearcher.FormCreate(Sender: TObject);
  139. begin
  140.   rbJ.Checked := True;
  141.   rbJJ.Checked := True;
  142.   FMusicType := 'J';
  143.   FSubType := 'JJ';
  144. end;
  145.  
  146. procedure TSearcher.NSearchClick(Sender: TObject);
  147. var
  148.   S: string;
  149.   QType: TQueryType;
  150. begin
  151.   if SearchStr.GetSearchStr(QType, S) then begin
  152.     Query1.Close;
  153.     SetQueryType(QType);
  154.     Query1.Params[0].AsString := S + '%';
  155.     Query1.Open;
  156.   end;
  157. end;
  158.  
  159. procedure TSearcher.SwitchClick(Sender: TObject);
  160. begin
  161.   Query1.Close;
  162.   Hide;
  163.   PostMessage(Handle, wm_Switch, (Sender as TBitBtn).Tag, 0);
  164. end;
  165.  
  166. procedure TSearcher.wmSwitch(var Msg: TMessage);
  167. begin
  168.   case TNextMove(Msg.WParam) of
  169.     nmShowSearch: Searcher.Show;
  170.     nmShowEdit: begin
  171.       EditMusic.Table1.Open;
  172.       EditMusic.Show;
  173.     end;
  174.     nmClose: Searcher.Close;
  175.   end;
  176. end;
  177.  
  178. procedure TSearcher.CSearchClick(Sender: TObject);
  179. begin
  180.   Query1.Close;
  181.   SetQueryType(qtStockNo);
  182.   Query1.Params[0].AsString := FMusicType + '%';
  183.   Query1.Open;
  184. end;
  185.  
  186. end.
  187.