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