📄 qryu.pas
字号:
unit QryU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Grids, DBGrids, DB, DBTables, StdCtrls;
type
TQueryForm = class(TForm)
Query: TQuery;
DataSource: TDataSource;
QuerySession: TSession;
QueryDatabase: TDatabase;
dbgQueryGrid: TDBGrid;
memSQL: TMemo;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure NewQuery(QryNum: integer; Qry: TStrings; const Alias, UserName,
Password: string);
implementation
{$R *.DFM}
type
TDBQueryThread = class(TThread)
private
FQuery: TQuery;
FDataSource: TDataSource;
FQueryException: Exception;
procedure HookUpUI;
procedure QueryError;
protected
procedure Execute; override;
public
constructor Create(Q: TQuery; D: TDataSource); virtual;
end;
constructor TDBQueryThread.Create(Q: TQuery; D: TDataSource);
begin
inherited Create(True); // create suspended thread
FQuery := Q; // set parameters
FDataSource := D;
FreeOnTerminate := True;
Resume; // thread that puppy!
end;
procedure TDBQueryThread.Execute;
begin
try
FQuery.Open; // open the query
Synchronize(HookUpUI); // update UI from main thread
except
FQueryException := ExceptObject as Exception;
Synchronize(QueryError); // show exception from main thread
end;
end;
procedure TDBQueryThread.HookUpUI;
begin
FDataSource.DataSet := FQuery;
end;
procedure TDBQueryThread.QueryError;
begin
Application.ShowException(FQueryException);
end;
procedure TQueryForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure NewQuery(QryNum: integer; Qry: TStrings; const Alias, UserName,
Password: string);
begin
{ Create a new Query form to show query results }
with TQueryForm.Create(Application) do
begin
{ Set a unique session name }
QuerySession.SessionName := Format('Sess%d', [QryNum]);
with QueryDatabase do
begin
{ set a unique database name }
DatabaseName := Format('DB%d', [QryNum]);
{ set alias parameter }
AliasName := Alias;
{ hook database to session }
SessionName := QuerySession.SessionName;
{ user-defined username and password }
Params.Values['USER NAME'] := UserName;
Params.Values['PASSWORD'] := Password;
end;
with Query do
begin
{ hook query to database and session }
DatabaseName := QueryDatabase.DatabaseName;
SessionName := QuerySession.SessionName;
{ set up the query strings }
SQL.Assign(Qry);
end;
{ display query strings in SQL Memo }
memSQL.Lines.Assign(Qry);
{ show query form }
Show;
{ open query in its own thread }
TDBQueryThread.Create(Query, DataSource);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -