📄 main.pas
字号:
{*******************************************************}
{ }
{ Advanced SQL statement parser demo program }
{ Copyright (c) 2001 AS Gaiasoft }
{ Created by Gert Kello }
{ }
{*******************************************************}
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, gaAdvancedSQLParser, ActnList, Menus;
type
TfrmMain = class(TForm)
pnlButtons: TPanel;
pgcSQL: TPageControl;
tshSQLText: TTabSheet;
tshNewSQLText: TTabSheet;
tshTokenInfo: TTabSheet;
memSQLText: TMemo;
memRebuildedSQL: TMemo;
edToken: TEdit;
lblTokenText: TLabel;
lblTokenType: TLabel;
edTokenType: TEdit;
lblStringDelimiter: TLabel;
edStringDelimiter: TEdit;
lblStatementParserClass: TLabel;
edStatementParserClass: TEdit;
lblStatementType: TLabel;
edStatementType: TEdit;
lblParsedSQL: TLabel;
memParsedSQL: TMemo;
btnReset: TButton;
btnNextToken: TButton;
btnReplace: TButton;
btnAll: TButton;
ActionList1: TActionList;
actLoadSQL: TAction;
actSaveSQL: TAction;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
LoadSQL1: TMenuItem;
LoadSQL2: TMenuItem;
SaveSQL1: TMenuItem;
procedure btnResetClick(Sender: TObject);
procedure btnNextTokenClick(Sender: TObject);
procedure btnAllClick(Sender: TObject);
procedure btnReplaceClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure actSaveSQLUpdate(Sender: TObject);
procedure actSaveSQLExecute(Sender: TObject);
procedure actLoadSQLExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
private
QueryParser: TgaAdvancedSQLParser;
procedure SetValues;
procedure TokenParsed(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
uses
gaSelectStm, gaDeleteStm, gaBasicSQLParser, gaSQLParserHelperClasses, TypInfo;
{$R *.DFM}
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
QueryParser.SQLText := memSQLText.Lines;
SetValues;
end;
procedure TfrmMain.btnNextTokenClick(Sender: TObject);
begin
QueryParser.NextToken;
SetValues;
end;
procedure TfrmMain.btnAllClick(Sender: TObject);
begin
QueryParser.Reset;
while not (QueryParser.TokenType = stEnd) do
QueryParser.NextToken;
SetValues;
end;
procedure TfrmMain.btnReplaceClick(Sender: TObject);
begin
QueryParser.SQLText := memSQLText.Lines;
QueryParser.Reset;
while not (QueryParser.TokenType = stEnd) do
QueryParser.NextToken;
QueryParser.CurrentStatement.AllTables.First;
while not QueryParser.CurrentStatement.AllTables.Eof do
begin
(QueryParser.CurrentStatement.AllTables.CurrentItem as TgaSQLTable).TablePrefix := 'here.athome';
if (QueryParser.CurrentStatement.AllTables.CurrentItem as TgaSQLTable).IsAliasAllowed then
(QueryParser.CurrentStatement.AllTables.CurrentItem as TgaSQLTable).TableAlias := 'MeMyself';
QueryParser.CurrentStatement.AllTables.Next;
end;
if QueryParser.CurrentStatement is TgaSelectSQLStatement then
begin
if Assigned((QueryParser.CurrentStatement as TgaSelectSQLStatement).OrderByClause) then
(QueryParser.CurrentStatement as TgaSelectSQLStatement).OrderByClause.AsString := 'order BY Test';
if Assigned((QueryParser.CurrentStatement as TgaSelectSQLStatement).WhereClause) then
(QueryParser.CurrentStatement as TgaSelectSQLStatement).WhereClause.AsString := '(Test = ''Test'') and (My = "My")';
end;
if QueryParser.CurrentStatement is TgaDeleteSQLStatement then
begin
if Assigned((QueryParser.CurrentStatement as TgaDeleteSQLStatement).WhereClause) then
(QueryParser.CurrentStatement as TgaDeleteSQLStatement).WhereClause.AsString := '(Test = ''Test'') and (My = "My")';
end;
SetValues;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
QueryParser := TgaAdvancedSQLParser.Create(Self);
// QueryParser.OnTokenParsed := TokenParsed;
end;
procedure TfrmMain.TokenParsed(Sender: TObject);
begin
SetValues;
end;
function GetReadableString(const InStr: string): string;
var
cPos: PChar;
begin
Result := '';
cPos := PChar(InStr);
while cPos^ <> #0 do
begin
if cPos^ > ' ' then
Result := Result + cPos^
else
Result := Format('%s#%2.2d', [Result, Ord(cPos^)]);
Inc(cPos);
end;
end;
procedure TfrmMain.SetValues;
begin
edToken.Text := GetReadableString(QueryParser.TokenString);
edStringDelimiter.Text := QueryParser.QuoteChar;
edTokenType.Text := GetEnumName(TypeInfo(TSQLToken), Ord(QueryParser.TokenType));
edStatementParserClass.Text := QueryParser.CurrentStatement.ClassName;
edStatementType.Text := GetEnumName(TypeInfo(TSQLStatementType),
Ord(QueryParser.CurrentStatement.StatementType));
memRebuildedSQL.Lines.Text := QueryParser.CurrentStatement.AsString;
memParsedSQL.Lines.Text := QueryParser.CurrentStatement.OriginalSQL.AsString;
end;
procedure TfrmMain.actSaveSQLUpdate(Sender: TObject);
begin
actSaveSQL.Enabled := memSQLText.Lines.Count > 0;
end;
procedure TfrmMain.actSaveSQLExecute(Sender: TObject);
begin
if SaveDialog1.Execute then
memSQLText.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TfrmMain.actLoadSQLExecute(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
memSQLText.Lines.LoadFromFile(OpenDialog1.FileName);
btnResetClick(Self);
end;
end;
procedure TfrmMain.FormShow(Sender: TObject);
begin
QueryParser.SQLText := memSQLText.Lines;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -