@@ -1324,6 +1324,7 @@ TMainForm = class(TExtForm)
13241324 procedure SetSnippetFilenames;
13251325 function TreeClickHistoryPrevious(MayBeNil: Boolean=False): PVirtualNode;
13261326 procedure OperationRunning(Runs: Boolean);
1327+ procedure OpenQueryFiles(Filenames: TStrings; Encoding: TEncoding; ForceRun: Boolean);
13271328 function RunQueryFiles(Filenames: TStrings; Encoding: TEncoding; ForceRun: Boolean): Boolean;
13281329 function RunQueryFile(Filename: String; Encoding: TEncoding; Conn: TDBConnection;
13291330 FilesizeSum: Int64; var CurrentPosition: Int64): Boolean;
@@ -2143,7 +2144,6 @@ procedure TMainForm.AfterFormCreate;
21432144 StatsCall: THttpDownload;
21442145 StatsURL: String;
21452146 SessionPaths: TStringlist;
2146- Tab: TQueryTab;
21472147begin
21482148 // Check for connection parameters on commandline or show connections form.
21492149 if AppSettings.ReadBool(asUpdatecheck) then begin
@@ -2259,14 +2259,7 @@ procedure TMainForm.AfterFormCreate;
22592259 end;
22602260
22612261 // Load SQL file(s) by command line
2262- if not RunQueryFiles(FileNames, nil, false) then begin
2263- for i:=0 to FileNames.Count-1 do begin
2264- Tab := GetOrCreateEmptyQueryTab(False);
2265- Tab.LoadContents(FileNames[i], True, nil);
2266- if i = FileNames.Count-1 then
2267- SetMainTab(Tab.TabSheet);
2268- end;
2269- end;
2262+ OpenQueryFiles(FileNames, nil, False);
22702263
22712264 MainFormAfterCreateDone := True;
22722265end;
@@ -3936,10 +3929,9 @@ procedure TMainForm.actLaunchCommandlineExecute(Sender: TObject);
39363929// Load SQL-file, make sure that SheetQuery is activated
39373930procedure TMainForm.actLoadSQLExecute(Sender: TObject);
39383931var
3939- i, ProceedResult: Integer;
3932+ ProceedResult: Integer;
39403933 Dialog: TExtFileOpenDialog;
39413934 Encoding: TEncoding;
3942- Tab: TQueryTab;
39433935begin
39443936 AppSettings.ResetPath;
39453937 Dialog := TExtFileOpenDialog.Create(Self);
@@ -3961,21 +3953,59 @@ procedure TMainForm.actLoadSQLExecute(Sender: TObject);
39613953 end;
39623954
39633955 if ProceedResult = mrYes then begin
3964- if not RunQueryFiles(Dialog.Files, Encoding, Sender=actRunSQL) then begin
3965- for i:=0 to Dialog.Files.Count-1 do begin
3966- Tab := GetOrCreateEmptyQueryTab(False);
3967- Tab.LoadContents(Dialog.Files[i], True, Encoding);
3968- if i = Dialog.Files.Count-1 then
3969- SetMainTab(Tab.TabSheet);
3970- end;
3971- end;
3956+ OpenQueryFiles(Dialog.Files, Encoding, Sender=actRunSQL);
39723957 end;
39733958 AppSettings.WriteInt(asFileDialogEncoding, Dialog.EncodingIndex, Self.Name);
39743959 end;
39753960 Dialog.Free;
39763961end;
39773962
39783963
3964+ procedure TMainForm.OpenQueryFiles(Filenames: TStrings; Encoding: TEncoding; ForceRun: Boolean);
3965+ var
3966+ Tab, FileInTab: TQueryTab;
3967+ FileHints: TStringList;
3968+ i: Integer;
3969+ begin
3970+ // Decides whether to run or load files, prevents duplicates etc.
3971+ if RunQueryFiles(Filenames, Encoding, ForceRun) then
3972+ Exit;
3973+
3974+ FileHints := TStringList.Create;
3975+
3976+ for i:=0 to Filenames.Count-1 do begin
3977+
3978+ FileInTab := nil;
3979+ for Tab in QueryTabs do begin
3980+ if Tab.MemoFilename = Filenames[i] then begin
3981+ FileInTab := Tab;
3982+ FileHints.Add(f_('This file is already open in query tab #%d.', [FileInTab.Number]) + ' ' + ExtractFileName(Filenames[i]));
3983+ if i = Filenames.Count-1 then
3984+ SetMainTab(FileInTab.TabSheet);
3985+ Break;
3986+ end;
3987+ end;
3988+
3989+ if not Assigned(FileInTab) then begin
3990+ Tab := GetOrCreateEmptyQueryTab(False);
3991+ Tab.LoadContents(Filenames[i], True, Encoding);
3992+ if i = Filenames.Count-1 then
3993+ SetMainTab(Tab.TabSheet);
3994+ end;
3995+ end;
3996+
3997+ if not FileHints.IsEmpty then begin
3998+ if MainFormAfterCreateDone then
3999+ MessageDialog(FileHints.Text, mtInformation, [mbOK])
4000+ else begin
4001+ for i:=0 to FileHints.Count-1 do
4002+ LogSQL(FileHints[i]);
4003+ end;
4004+ end;
4005+ FileHints.Free;
4006+ end;
4007+
4008+
39794009function TMainForm.RunQueryFiles(Filenames: TStrings; Encoding: TEncoding; ForceRun: Boolean): Boolean;
39804010var
39814011 i, FilesProcessed: Integer;
@@ -5189,7 +5219,6 @@ procedure TMainform.popupQueryLoadClick(Sender: TObject);
51895219 Filename: String;
51905220 FileList: TStringList;
51915221 p: Integer;
5192- Tab: TQueryTab;
51935222begin
51945223 // Click on the popupQueryLoad
51955224 Filename := (Sender as TMenuItem).Caption;
@@ -5202,10 +5231,7 @@ procedure TMainform.popupQueryLoadClick(Sender: TObject);
52025231 end;
52035232 FileList := TStringList.Create;
52045233 FileList.Add(Filename);
5205- if not RunQueryFiles(FileList, nil, false) then begin
5206- Tab := GetOrCreateEmptyQueryTab(True);
5207- Tab.LoadContents(Filename, True, nil);
5208- end;
5234+ OpenQueryFiles(FileList, nil, False);
52095235 FileList.Free;
52105236end;
52115237
@@ -7769,12 +7795,7 @@ procedure TMainForm.FormDropFiles(Sender: TObject;
77697795 // query-memo - load their contents into seperate tabs
77707796 Files := TStringList.Create;
77717797 Files.AddStrings(FileNames);
7772- if not RunQueryFiles(Files, nil, False) then begin
7773- for i:=0 to Files.Count-1 do begin
7774- Tab := GetOrCreateEmptyQueryTab(True);
7775- Tab.LoadContents(Files[i], False, nil);
7776- end;
7777- end;
7798+ OpenQueryFiles(Files, nil, False);
77787799 Files.Free;
77797800end;
77807801
@@ -13637,12 +13658,7 @@ procedure TMainForm.actDataResetSortingExecute(Sender: TObject);
1363713658 LogSQL(f_('Preventing second application instance - disabled in %s > %s > %s.', [_('Tools'), _('Preferences'), _('General')]), lcInfo);
1363813659 ConnectionParams := nil;
1363913660 ParseCommandLine(ParamBlobToStr(Msg.CopyDataStruct.lpData), ConnectionParams, FileNames, RunFrom);
13640- if not RunQueryFiles(FileNames, nil, False) then begin
13641- for i:=0 to FileNames.Count-1 do begin
13642- Tab := GetOrCreateEmptyQueryTab(True);
13643- Tab.LoadContents(FileNames[i], True, nil);
13644- end;
13645- end;
13661+ OpenQueryFiles(FileNames, nil, False);
1364613662 if ConnectionParams <> nil then
1364713663 InitConnection(ConnectionParams, True, Connection);
1364813664 end else
0 commit comments