@@ -48,6 +48,7 @@ TfrmTableEditor = class(TFrame)
4848 comboCollation: TComboBox;
4949 lblEngine: TLabel;
5050 comboEngine: TComboBox;
51+ btnShowReverseForeignKeys: TToolButton;
5152 treeIndexes: TLazVirtualStringTree;
5253 tlbIndexes: TToolBar;
5354 btnAddIndex: TToolButton;
@@ -101,6 +102,8 @@ TfrmTableEditor = class(TFrame)
101102 btnClearCheckConstraints: TToolButton;
102103 listCheckConstraints: TLazVirtualStringTree;
103104 Copy1: TMenuItem;
105+ procedure btnShowReverseForeignKeysClick (Sender: TObject);
106+ procedure ListViewReverseForeignKeysDblClick (Sender: TObject);
104107 procedure Modification (Sender: TObject);
105108 procedure btnAddColumnClick (Sender: TObject);
106109 procedure btnRemoveColumnClick (Sender: TObject);
@@ -294,6 +297,7 @@ constructor TfrmTableEditor.Create(AOwner: TComponent);
294297 for i in ColNumsCheckboxes do begin
295298 listColumns.Header.Columns[i].Alignment := taCenter;
296299 end ;
300+ btnShowReverseForeignKeys.Down := AppSettings.ReadBool(asDisplayReverseForeignKeys);
297301 FixVT(listColumns);
298302 FixVT(treeIndexes);
299303 FixVT(listForeignKeys);
@@ -453,6 +457,7 @@ procedure TfrmTableEditor.Init(Obj: TDBObject);
453457 CreateCodeValid := False;
454458 AlterCodeValid := False;
455459 FReverseForeignKeysLoaded := False;
460+ btnShowReverseForeignKeysClick(Self);
456461 PageControlMainChange(Self); // Foreign key editor needs a hit
457462 // Buttons are randomly moved, since VirtualTree update, see #440
458463 btnSave.Top := Height - btnSave.Height - 3 ;
@@ -1051,6 +1056,42 @@ procedure TfrmTableEditor.Modification(Sender: TObject);
10511056 end ;
10521057end ;
10531058
1059+ procedure TfrmTableEditor.ListViewReverseForeignKeysDblClick (Sender: TObject);
1060+ var
1061+ ClickItem: TListItem;
1062+ Obj: TDBObject;
1063+ begin
1064+ // Create virtual object and let mainform search for it in the tree
1065+ ClickItem := ListViewReverseForeignKeys.Selected;
1066+ if not Assigned(ClickItem) then
1067+ Exit;
1068+ Obj := TDBObject.Create(DBObject.Connection);
1069+ Obj.NodeType := lntTable;
1070+ Obj.Database := ClickItem.Caption;
1071+ Obj.Name := ClickItem.SubItems[0 ];
1072+ MainForm.ActiveDbObj := Obj;
1073+ end ;
1074+
1075+ procedure TfrmTableEditor.btnShowReverseForeignKeysClick (Sender: TObject);
1076+ var
1077+ DoShow: Boolean;
1078+ begin
1079+ DoShow := btnShowReverseForeignKeys.Down;
1080+ if DoShow then begin
1081+ spltForeignKeyListings.Visible := True;
1082+ ListViewReverseForeignKeys.Visible := True;
1083+ spltForeignKeyListings.BringToFront;
1084+ ListViewReverseForeignKeys.BringToFront;
1085+ LoadReverseForeignKeys(Sender);
1086+ end
1087+ else begin
1088+ ListViewReverseForeignKeys.Visible := False;
1089+ spltForeignKeyListings.Visible := False;
1090+ listForeignKeys.Width := listForeignKeys.Parent.Width - tlbForeignKeys.Width;
1091+ end ;
1092+ AppSettings.WriteBool(asDisplayReverseForeignKeys, DoShow);
1093+ end ;
1094+
10541095
10551096procedure TfrmTableEditor.btnAddColumnClick (Sender: TObject);
10561097var
@@ -3086,9 +3127,15 @@ procedure TfrmTableEditor.LoadReverseForeignKeys(Sender: TObject);
30863127begin
30873128 if FReverseForeignKeysLoaded then
30883129 Exit;
3130+ if not ListViewReverseForeignKeys.Visible then
3131+ Exit;
3132+ if not ObjectExists then // Jump out early when creating a new table
3133+ Exit;
30893134 SqlGet := DBObject.Connection.SqlProvider.GetSql(qGetReverseForeignKeys, DBObject.AsStringMap);
3090- if SqlGet.IsEmpty then
3135+ if SqlGet.IsEmpty then begin
3136+ MainForm.LogSQL(_(' Database does not provide reverse foreign key listing' ));
30913137 Exit;
3138+ end ;
30923139 ListViewReverseForeignKeys.BeginUpdate;
30933140 ListViewReverseForeignKeys.Clear;
30943141 try
0 commit comments