📄 pfibdsgnviewsqls.pas
字号:
with lstForms do
for i:=0 to Pred(Items.Count) do
if Checked[i] then
begin
with TStrings(Items.Objects[i]) do
for j:= 0 to Pred(Count) do
with TFIBSQLOwner(Objects[j]) do
if vChecked then
case Operation of
oSaveSQL:
begin
Writeln(F,'Unit - "'+ GetUnitName(vFIBSQLOwner)+'"');
StatusBar1.Panels[0].Text:='Saving SQL for '+
vFIBSQLOwner.Owner.Name+'.'+vFIBSQLOwner.Name;
Writeln(F,'Component - '+ vFIBSQLOwner.Owner.Name+'.'+
vFIBSQLOwner.Name+':'+vFIBSQLOwner.Owner.ClassName);
SaveFIBSQLOwner(F,vFIBSQLOwner);
end;
oCheckSQL:
begin
StatusBar1.Panels[0].Text:='Check SQL for '+
vFIBSQLOwner.Owner.Name+'.'+vFIBSQLOwner.Name;
if CheckSQL(vFIBSQLOwner) in [1,2] then
begin
ErrMsg:=TStringList.Create;
ErrMsg.Text:='Can''t connect to base';
ListBox1.Items.AddObject(
'Error in:'+ vFIBSQLOwner.Owner.Name+'.'+vFIBSQLOwner.Name,
ErrMsg
);
end;
end;
oAnalyzeSQL:
begin
StatusBar1.Panels[0].Text:='Analyze SQL for '+
vFIBSQLOwner.Owner.Name+'.'+vFIBSQLOwner.Name;
Writeln(F,'Unit - "'+ GetUnitName(vFIBSQLOwner)+'"');
Writeln(F,'Component- ' + vFIBSQLOwner.Owner.Name+'.'+
vFIBSQLOwner.Name+':' + vFIBSQLOwner.Owner.ClassName);
Analyze(vFIBSQLOwner,AnalyzeResult,F);
Writeln(F,'');
end;
end;
Application.ProcessMessages;
end;
finally
AnalyzeResult.Free;
Screen.Cursor:=crDefault;
if Operation in [oSaveSQL,oAnalyzeSQL] then
CloseFile(F);
StatusBar1.Panels[0].Text:=''
end;
end;
function TfrmSaveSQLs.CheckSQL(aFIBSQLOwner:TComponent):integer;
var
DPB:TStrings;
procedure CheckSQLText(SQLText:TStrings;const SQLName: string);
var ErrMsg:TStrings;
begin
if SQLText.Count=0 then Exit;
qryCheck.SQL.Assign(SQLText);
try
qryCheck.Prepare;
except
On E: Exception do
begin
ErrMsg:=TStringList.Create;
ErrMsg.Text:=E.Message;
ListBox1.Items.AddObject(
'Error in:'+
aFIBSQLOwner.Owner.Name+'.'+aFIBSQLOwner.Name+'.'+
SQLName
,
ErrMsg
);
Result:=3;
end;
end;
end;
begin
Result:=1; //湾 囫耔沩钼囗 尼袜戾
DPB :=TStringList.Create;
try
GetDBParams(aFIBSQLOwner,DPB);
Connect(DPB);
with pFIBDatabase1 do
begin
if aFIBSQLOwner is TFIBQuery then
CheckSQLText(TFIBQuery(aFIBSQLOwner).SQL,'SQL')
else
if aFIBSQLOwner is TFIBDataSet then
begin
CheckSQLText(TFIBDataSet(aFIBSQLOwner).SelectSQL, 'SelectSQL');
CheckSQLText(TFIBDataSet(aFIBSQLOwner).InsertSQL, 'InsertSQL');
CheckSQLText(TFIBDataSet(aFIBSQLOwner).RefreshSQL,'RefreshSQL');
CheckSQLText(TFIBDataSet(aFIBSQLOwner).DeleteSQL, 'DeleteSQL');
CheckSQLText(TFIBDataSet(aFIBSQLOwner).UpdateSQL, 'UpdateSQL');
end
{$IFDEF SQL_NAVIGATOR_SUPPORT_BDE}
else
if aFIBSQLOwner is TQuery then
begin
CheckSQLText(TQuery(aFIBSQLOwner).SQL,'SQL');
end
else
if aFIBSQLOwner is TUpdateSQL then
begin
CheckSQLText(TUpdateSQL(aFIBSQLOwner).InsertSQL , 'InsertSQL');
CheckSQLText(TUpdateSQL(aFIBSQLOwner).DeleteSQL , 'DeleteSQL');
CheckSQLText(TUpdateSQL(aFIBSQLOwner).ModifySQL , 'UpdateSQL');
end
{$ENDIF}
;Result:=0
end;
finally
DPB.Free
end
end;
procedure TfrmSaveSQLs.SaveFIBSQLOwner(var F: Text;
aFIBSQLOwner: TComponent);
var i:integer;
begin
Writeln(f);
if aFIBSQLOwner is TFIBQuery then
begin
with TFIBQuery(aFIBSQLOwner),TFIBQuery(aFIBSQLOwner).SQL do
if Trim(SQL.Text)<>'' then
begin
Writeln(f,'/*SQL*/');
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end
end
else
if aFIBSQLOwner is TFIBDataSet then
with TFIBDataSet(aFIBSQLOwner) do
begin
if Trim(SelectSQL.Text)<>'' then
begin
Writeln(f,'/*SelectSQL*/');
with SelectSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
if not vFullSave then
begin
Writeln(f); Exit;
end;
if Trim(InsertSQL.Text)<>'' then
begin
Writeln(f,'/*InsertSQL*/');
with InsertSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
if Trim(UpdateSQL.Text)<>'' then
begin
Writeln(f,'/*UpdateSQL*/');
with UpdateSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
if Trim(DeleteSQL.Text)<>'' then
begin
Writeln(f,'/*DeleteSQL*/');
with DeleteSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
if Trim(RefreshSQL.Text)<>'' then
begin
Writeln(f,'/*RefreshSQL*/');
with RefreshSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
end
{$IFDEF SQL_NAVIGATOR_SUPPORT_BDE}
else
if aFIBSQLOwner is TQuery then
begin
with TQuery(aFIBSQLOwner),TQuery(aFIBSQLOwner).SQL do
if Trim(SQL.Text)<>'' then
begin
Writeln(f,'/*SQL*/');
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end
end
else
if aFIBSQLOwner is TUpdateSQL then
with TUpdateSQL(aFIBSQLOwner) do
begin
if not vFullSave then
begin
Writeln(f); Exit;
end;
if Trim(InsertSQL.Text)<>'' then
begin
Writeln(f,'/*InsertSQL*/');
with InsertSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
if Trim(ModifySQL.Text)<>'' then
begin
Writeln(f,'/*ModifySQL*/');
with ModifySQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
if Trim(DeleteSQL.Text)<>'' then
begin
Writeln(f,'/*DeleteSQL*/');
with DeleteSQL do
for i:=0 to Pred(Count) do
Writeln(f,Strings[i]);
Writeln(f,';');
end;
end
{$ENDIF}
;
Writeln(f);
end;
procedure TfrmSaveSQLs.FormCreate(Sender: TObject);
begin
Caption := FPTNavCaption;
btnGetForms.Hint := FPTNavGetFormsButtonHint;
ToolButton5.Hint := FPTNavCloseFormsButtonHint;
ToolButton1.Hint := FPTNavSaveSQLButtonHint;
ToolButton3.Hint := FPTNavFindButtonHint;
ToolButton2.Hint := FPTNavCheckButtonHint;
ToolButton8.Hint := FPTNavSaveCallsHint;
ToolButton4.Hint := FPTNavHideSearchButtonHint;
ToolButton7.Hint := FPTNavShowOIButtonHint;
GrSearch.Caption := FPTNavSearchResults;
SelectAll1.Caption := FPTNavSelectAllItem;
Unselectall1.Caption := FPTNavUnselectAllItem;
GotocurrentComponent1.Caption := FPTNavGotoCurrentItem;
ShowSearchResult1.Caption := FPTNavShowResultsItem;
HideSearchResult1.Caption := FPTNavHideResultsItem;
CopytoClipboard1.Caption := FPTNavCopyToClipboardItem;
miSaveallSQLs1.Caption := FPTNavSaveAllItem;
SaveonlySelectSQL1.Caption := FPTNavSaveSelectSQlItem;
FListOfOpenedForms:=TStringList.Create;
with FListOfOpenedForms do
begin
Sorted:=True;
Duplicates:=dupIgnore;
end; // with
visible:=false;
WindowList:=nil;
{$IFDEF USE_SYN_EDIT}
SynSQLSyn1 :=TSynSQLSyn.Create(Self);
with SynSQLSyn1 do begin
DefaultFilter:= FPTNavSQLFilter;
CommentAttri.Foreground := clBlue;
NumberAttri.Foreground := clRed ;
StringAttri.Background := clInactiveBorder;
SQLDialect := sqlInterbase6;
end;
memSQL :=TSynMemo.Create(Self);
memInsertSQL :=TSynMemo.Create(Self);
memUpdateSQL :=TSynMemo.Create(Self);
memDeleteSQL :=TSynMemo.Create(Self);
memRefreshSQL:=TSynMemo.Create(Self);
memSQL. Highlighter:=SynSQLSyn1;
memInsertSQL.Highlighter:=SynSQLSyn1;
memUpdateSQL.Highlighter:=SynSQLSyn1;
memDeleteSQL.Highlighter:=SynSQLSyn1;
memRefreshSQL.Highlighter:=SynSQLSyn1;
{$ELSE}
memSQL :=TMemo.Create (Self);
memInsertSQL :=TMemo.Create (Self);
memUpdateSQL :=TMemo.Create(Self);
memDeleteSQL :=TMemo.Create(Self);
memRefreshSQL:=TMemo.Create(Self);
memSQL .ScrollBars:=ssBoth;
memInsertSQL .ScrollBars:=ssBoth;
memUpdateSQL .ScrollBars:=ssBoth;
memDeleteSQL .ScrollBars:=ssBoth;
memRefreshSQL.ScrollBars:=ssBoth;
{$ENDIF}
memSQL.Parent:=TabSQL;
memSQL.Align :=alClient;
memInsertSQL.Parent:=TabInsertSQL;
memInsertSQL.Align :=alClient;
memUpdateSQL.Parent:=TabUpdateSQL;
memUpdateSQL.Align :=alClient;
memDeleteSQL.Parent:=TabDeleteSQL;
memDeleteSQL.Align :=alClient;
memRefreshSQL.Parent:=TabRefreshSQL;
memRefreshSQL.Align :=alClient;
memSQL .Modified:=false;
memInsertSQL .Modified:=false;
memUpdateSQL .Modified:=false;
memDeleteSQL .Modified:=false;
memRefreshSQL.Modified:=false;
memSQL .OnExit:=MemoExit;
memInsertSQL .OnExit:=MemoExit;
memUpdateSQL .OnExit:=MemoExit;
memDeleteSQL .OnExit:=MemoExit;
memRefreshSQL.OnExit:=MemoExit;
memSQL .OnEnter:=MemoEnter;
memInsertSQL .OnEnter:=MemoEnter;
memUpdateSQL .OnEnter:=MemoEnter;
memDeleteSQL .OnEnter:=MemoEnter;
memRefreshSQL.OnEnter:=MemoEnter;
FSearchResult:=TStringList.Create;
end;
procedure TfrmSaveSQLs.SpeedButton1Click(Sender: TObject);
begin
FindDialog1.Execute
end;
function TfrmSaveSQLs.SearchContext(const Value: string): boolean;
var
i,j:integer;
begin
Result:=false;
Screen.Cursor:=crHourGlass;
try
with lstForms do
for i:=0 to Pred(Items.Count) do
with TStrings(Items.Objects[i]) do
for j:= 0 to Pred(Count) do
with TFIBSQLOwner(Objects[j]) do
Result:=FindInCmp(vFIBSQLOwner,Value) or Result
finally
Screen.Cursor:=crDefault;
end;
SetSearchResVisible(Result);
ClearSearch;
if Result then begin
ListBox1.Items.AddStrings(FSearchResult);
FSearchResult.Clear
end;
FindDialog1.CloseDialog;
end;
procedure TfrmSaveSQLs.FocusToComponent(cmp:TComponent);
var
i,j:integer;
begin
with lstForms.Items do
for i:=0 to Pred(Count) do
with TStrings(lstForms.Items.Objects[i]) do
for j:=0 to Pred(Count) do begin
if cmp=TFIBSQLOwner(Objects[j]).vFIBSQLOwner
then begin
lstForms.ItemIndex :=i;
FillQueryList;
lstQueries.ItemIndex:=j;
lstQueriesEnter(lstQueries);
Exit;
end;
end;
end;
procedure TfrmSaveSQLs.ClearSearch;
var i:integer;
begin
with ListBox1.Items do begin
for i:=0 to Pred(Count) do
if Objects[i]<>nil then Objects[i].Free;
Clear;
end;
end;
function TfrmSaveSQLs.FindInCmp(cmp: TComponent;
const Value: string): boolean;
var F:boolean;
function PosX(Substr: string; S: string):integer;
begin
if frMatchCase in FindDialog1.Options then
if frWholeWord in FindDialog1.Options then
Result:=PosExt(Substr,S,[' ',#13,#10,')','(',',','.'],
[' ',#13,#10,')','(',',','.']
)
else
Result:=Pos(Substr,S)
else
if frWholeWord in FindDialog1.Options then
Result:=PosExtCI(Substr,S,[' ',#13,#10,')','(',',','.'],
[' ',#13,#10,')','(',',','.']
)
else
Result:=PosCI(Substr,S)
end;
begin
Result:=false;
if cmp is TFIBQuery then
begin
Result:=PosX(Value,TFIBQuery(cmp).SQL.Text)>0;
if Result then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.SQL');
Exit;
end;
{$IFDEF SQL_NAVIGATOR_SUPPORT_BDE}
if cmp is TQuery then
begin
Result:=PosX(Value,TQuery(cmp).SQL.Text)>0;
if Result then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.SQL');
Exit;
end;
if cmp is TUpdateSQL then
begin
Result:=PosX(Value,TUpdateSQL(cmp).InsertSQL.Text)>0;
if Result then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.InsertSQL');
F:=PosX(Value,TUpdateSQL(cmp).ModifySQL.Text)>0;
Result:=Result or F;
if F then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.ModifySQL');
F:=PosX(Value,TUpdateSQL(cmp).DeleteSQL.Text)>0;
Result:=Result or F;
if F then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.DeleteSQL');
end;
{$ENDIF}
if cmp is TFIBDataSet then
begin
Result:=PosX(Value,TFIBDataSet(cmp).SelectSQL.Text)>0;
if Result then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.SelectSQL');
F:=PosX(Value,TFIBDataSet(cmp).InsertSQL.Text)>0;
Result:=Result or F;
if F then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.InsertSQL');
F:=PosX(Value,TFIBDataSet(cmp).UpdateSQL.Text)>0;
Result:=Result or F;
if F then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.UpdateSQL');
F:=PosX(Value,TFIBDataSet(cmp).DeleteSQL.Text)>0;
Result:=Result or F;
if F then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.DeleteSQL');
F:=PosX(Value,TFIBDataSet(cmp).RefreshSQL.Text)>0;
Result:=Result or F;
if F then FSearchResult.Add(cmp.Owner.Name+'.'+cmp.Name+'.RefreshSQL');
end;
end;
procedure TfrmSaveSQLs.FindDialog1Find(Sender: TObject);
begin
GrSearch.Caption := Format(FPTNavSearchResultCaption, [FindDialog1.FindText]);
FSearchResult.Clear;
if not SearchContext(FindDialog1.FindText) then
{$IFNDEF D9+}
// 项麇祗-蝾 铌眍
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -