Skip to content

Commit f1e4485

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 de9eeeb commit f1e4485

1 file changed

Lines changed: 9 additions & 10 deletions

File tree

source/main.pas

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11973,10 +11973,10 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1197311973
var
1197411974
Results: TDBQuery;
1197511975
RowNum: PInt64;
11976-
FocusedColumnName, ForeignColumnName, ReferenceTable: String;
11976+
FocusedColumnName, ForeignColumnName: String;
1197711977
ForeignKey: TForeignKey;
1197811978
i: Integer;
11979-
DBObj: TDBObject;
11979+
DBObj, ReferenceTable: TDBObject;
1198011980
Datatype: TDBDatatype;
1198111981
DbObjects: TDBObjectList;
1198211982
Filter: String;
@@ -11987,20 +11987,25 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1198711987
Results.RecNo := RowNum^;
1198811988
FocusedColumnName := Results.ColumnOrgNames[DataGrid.FocusedColumn-1];
1198911989
Conn := Results.Connection;
11990+
ReferenceTable := nil;
1199011991

1199111992
// find foreign key for current column
1199211993
for ForeignKey in ActiveDBObj.TableForeignKeys do begin
1199311994
i := ForeignKey.Columns.IndexOf(FocusedColumnName);
1199411995
if i > -1 then begin
1199511996
ForeignColumnName := ForeignKey.ForeignColumns[i];
11996-
ReferenceTable := ForeignKey.ReferenceTable;
11997+
ReferenceTable := ForeignKey.ReferenceTableObj;
1199711998
break;
1199811999
end;
1199912000
end;
1200012001
if ForeignColumnName = '' then begin
1200112002
LogSQL(f_('Foreign key not found for column "%s"', [FocusedColumnName]), lcInfo);
1200212003
Exit;
1200312004
end;
12005+
if ReferenceTable = nil then begin
12006+
LogSQL(_('Foreign key table not found'));
12007+
Exit;
12008+
end;
1200412009
Datatype := Results.DataType(DataGrid.FocusedColumn-1);
1200512010
// filter to show only rows linked by the foreign key
1200612011
if DataType.Category in [dtcBinary, dtcSpatial] then
@@ -12009,13 +12014,7 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1200912014
Filter := Conn.QuoteIdent(ForeignColumnName)+'='+Conn.EscapeString(Results.Col(DataGrid.FocusedColumn-1));
1201012015

1201112016
// Jumping to ReferenceTable. Caution, this invalidates the above used Results
12012-
DbObjects := Conn.GetDBObjects(ActiveDatabase);
12013-
for DBObj in DbObjects do begin
12014-
if DBObj.Database + '.' + DBObj.Name = ReferenceTable then begin
12015-
ActiveDBObj := DBObj;
12016-
Break;
12017-
end;
12018-
end;
12017+
ActiveDBObj := ReferenceTable;
1201912018

1202012019
SynMemoFilter.Text := Filter;
1202112020
ToggleFilterPanel(True);

0 commit comments

Comments
 (0)