home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / delphi / ODA10 / _SETUP.1 / Query.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-03-18  |  5.8 KB  |  225 lines

  1. unit Query;
  2.  
  3.   { General SQL query tool.
  4.     (c)1995 Opus Software GmbH }
  5.  
  6.  
  7. {==============================================================================}
  8. interface
  9. uses
  10.   SysUtils, Windows, Messages, Classes, Graphics, Controls,
  11.   StdCtrls, Forms, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls;
  12.  
  13. type
  14.   TQueryTool = class(TForm)
  15.     DataSource: TDataSource;
  16.     Query: TQuery;
  17.     Table: TTable;
  18.     Database: TDatabase;
  19.     PnlHead: TPanel;
  20.     DatasourceName: TComboBox;
  21.     Label2: TLabel;
  22.     Label1: TLabel;
  23.     PnlMid: TPanel;
  24.     Label3: TLabel;
  25.     DBNavigator: TDBNavigator;
  26.     DoQuery: TButton;
  27.     BtnFirst: TButton;
  28.     BtnLast: TButton;
  29.     TimeTaken: TEdit;
  30.     LiveQuery: TCheckBox;
  31.     BtnScan: TButton;
  32.     PnlStatus: TPanel;
  33.     PnlResult: TPanel;
  34.     DBGrid: TDBGrid;
  35.     PnlQuery: TPanel;
  36.     SqlStmt: TMemo;
  37.     ChkLogging: TCheckBox;
  38.     procedure DoQueryClick(Sender: TObject);
  39.     procedure BtnFirstClick(Sender: TObject);
  40.     procedure BtnLastClick(Sender: TObject);
  41.     procedure FormCreate(Sender: TObject);
  42.     procedure BtnScanClick(Sender: TObject);
  43.     procedure ChkLoggingClick(Sender: TObject);
  44.     procedure DataSourceStateChange(Sender: TObject);
  45.   public
  46.     procedure DoHint(Sender: TObject);
  47.   end;
  48.  
  49. var
  50.   QueryTool: TQueryTool;
  51.  
  52.  
  53. {==============================================================================}
  54. implementation
  55. uses
  56.   Dialogs, IniFiles, Param,
  57.   BDE;
  58.  
  59. {$R *.DFM}
  60.  
  61.  
  62. {------------------------------------------------ timer utilities }
  63. var
  64.   Stamp: longint;
  65.  
  66. procedure StartTimer;
  67.   begin
  68.     Stamp:= GetTickCount;
  69.     QueryTool.TimeTaken.Text:= '';
  70.   end {StartTimer};
  71.  
  72. procedure ShowTimer;
  73.   var
  74.     Now: longint;
  75.   begin
  76.     Now:= GetTickCount;
  77.     with QueryTool.TimeTaken do begin
  78.       if Text <> '' then Text:= Text + ', ';
  79.       Text:= Text + IntToStr( Now - Stamp ) + ' ms';
  80.     end;
  81.     Stamp:= Now;
  82.   end {ShowTimer};
  83.  
  84.  
  85. {------------------------------------------------ TQueryTool }
  86.  
  87. procedure TQueryTool.FormCreate(Sender: TObject);
  88.   begin
  89.     Application.OnHint:= DoHint;
  90.     Session.GetAliasNames( DatasourceName.Items );
  91.   end {FormCreate};
  92.  
  93. procedure TQueryTool.DoHint( Sender: TObject );
  94.   begin
  95.     PnlStatus.Caption:= '  ' + Application.Hint;
  96.   end {DoHint};
  97.  
  98.  
  99. procedure TQueryTool.DoQueryClick(Sender: TObject);
  100.  
  101.   function AskParams{}: boolean;
  102.     const
  103.       Map: array [TFieldType] of string[10]
  104.            = ('unknown', 'string', 'small', 'integer', 'word',
  105.               'boolean', 'float', 'currency', 'bcd', 'date', 'time',
  106.               'datetime', 'bytes', 'varbytes', 'autoinc', 'blob', 'memo',
  107.               'graphic', 'fmtmemo', 'pdoxole', 'dbaseole', 'typedbin' );
  108.     var
  109.       i: integer;
  110.     begin
  111.       result:= false;
  112.       with Query do begin
  113.         for i:= 0 to integer(ParamCount) - 1 do begin
  114.           with Params[i] do begin
  115.             with ParamForm do begin
  116.               ParamName.Caption:= Params[i].Name;
  117.               ParamType.ItemIndex:= ord(DataType);
  118.               if DataType <> ftUnknown then ParamValue.Text:= AsString;
  119.               ParamNull.Checked:= (ParamValue.Text = '');
  120.               ActiveControl:= ParamType;
  121.               if ShowModal{} <> mrOk then Exit;
  122.               DataType:= TFieldType(ParamType.ItemIndex);
  123.               if ParamNull.Checked then Clear else Text:= ParamValue.Text;
  124.             end {with paramform};
  125.           end{with param};
  126.         end {for params};
  127.       end {with Query};
  128.       result:= True;
  129.     end {AskParams};
  130.  
  131.   var
  132.     src: TDataSet;
  133.   begin {DoQueryClick}
  134.     Query.Close;
  135.     Query.Unprepare;
  136.     Table.Close;
  137.     DataSource.DataSet:= nil;
  138.     with Database do if AliasName <> DatasourceName.Text then begin
  139.       Close;
  140.       AliasName:= DatasourceName.Text;
  141.       Open;
  142.     end;
  143.     if CompareText( Copy(SqlStmt.Lines[0], 1,6), 'Table ') = 0 then begin
  144.       Table.ReadOnly:= not LiveQuery.Checked;
  145.       Table.TableName := Copy( SqlStmt.Lines[0], 7,255 );
  146.       StartTimer;
  147.       Table.Open;
  148.       ShowTimer;
  149.       src:= Table;
  150.     end else begin
  151.       Query.RequestLive:= LiveQuery.Checked;
  152.       Query.Unidirectional:= False;
  153.       Query.SQL := SqlStmt.Lines;
  154.       StartTimer;
  155.       Query.Prepare;
  156.       ShowTimer;
  157.       if AskParams{} then begin
  158.         if CompareText( Copy(Query.SQL[0],1,6), 'Select') = 0 then Query.Open else Query.ExecSQL;
  159.         ShowTimer;
  160.       end else begin
  161.         Query.Unprepare;
  162.       end;
  163.       src:= Query;
  164.     end;
  165.     DataSource.DataSet:= src;
  166.   end {DoQueryClick};
  167.  
  168.  
  169. procedure TQueryTool.DataSourceStateChange(Sender: TObject);
  170.   var
  171.     i: integer;
  172.   begin
  173.     with DBGrid do begin
  174.       for i:= 0 to Columns.Count-1 do begin
  175.         with Columns[i] do begin
  176.           if Width > 150 then Width:= 150;
  177.         end {with column i};
  178.       end {for columns};
  179.     end {with Query};
  180.   end {QueryAfterOpen};
  181.  
  182.  
  183. {------------------------------------------------ initialization }
  184.  
  185. procedure TQueryTool.BtnFirstClick(Sender: TObject);
  186.   begin
  187.     StartTimer;
  188.     DataSource.DataSet.First;
  189.     ShowTimer;
  190.   end {GotoFirstClick};
  191.  
  192.  
  193. procedure TQueryTool.BtnLastClick(Sender: TObject);
  194.   begin
  195.     StartTimer;
  196.     DataSource.DataSet.Last;
  197.     ShowTimer;
  198.   end {GotoLastClick};
  199.  
  200.  
  201. procedure TQueryTool.BtnScanClick(Sender: TObject);
  202.   begin
  203.     with DataSource.DataSet do try
  204.       Screen.Cursor:= crHourglass;
  205.       DisableControls;
  206.       StartTimer;
  207.       while not EOF do Next;
  208.       ShowTimer;
  209.     finally
  210.       Screen.Cursor:= crDefault;
  211.       EnableControls;
  212.     end;
  213.   end {BtnScanClick};
  214.  
  215.  
  216. procedure TQueryTool.ChkLoggingClick(Sender: TObject);
  217.   begin
  218.     if ChkLogging.Checked
  219.     then BDE.DbiDebugLayerOptions( BDE.DebugOn OR BDE.OutputToFile OR BDE.FlushEveryOp, nil )
  220.     else BDE.DbiDebugLayerOptions( 0, nil );
  221.   end {ChkLoggingClick};
  222.  
  223.  
  224. end {Query}.
  225.