home *** CD-ROM | disk | FTP | other *** search
- unit Query;
-
- { General SQL query tool.
- (c)1995 Opus Software GmbH }
-
-
- {==============================================================================}
- interface
- uses
- SysUtils, Windows, Messages, Classes, Graphics, Controls,
- StdCtrls, Forms, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls;
-
- type
- TQueryTool = class(TForm)
- DataSource: TDataSource;
- Query: TQuery;
- Table: TTable;
- Database: TDatabase;
- PnlHead: TPanel;
- DatasourceName: TComboBox;
- Label2: TLabel;
- Label1: TLabel;
- PnlMid: TPanel;
- Label3: TLabel;
- DBNavigator: TDBNavigator;
- DoQuery: TButton;
- BtnFirst: TButton;
- BtnLast: TButton;
- TimeTaken: TEdit;
- LiveQuery: TCheckBox;
- BtnScan: TButton;
- PnlStatus: TPanel;
- PnlResult: TPanel;
- DBGrid: TDBGrid;
- PnlQuery: TPanel;
- SqlStmt: TMemo;
- ChkLogging: TCheckBox;
- procedure DoQueryClick(Sender: TObject);
- procedure BtnFirstClick(Sender: TObject);
- procedure BtnLastClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure BtnScanClick(Sender: TObject);
- procedure ChkLoggingClick(Sender: TObject);
- procedure DataSourceStateChange(Sender: TObject);
- public
- procedure DoHint(Sender: TObject);
- end;
-
- var
- QueryTool: TQueryTool;
-
-
- {==============================================================================}
- implementation
- uses
- Dialogs, IniFiles, Param,
- BDE;
-
- {$R *.DFM}
-
-
- {------------------------------------------------ timer utilities }
- var
- Stamp: longint;
-
- procedure StartTimer;
- begin
- Stamp:= GetTickCount;
- QueryTool.TimeTaken.Text:= '';
- end {StartTimer};
-
- procedure ShowTimer;
- var
- Now: longint;
- begin
- Now:= GetTickCount;
- with QueryTool.TimeTaken do begin
- if Text <> '' then Text:= Text + ', ';
- Text:= Text + IntToStr( Now - Stamp ) + ' ms';
- end;
- Stamp:= Now;
- end {ShowTimer};
-
-
- {------------------------------------------------ TQueryTool }
-
- procedure TQueryTool.FormCreate(Sender: TObject);
- begin
- Application.OnHint:= DoHint;
- Session.GetAliasNames( DatasourceName.Items );
- end {FormCreate};
-
- procedure TQueryTool.DoHint( Sender: TObject );
- begin
- PnlStatus.Caption:= ' ' + Application.Hint;
- end {DoHint};
-
-
- procedure TQueryTool.DoQueryClick(Sender: TObject);
-
- function AskParams{}: boolean;
- const
- Map: array [TFieldType] of string[10]
- = ('unknown', 'string', 'small', 'integer', 'word',
- 'boolean', 'float', 'currency', 'bcd', 'date', 'time',
- 'datetime', 'bytes', 'varbytes', 'autoinc', 'blob', 'memo',
- 'graphic', 'fmtmemo', 'pdoxole', 'dbaseole', 'typedbin' );
- var
- i: integer;
- begin
- result:= false;
- with Query do begin
- for i:= 0 to integer(ParamCount) - 1 do begin
- with Params[i] do begin
- with ParamForm do begin
- ParamName.Caption:= Params[i].Name;
- ParamType.ItemIndex:= ord(DataType);
- if DataType <> ftUnknown then ParamValue.Text:= AsString;
- ParamNull.Checked:= (ParamValue.Text = '');
- ActiveControl:= ParamType;
- if ShowModal{} <> mrOk then Exit;
- DataType:= TFieldType(ParamType.ItemIndex);
- if ParamNull.Checked then Clear else Text:= ParamValue.Text;
- end {with paramform};
- end{with param};
- end {for params};
- end {with Query};
- result:= True;
- end {AskParams};
-
- var
- src: TDataSet;
- begin {DoQueryClick}
- Query.Close;
- Query.Unprepare;
- Table.Close;
- DataSource.DataSet:= nil;
- with Database do if AliasName <> DatasourceName.Text then begin
- Close;
- AliasName:= DatasourceName.Text;
- Open;
- end;
- if CompareText( Copy(SqlStmt.Lines[0], 1,6), 'Table ') = 0 then begin
- Table.ReadOnly:= not LiveQuery.Checked;
- Table.TableName := Copy( SqlStmt.Lines[0], 7,255 );
- StartTimer;
- Table.Open;
- ShowTimer;
- src:= Table;
- end else begin
- Query.RequestLive:= LiveQuery.Checked;
- Query.Unidirectional:= False;
- Query.SQL := SqlStmt.Lines;
- StartTimer;
- Query.Prepare;
- ShowTimer;
- if AskParams{} then begin
- if CompareText( Copy(Query.SQL[0],1,6), 'Select') = 0 then Query.Open else Query.ExecSQL;
- ShowTimer;
- end else begin
- Query.Unprepare;
- end;
- src:= Query;
- end;
- DataSource.DataSet:= src;
- end {DoQueryClick};
-
-
- procedure TQueryTool.DataSourceStateChange(Sender: TObject);
- var
- i: integer;
- begin
- with DBGrid do begin
- for i:= 0 to Columns.Count-1 do begin
- with Columns[i] do begin
- if Width > 150 then Width:= 150;
- end {with column i};
- end {for columns};
- end {with Query};
- end {QueryAfterOpen};
-
-
- {------------------------------------------------ initialization }
-
- procedure TQueryTool.BtnFirstClick(Sender: TObject);
- begin
- StartTimer;
- DataSource.DataSet.First;
- ShowTimer;
- end {GotoFirstClick};
-
-
- procedure TQueryTool.BtnLastClick(Sender: TObject);
- begin
- StartTimer;
- DataSource.DataSet.Last;
- ShowTimer;
- end {GotoLastClick};
-
-
- procedure TQueryTool.BtnScanClick(Sender: TObject);
- begin
- with DataSource.DataSet do try
- Screen.Cursor:= crHourglass;
- DisableControls;
- StartTimer;
- while not EOF do Next;
- ShowTimer;
- finally
- Screen.Cursor:= crDefault;
- EnableControls;
- end;
- end {BtnScanClick};
-
-
- procedure TQueryTool.ChkLoggingClick(Sender: TObject);
- begin
- if ChkLogging.Checked
- then BDE.DbiDebugLayerOptions( BDE.DebugOn OR BDE.OutputToFile OR BDE.FlushEveryOp, nil )
- else BDE.DbiDebugLayerOptions( 0, nil );
- end {ChkLoggingClick};
-
-
- end {Query}.
-