Skip to content

Commit 8643172

Browse files
committed
fix: staying on current table by click on "follow foreign key" when the foreign table lives in a different database
Refs #2457
1 parent 1814ee9 commit 8643172

2 files changed

Lines changed: 13 additions & 11 deletions

File tree

extra/locale/heidisql.po

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ msgid ""
77
msgstr ""
88
"Project-Id-Version: HeidiSQL\n"
99
"POT-Creation-Date: 2012-11-05 21:40\n"
10-
"PO-Revision-Date: 2026-03-24 15:09+0100\n"
10+
"PO-Revision-Date: 2026-04-14 19:01+0200\n"
1111
"Last-Translator: Ansgar Becker <anse@heidisql.com>\n"
1212
"Language-Team: English (http://www.transifex.com/projects/p/heidisql/language/en/)\n"
1313
"Language: en\n"
@@ -6836,3 +6836,6 @@ msgstr "No password hash column available"
68366836

68376837
msgid "Default role:"
68386838
msgstr "Default role:"
6839+
6840+
msgid "Foreign key table not found"
6841+
msgstr "Foreign key table not found"

source/main.pas

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11734,10 +11734,10 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1173411734
var
1173511735
Results: TDBQuery;
1173611736
RowNum: PInt64;
11737-
FocusedColumnName, ForeignColumnName, ReferenceTable: String;
11737+
FocusedColumnName, ForeignColumnName: String;
1173811738
ForeignKey: TForeignKey;
1173911739
i: Integer;
11740-
DBObj: TDBObject;
11740+
DBObj, ReferenceTable: TDBObject;
1174111741
Datatype: TDBDatatype;
1174211742
DbObjects: TDBObjectList;
1174311743
Filter: String;
@@ -11748,20 +11748,25 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1174811748
Results.RecNo := RowNum^;
1174911749
FocusedColumnName := Results.ColumnOrgNames[DataGrid.FocusedColumn-1];
1175011750
Conn := Results.Connection;
11751+
ReferenceTable := nil;
1175111752

1175211753
// find foreign key for current column
1175311754
for ForeignKey in ActiveDBObj.TableForeignKeys do begin
1175411755
i := ForeignKey.Columns.IndexOf(FocusedColumnName);
1175511756
if i > -1 then begin
1175611757
ForeignColumnName := ForeignKey.ForeignColumns[i];
11757-
ReferenceTable := ForeignKey.ReferenceTable;
11758+
ReferenceTable := ForeignKey.ReferenceTableObj;
1175811759
break;
1175911760
end;
1176011761
end;
1176111762
if ForeignColumnName = '' then begin
1176211763
LogSQL(f_('Foreign key not found for column "%s"', [FocusedColumnName]), lcInfo);
1176311764
Exit;
1176411765
end;
11766+
if ReferenceTable = nil then begin
11767+
LogSQL(_('Foreign key table not found'));
11768+
Exit;
11769+
end;
1176511770
Datatype := Results.DataType(DataGrid.FocusedColumn-1);
1176611771
// filter to show only rows linked by the foreign key
1176711772
if DataType.Category in [dtcBinary, dtcSpatial] then
@@ -11770,13 +11775,7 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1177011775
Filter := Conn.QuoteIdent(ForeignColumnName)+'='+Conn.EscapeString(Results.Col(DataGrid.FocusedColumn-1));
1177111776

1177211777
// Jumping to ReferenceTable. Caution, this invalidates the above used Results
11773-
DbObjects := Conn.GetDBObjects(ActiveDatabase);
11774-
for DBObj in DbObjects do begin
11775-
if DBObj.Database + '.' + DBObj.Name = ReferenceTable then begin
11776-
ActiveDBObj := DBObj;
11777-
Break;
11778-
end;
11779-
end;
11778+
ActiveDBObj := ReferenceTable;
1178011779

1178111780
SynMemoFilter.Text := Filter;
1178211781
ToggleFilterPanel(True);

0 commit comments

Comments
 (0)