@@ -11973,10 +11973,10 @@ procedure TMainForm.actFollowForeignKeyExecute(Sender: TObject);
1197311973var
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