⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pfibdsgnviewsqls.pas

📁 FIBPlus is a component suite intended for work with InterBase. It is direct, fast and flexible Inter
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    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 + -