ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/examples/DBAdmin/MainFormUnit.pas
Revision: 272
Committed: Mon Feb 4 13:34:37 2019 UTC (5 years, 2 months ago) by tony
Content type: text/x-pascal
File size: 38103 byte(s)
Log Message:
Fixes merged

File Contents

# User Rev Content
1 tony 158 (*
2     * MainFormUnit.pas
3     * Copyright (C) 2018 Tony Whyman <tony@mwasoftware.co.uk>
4     *
5     * DBAdmin is free software: you can redistribute it and/or modify it
6     * under the terms of the GNU General Public License as published by the
7     * Free Software Foundation, either version 3 of the License, or
8     * (at your option) any later version.
9     *
10     * DBAdmin is distributed in the hope that it will be useful, but
11     * WITHOUT ANY WARRANTY; without even the implied warranty of
12     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13     * See the GNU General Public License for more details.
14     *
15     * You should have received a copy of the GNU General Public License along
16     * with this program. If not, see <http://www.gnu.org/licenses/>.
17     *)
18     unit MainFormUnit;
19    
20     {$mode objfpc}{$H+}
21    
22     interface
23    
24     uses
25 tony 272 Classes, SysUtils, FileUtil, SynEdit, SynHighlighterSQL, SynGutterCodeFolding,
26     Forms, Controls, Graphics, Dialogs, Menus, ComCtrls, ActnList, StdCtrls,
27     DbCtrls, ExtCtrls, Buttons, db, IBLookupComboEditBox, IBDynamicGrid,
28     IBTreeView, IBDatabaseInfo, IBXServices, IBExtract, IB;
29 tony 158
30     type
31    
32     { TMainForm }
33    
34     TMainForm = class(TForm)
35     AccessRightsPopup: TPopupMenu;
36     AccessRightsSource: TDataSource;
37 tony 263 ClientLibrary: TLabel;
38 tony 272 ConfigDataGrid: TIBDynamicGrid;
39     ConfigDataLabel: TLabel;
40     ConfigDataSource: TDataSource;
41     Edit12: TEdit;
42     Edit2: TEdit;
43     Edit3: TEdit;
44     Edit4: TEdit;
45     Edit5: TEdit;
46     Edit6: TEdit;
47     Edit7: TEdit;
48     Edit8: TEdit;
49     Edit9: TEdit;
50 tony 267 Label44: TLabel;
51     ClientServerVersion: TMemo;
52 tony 272 Label45: TLabel;
53     Label46: TLabel;
54     Label47: TLabel;
55     Label48: TLabel;
56     Label49: TLabel;
57     Label50: TLabel;
58     Label51: TLabel;
59     Label52: TLabel;
60     Label53: TLabel;
61     Label54: TLabel;
62     OpenDatabasesList: TMemo;
63 tony 231 MenuItem20: TMenuItem;
64     MenuItem21: TMenuItem;
65 tony 272 Panel10: TPanel;
66 tony 231 RunScript: TAction;
67 tony 209 AutoAdmin: TCheckBox;
68 tony 158 DatabaseAliasName: TEdit;
69     DBEdit5: TDBEdit;
70     DBEdit6: TDBEdit;
71     IncludeUserGrants: TCheckBox;
72     Label41: TLabel;
73     Label42: TLabel;
74 tony 229 Label43: TLabel;
75     DBComments: TMemo;
76 tony 158 MenuItem19: TMenuItem;
77     RevokeAll: TAction;
78     AuthMapSource: TDataSource;
79     SubjectAccessRightsSource: TDataSource;
80     DBTablesSource: TDataSource;
81     IBDynamicGrid5: TIBDynamicGrid;
82     SubjectAccessRightsGrid: TIBDynamicGrid;
83     AccessRightsTreeView: TIBTreeView;
84     SelectAllTables: TCheckBox;
85     Label40: TLabel;
86     SelectedTablesGrid: TIBDynamicGrid;
87     Label37: TLabel;
88     Panel8: TPanel;
89     DBTablesPanel: TPanel;
90     Panel9: TPanel;
91     Phase2Repair: TAction;
92     ApplySelected: TAction;
93     AuthMethLabel: TLabel;
94     AuthMethod: TDBEdit;
95     Button7: TButton;
96     IgnoreChecksumsOnRepair: TCheckBox;
97     DBTablesSplitter: TSplitter;
98     Alltables: TRadioButton;
99     SelectedTablesOnly: TRadioButton;
100     MappingsTab: TTabSheet;
101     AccessRightsTab: TTabSheet;
102     Splitter5: TSplitter;
103 tony 231 ToolButton6: TToolButton;
104     ToolButton7: TToolButton;
105 tony 158 UpdateColsPanel: TPanel;
106     ValidateRepairRecordFragments: TCheckBox;
107     IgnoreChecksums: TCheckBox;
108     Label34: TLabel;
109     ReadOnlyValidation: TCheckBox;
110     RecordFragments: TCheckBox;
111     Commit2Phase: TAction;
112     DBOwner: TEdit;
113     AttmntODS12Panel: TPanel;
114     Label33: TLabel;
115     RepairOptionsTab: TTabSheet;
116     ValidateOptions: TPageControl;
117     RemoteOSLabel: TLabel;
118     RemoteOSUser: TDBEdit;
119     SecDatabase: TEdit;
120     RollbackAll: TAction;
121     CommitAll: TAction;
122     Button3: TButton;
123     Button4: TButton;
124     Button5: TButton;
125     Button6: TButton;
126     IBDynamicGrid3: TIBDynamicGrid;
127     Label38: TLabel;
128     Label39: TLabel;
129     LimboListSource: TDataSource;
130     LimboReport: TMemo;
131     RunRepair: TAction;
132     Button2: TButton;
133     SelectRepairAction: TComboBox;
134     DisconnectAttachment: TAction;
135     LimboTab: TTabSheet;
136     ValidateOptionsTab: TTabSheet;
137     MenuItem17: TMenuItem;
138     AttmtPopup: TPopupMenu;
139     MenuItem18: TMenuItem;
140     RepairTab: TTabSheet;
141     ToggleAutoRefresh: TAction;
142     AttachSource: TDataSource;
143     DBCheckBox1: TDBCheckBox;
144     DBEdit2: TDBEdit;
145     DBEdit3: TDBEdit;
146     DBEdit7: TDBEdit;
147     DeleteTag: TAction;
148     AddTag: TAction;
149     AttmtGrid: TIBDynamicGrid;
150     Label31: TLabel;
151     Label32: TLabel;
152     Label35: TLabel;
153     MenuItem11: TMenuItem;
154     MenuItem12: TMenuItem;
155     MenuItem13: TMenuItem;
156     MenuItem14: TMenuItem;
157     MenuItem15: TMenuItem;
158     MenuItem16: TMenuItem;
159     Panel7: TPanel;
160     AttDetailsPanel: TPanel;
161     UserPopup: TPopupMenu;
162     UserTagPopup: TPopupMenu;
163     SaveChanges: TAction;
164     DeleteUser: TAction;
165     ChgPassword: TAction;
166     AddUser: TAction;
167     AddFileBtn: TButton;
168     AddShadowBtn: TButton;
169     AllocatedPages: TEdit;
170     Button1: TButton;
171     DatabaseOnline: TCheckBox;
172     DBCharacterSet: TIBLookupComboEditBox;
173     DBCharSetRO: TDBEdit;
174 tony 272 DateDbCreated: TDBEdit;
175 tony 158 DBEdit4: TDBEdit;
176     DBIsReadOnly: TCheckBox;
177     DBText1: TDBText;
178     DropDatabase: TAction;
179     Edit1: TEdit;
180     Edit10: TEdit;
181     Edit11: TEdit;
182     PageBuffers: TEdit;
183     ODSVersionString: TEdit;
184     ServerVersionNo: TEdit;
185     DBSQLDialect: TEdit;
186     ConnectString: TEdit;
187     UserManagerTab: TTabSheet;
188     FilesTab: TTabSheet;
189     IBDynamicGrid1: TIBDynamicGrid;
190     IBDynamicGrid2: TIBDynamicGrid;
191     AttmtTimer: TTimer;
192     UserManagerGrid: TIBDynamicGrid;
193 tony 272 RolesGrid: TIBDynamicGrid;
194 tony 158 TagsGrid: TIBDynamicGrid;
195     IsShadowChk: TCheckBox;
196     Label1: TLabel;
197     Label10: TLabel;
198     Label11: TLabel;
199     Label12: TLabel;
200     Label13: TLabel;
201     Label14: TLabel;
202     Label15: TLabel;
203     Label16: TLabel;
204     Label17: TLabel;
205     Label18: TLabel;
206     Label19: TLabel;
207     Label2: TLabel;
208     Label20: TLabel;
209     Label21: TLabel;
210     Label22: TLabel;
211 tony 272 DateDBCreatedLabel: TLabel;
212 tony 158 Label24: TLabel;
213     Label25: TLabel;
214     Label26: TLabel;
215     Label27: TLabel;
216     Label28: TLabel;
217     Label29: TLabel;
218     Label3: TLabel;
219     Label30: TLabel;
220     Label36: TLabel;
221     Label4: TLabel;
222     Label5: TLabel;
223     Label6: TLabel;
224     Label7: TLabel;
225     Label8: TLabel;
226     Label9: TLabel;
227     LingerDelay: TEdit;
228     MenuItem10: TMenuItem;
229     MenuItem9: TMenuItem;
230     MenuItem8: TMenuItem;
231     NoReserve: TCheckBox;
232     PageControl1: TPageControl;
233     PagesAvail: TEdit;
234     PagesUsed: TEdit;
235     Panel1: TPanel;
236     Panel2: TPanel;
237     Panel3: TPanel;
238     Panel4: TPanel;
239     Panel5: TPanel;
240 tony 272 RolesHeaderPanel: TPanel;
241 tony 158 TagsHeader: TPanel;
242     PrimaryDBFile: TEdit;
243     Properties: TTabSheet;
244     RemoveShadowBtn: TButton;
245     RoleSource: TDataSource;
246     Save: TAction;
247     IBExtract1: TIBExtract;
248     SaveDialog: TSaveDialog;
249     SchemaTab: TTabSheet;
250     ServerLog: TMemo;
251     ServerTab: TTabSheet;
252     Splitter1: TSplitter;
253     Splitter2: TSplitter;
254     Splitter3: TSplitter;
255     Splitter4: TSplitter;
256     SQlSaveDialog: TSaveDialog;
257     RemoveShadow: TAction;
258     AddShadowSet: TAction;
259     AddSecondary: TAction;
260     MenuItem6: TMenuItem;
261     MenuItem7: TMenuItem;
262     OpenDatabase: TAction;
263     CharSetSource: TDataSource;
264     DatabaseSource: TDataSource;
265     AttmtSource: TDataSource;
266     DBCharSetSource: TDataSource;
267     IBDatabaseInfo: TIBDatabaseInfo;
268     MenuItem3: TMenuItem;
269     MenuItem4: TMenuItem;
270     MenuItem5: TMenuItem;
271     Restore: TAction;
272     Backup: TAction;
273     MenuImages: TImageList;
274     MenuItem1: TMenuItem;
275     MenuItem2: TMenuItem;
276     Quit: TAction;
277     ActionList1: TActionList;
278     MainMenu1: TMainMenu;
279     SecDBFilesSource: TDataSource;
280     ShadowSource: TDataSource;
281     StatisticsTab: TTabSheet;
282     StatsMemo: TMemo;
283     StatsOptions: TComboBox;
284     StatusBar1: TStatusBar;
285     SweepInterval: TEdit;
286     SyncWrites: TCheckBox;
287     SynEdit1: TSynEdit;
288     SynSQLSyn1: TSynSQLSyn;
289     AttachmentsTab: TTabSheet;
290     ToolBar1: TToolBar;
291     ToolButton1: TToolButton;
292     ToolButton2: TToolButton;
293     ToolButton3: TToolButton;
294     ToolButton4: TToolButton;
295     ToolButton5: TToolButton;
296     UserListSource: TDataSource;
297     UserTagsSource: TDataSource;
298     ValidationReport: TMemo;
299     procedure AccessRightsTabHide(Sender: TObject);
300     procedure AccessRightsTabShow(Sender: TObject);
301     procedure AddSecondaryExecute(Sender: TObject);
302     procedure AddShadowSetExecute(Sender: TObject);
303     procedure AddTagExecute(Sender: TObject);
304     procedure AddTagUpdate(Sender: TObject);
305     procedure AddUserExecute(Sender: TObject);
306     procedure AddUserUpdate(Sender: TObject);
307     procedure ApplySelectedExecute(Sender: TObject);
308     procedure AttachmentsTabHide(Sender: TObject);
309     procedure AttachmentsTabShow(Sender: TObject);
310     procedure AttmtTimerTimer(Sender: TObject);
311     procedure AutoAdminChange(Sender: TObject);
312     procedure BackupExecute(Sender: TObject);
313     procedure ChgPasswordExecute(Sender: TObject);
314     procedure ChgPasswordUpdate(Sender: TObject);
315     procedure Commit2PhaseExecute(Sender: TObject);
316     procedure CommitAllExecute(Sender: TObject);
317     procedure CommitAllUpdate(Sender: TObject);
318     procedure DatabaseOnlineChange(Sender: TObject);
319     procedure DBCharacterSetEditingDone(Sender: TObject);
320 tony 229 procedure DBCommentsEditingDone(Sender: TObject);
321 tony 158 procedure DBIsReadOnlyChange(Sender: TObject);
322     procedure DBSQLDialectEditingDone(Sender: TObject);
323     procedure DeleteTagExecute(Sender: TObject);
324     procedure DeleteTagUpdate(Sender: TObject);
325     procedure DeleteUserExecute(Sender: TObject);
326     procedure DeleteUserUpdate(Sender: TObject);
327     procedure DisconnectAttachmentExecute(Sender: TObject);
328     procedure DisconnectAttachmentUpdate(Sender: TObject);
329     procedure DropDatabaseExecute(Sender: TObject);
330     procedure DropDatabaseUpdate(Sender: TObject);
331     procedure AccessRightsTreeViewSelectionChanged(Sender: TObject);
332 tony 209 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
333 tony 158 procedure MappingsTabHide(Sender: TObject);
334     procedure MappingsTabShow(Sender: TObject);
335     procedure PageBuffersEditingDone(Sender: TObject);
336 tony 209 procedure QuitExecute(Sender: TObject);
337 tony 158 procedure RepairTabHide(Sender: TObject);
338     procedure RepairTabShow(Sender: TObject);
339     procedure RevokeAllExecute(Sender: TObject);
340     procedure RevokeAllUpdate(Sender: TObject);
341 tony 231 procedure RunScriptExecute(Sender: TObject);
342 tony 158 procedure SelectAllTablesChange(Sender: TObject);
343     procedure SelectedTablesOnlyChange(Sender: TObject);
344     procedure SelectRepairActionCloseUp(Sender: TObject);
345     procedure SubjectAccessRightsSourceDataChange(Sender: TObject; Field: TField
346     );
347     procedure UserManagerTabHide(Sender: TObject);
348     procedure UserManagerTabShow(Sender: TObject);
349     procedure FilesTabShow(Sender: TObject);
350     procedure FormShow(Sender: TObject);
351     procedure IsShadowChkChange(Sender: TObject);
352     procedure LimboTabHide(Sender: TObject);
353     procedure LimboTabShow(Sender: TObject);
354     procedure LingerDelayEditingDone(Sender: TObject);
355     procedure NoReserveChange(Sender: TObject);
356     procedure OpenDatabaseExecute(Sender: TObject);
357     procedure PropertiesShow(Sender: TObject);
358     procedure RemoveShadowExecute(Sender: TObject);
359     procedure RemoveShadowUpdate(Sender: TObject);
360     procedure RestoreExecute(Sender: TObject);
361     procedure RollbackAllExecute(Sender: TObject);
362     procedure RunRepairExecute(Sender: TObject);
363     procedure SaveChangesExecute(Sender: TObject);
364     procedure SaveChangesUpdate(Sender: TObject);
365     procedure SaveExecute(Sender: TObject);
366     procedure SaveUpdate(Sender: TObject);
367     procedure SchemaTabShow(Sender: TObject);
368     procedure ServerTabHide(Sender: TObject);
369     procedure ServerTabShow(Sender: TObject);
370     procedure StatisticsTabHide(Sender: TObject);
371     procedure StatisticsTabShow(Sender: TObject);
372     procedure StatsOptionsCloseUp(Sender: TObject);
373     procedure SweepIntervalEditingDone(Sender: TObject);
374     procedure SyncWritesChange(Sender: TObject);
375     procedure ToggleAutoRefreshExecute(Sender: TObject);
376     procedure ToggleAutoRefreshUpdate(Sender: TObject);
377     private
378     FLoading: boolean;
379     FLastStatsIndex: integer;
380     FServerError: boolean;
381 tony 272 procedure DoDBOpen(Data: PtrInt);
382     procedure LoadServerData;
383     procedure DoExtract(Data: PtrInt);
384     procedure ConfigureOnlineValidation;
385     protected
386 tony 158 procedure HandleDBConnect(Sender: TObject);
387     procedure HandleLoadData(Sender: TObject);
388 tony 272 procedure ConfigureForServerVersion; virtual;
389     procedure ConnectToDatabase; virtual;
390     procedure LoadData; virtual;
391 tony 158 public
392     end;
393    
394     var
395     MainForm: TMainForm;
396    
397     implementation
398    
399     {$R *.lfm}
400    
401     uses DataModule, ShutdownRegDlgUnit, AddSecondaryFileDlgUnit, NewUserDlgUnit,
402 tony 231 ChgPasswordDlgUnit, FBMessages, ExecuteSQLScriptDlgUnit;
403 tony 158
404     { TMainForm }
405    
406     procedure TMainForm.FormShow(Sender: TObject);
407     begin
408 tony 209 {Set IB Exceptions to only show text message - omit SQLCode and Engine Code}
409 tony 272 DBDataModule.IBDatabase1.FirebirdAPI.GetStatus.SetIBDataBaseErrorMessages([ShowIBMessage]);
410 tony 209 Application.ExceptionDialog := aedOkMessageBox;
411 tony 158 PageControl1.ActivePage := Properties;
412 tony 272 DBDataModule.AfterDBConnect := @HandleDBConnect;
413     DBDataModule.AfterDataReload := @HandleLoadData;
414 tony 158 AccessRightsTreeView.DataSource := nil;
415     AccessRightsTreeView.DataSource := AccessRightsSource;
416     SubjectAccessRightsGrid.DataSource := nil;
417     SubjectAccessRightsGrid.DataSource := SubjectAccessRightsSource;
418 tony 272 PageControl1.Visible := false;
419     Application.QueueAsyncCall(@DoDBOpen,0);
420 tony 158 end;
421    
422     procedure TMainForm.IsShadowChkChange(Sender: TObject);
423     begin
424     if FLoading then Exit;
425 tony 272 if not DBDataModule.IsShadowDatabase then
426 tony 158 begin
427     MessageDlg('A Normal Database cannot be changed into a Shadow Database',mtError,[mbOK],0);
428     FLoading := true;
429     try
430     IsShadowChk.Checked := false;
431     finally
432     FLoading := false;
433     end;
434     end
435     else
436 tony 272 DBDataModule.ActivateShadow;
437 tony 158 end;
438    
439     procedure TMainForm.LimboTabHide(Sender: TObject);
440     begin
441     LimboListSource.DataSet.Active := false;
442     end;
443    
444     procedure TMainForm.LimboTabShow(Sender: TObject);
445     begin
446     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
447     LimboListSource.DataSet.Active := true;
448     end;
449    
450     procedure TMainForm.LingerDelayEditingDone(Sender: TObject);
451     begin
452     if FLoading then Exit;
453 tony 272 DBDataModule.LingerDelay := LingerDelay.Text;
454 tony 158 end;
455    
456     procedure TMainForm.NoReserveChange(Sender: TObject);
457     begin
458     if FLoading then Exit;
459 tony 272 DBDataModule.NoReserve := NoReserve.Checked;
460 tony 158 end;
461    
462     procedure TMainForm.DBCharacterSetEditingDone(Sender: TObject);
463     begin
464     with DBCharSetSource.Dataset do
465     if State = dsEdit then
466     Post;
467     end;
468    
469 tony 229 procedure TMainForm.DBCommentsEditingDone(Sender: TObject);
470     begin
471 tony 272 DBDataModule.Description := DBComments.Lines.Text;
472 tony 229 end;
473    
474 tony 158 procedure TMainForm.AutoAdminChange(Sender: TObject);
475     begin
476     if FLoading then Exit;
477     try
478 tony 272 DBDataModule.AutoAdmin := AutoAdmin.Checked;
479 tony 158 except on E:Exception do
480     begin
481     MessageDlg(E.message,mtError,[mbOK],0);
482     FLoading := true;
483     try
484     AutoAdmin.Checked := not AutoAdmin.Checked;
485     finally
486     FLoading := false;
487     end;
488     end;
489     end;
490     end;
491    
492     procedure TMainForm.AddSecondaryExecute(Sender: TObject);
493     var FileName: string;
494     StartAt: integer;
495     FileLength: integer;
496     Pages: boolean;
497     begin
498     StartAt := 0;
499 tony 272 if DBDataModule.IsDatabaseOnline then
500 tony 158 begin
501     MessageDlg('The database must be shutdown before adding secondary files',
502     mtError,[mbOK],0);
503     exit;
504     end;
505    
506     if AddSecondaryFileDlg.ShowModal(FileName,StartAt,FileLength,Pages) = mrOK then
507     begin
508     if not Pages then
509     begin
510     StartAt := StartAt*1024*1024 div IBDatabaseInfo.PageSize;
511     if FileLength <> -1 then
512     FileLength := FileLength*1024*1024 div IBDatabaseInfo.PageSize;
513     end;
514 tony 272 DBDataModule.AddSecondaryFile(FileName,StartAt,FileLength);
515 tony 158 end;
516     end;
517    
518     procedure TMainForm.AccessRightsTabShow(Sender: TObject);
519     begin
520     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
521     UserListSource.DataSet.Active := true;
522     AccessRightsSource.DataSet.Active := true;
523     AccessRightsTreeViewSelectionChanged(nil);
524     end;
525    
526     procedure TMainForm.AccessRightsTabHide(Sender: TObject);
527     begin
528     SubjectAccessRightsSource.DataSet.Active := false;
529     AccessRightsSource.DataSet.Active := false;
530     UserListSource.DataSet.Active := PageControl1.ActivePage = UserManagerTab;
531     end;
532    
533     procedure TMainForm.AddShadowSetExecute(Sender: TObject);
534     begin
535 tony 272 DBDataModule.AddShadowSet;
536 tony 158 end;
537    
538     procedure TMainForm.AddTagExecute(Sender: TObject);
539     begin
540     UserTagsSource.DataSet.Append;
541     end;
542    
543     procedure TMainForm.AddTagUpdate(Sender: TObject);
544     begin
545     (Sender as TAction).Enabled := (UserTagsSource.State = dsBrowse);
546     end;
547    
548     procedure TMainForm.AddUserExecute(Sender: TObject);
549     var NewUserName: string;
550     NewPassword: string;
551     begin
552     NewUserName := '';
553     if NewUserDlg.ShowModal(NewUserName,NewPassword) = mrOK then
554     with UserListSource.DataSet do
555     begin
556     Append;
557 tony 209 FieldByName('SEC$USER_NAME').AsString := AnsiUpperCase(NewUserName);
558     FieldByName('SEC$PASSWORD').AsString := NewPassword;
559 tony 158 end;
560     end;
561    
562     procedure TMainForm.AddUserUpdate(Sender: TObject);
563     begin
564     (Sender as TAction).Enabled := (UserListSource.State = dsBrowse) and
565 tony 272 ((DBDataModule.ServiceUserName = 'SYSDBA') or DBDataModule.HasUserAdminPrivilege);
566 tony 158 end;
567    
568     procedure TMainForm.ApplySelectedExecute(Sender: TObject);
569     begin
570 tony 272 DBDataModule.LimboResolution(NoGlobalAction,LimboReport.Lines);
571 tony 158 end;
572    
573     procedure TMainForm.AttachmentsTabHide(Sender: TObject);
574     begin
575     AttachSource.DataSet.Active := false;
576     AttmtTimer.Enabled := false;
577     end;
578    
579     procedure TMainForm.AttachmentsTabShow(Sender: TObject);
580     begin
581     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
582     AttachSource.DataSet.Active := true;
583     AttmtGrid.ShowEditorPanel; {assume located at current connection}
584     end;
585    
586     procedure TMainForm.AttmtTimerTimer(Sender: TObject);
587     begin
588 tony 272 DBDataModule.CurrentTransaction.Commit; {force a refresh}
589 tony 158 end;
590    
591     procedure TMainForm.BackupExecute(Sender: TObject);
592     begin
593 tony 272 DBDataModule.BackupDatabase;
594 tony 158 end;
595    
596     procedure TMainForm.ChgPasswordExecute(Sender: TObject);
597     var NewPassword: string;
598     begin
599     NewPassword := '';
600     if ChgPasswordDlg.ShowModal(NewPassword) = mrOK then
601     with UserListSource.DataSet do
602     begin
603     Edit;
604 tony 209 FieldByName('SEC$PASSWORD').AsString := NewPassword;
605 tony 158 try
606     Post
607     except
608     Cancel;
609     raise;
610     end;
611     end;
612     end;
613    
614     procedure TMainForm.ChgPasswordUpdate(Sender: TObject);
615     begin
616     (Sender as TAction).Enabled := UserListSource.DataSet.Active and (UserListSource.DataSet.RecordCount > 0);
617     end;
618    
619     procedure TMainForm.Commit2PhaseExecute(Sender: TObject);
620     begin
621 tony 272 DBDataModule.LimboResolution(RecoverTwoPhaseGlobal,LimboReport.Lines);
622 tony 158 end;
623    
624     procedure TMainForm.CommitAllExecute(Sender: TObject);
625     begin
626 tony 272 DBDataModule.LimboResolution(CommitGlobal,LimboReport.Lines);
627 tony 158 end;
628    
629     procedure TMainForm.CommitAllUpdate(Sender: TObject);
630     begin
631     with LimboListSource.DataSet do
632     (Sender as TAction).Enabled := Active and (RecordCount > 0);
633     end;
634    
635     procedure TMainForm.DatabaseOnlineChange(Sender: TObject);
636 tony 209 var ShutDownMode: TDBShutDownMode;
637 tony 158 Delay: integer;
638     begin
639     if FLoading then Exit;
640     ShutDownMode := DenyTransaction;
641     Delay := 60;
642     if DatabaseOnline.Checked then
643 tony 272 DBDataModule.BringDatabaseOnline
644 tony 158 else
645     if ShutdownReqDlg.ShowModal(DatabaseAliasName.Text,ShutDownMode,Delay) = mrOK then
646 tony 272 DBDataModule.Shutdown(ShutdownMode,Delay);
647 tony 158 end;
648    
649     procedure TMainForm.DBIsReadOnlyChange(Sender: TObject);
650     begin
651     if FLoading then Exit;
652     try
653 tony 272 DBDataModule.DBReadOnly := DBIsReadOnly.Checked;
654 tony 158 except on E:Exception do
655     MessageDlg(E.message,mtError,[mbOK],0);
656     end;
657     end;
658    
659     procedure TMainForm.DBSQLDialectEditingDone(Sender: TObject);
660     begin
661     if FLoading then Exit;
662 tony 272 DBDataModule.DBSQLDialect := StrToInt(DBSQLDialect.Text);
663 tony 158 end;
664    
665     procedure TMainForm.DeleteTagExecute(Sender: TObject);
666     begin
667     UserTagsSource.DataSet.Delete;
668     end;
669    
670     procedure TMainForm.DeleteTagUpdate(Sender: TObject);
671     begin
672     (Sender as TAction).Enabled := UserTagsSource.DataSet.Active and (UserTagsSource.DataSet.RecordCount > 0);
673     end;
674    
675     procedure TMainForm.DeleteUserExecute(Sender: TObject);
676     begin
677 tony 209 if MessageDlg('Do you really want to delete user ' + Trim(UserListSource.DataSet.FieldByName('SEC$USER_NAME').AsString),
678 tony 158 mtConfirmation,[mbYes,mbNo],0) = mrYes then
679     UserListSource.DataSet.Delete;
680     end;
681    
682     procedure TMainForm.DeleteUserUpdate(Sender: TObject);
683     begin
684     (Sender as TAction).Enabled := UserListSource.DataSet.Active and (UserListSource.DataSet.RecordCount > 0) and
685 tony 272 ((DBDataModule.ServiceUserName = 'SYSDBA') or DBDataModule.HasUserAdminPrivilege);
686 tony 158 end;
687    
688     procedure TMainForm.DisconnectAttachmentExecute(Sender: TObject);
689     begin
690     if MessageDlg('Disconnect Attachment ID ' + AttachSource.DataSet.FieldByName('MON$ATTACHMENT_ID').AsString,
691     mtConfirmation,[mbYes,mbNo],0) = mrYes then
692     AttachSource.DataSet.Delete;
693     end;
694    
695     procedure TMainForm.DisconnectAttachmentUpdate(Sender: TObject);
696     begin
697     with AttachSource.DataSet do
698     (Sender as TAction).Enabled := Active and (RecordCount > 0)
699     and (FieldByName('MON$ATTACHMENT_ID').AsInteger <>
700     AttmtSource.DataSet.FieldByName('MON$ATTACHMENT_ID').AsInteger);
701     end;
702    
703     procedure TMainForm.DropDatabaseExecute(Sender: TObject);
704     begin
705     if MessageDlg(Format('Do you really want to delete the database "%s". You will lose all your data!',
706     [IBDatabaseInfo.Database.DatabaseName]),mtConfirmation,[mbYes,mbNo],0) = mrYes then
707     begin
708 tony 272 DBDataModule.DropDatabase;
709     DBDataModule.Connect;
710 tony 158 if not IBDatabaseInfo.Database.Connected then Close;
711     end;
712     end;
713    
714     procedure TMainForm.DropDatabaseUpdate(Sender: TObject);
715     begin
716     (Sender as TAction).Enabled := IBDatabaseInfo.Database.Connected;
717     end;
718    
719     procedure TMainForm.AccessRightsTreeViewSelectionChanged(Sender: TObject);
720     begin
721     if SubjectAccessRightsSource.DataSet = nil then Exit;
722     if AccessRightsSource.DataSet.Active then
723     begin
724     if (AccessRightsTreeView.Selected = nil) or (AccessRightsTreeView.Selected.Parent = nil) then
725     SubjectAccessRightsSource.DataSet.Active := false
726     else
727 tony 272 DBDataModule.SyncSubjectAccessRights(TIBTreeNode(AccessRightsTreeView.Selected).KeyValue);
728 tony 158 end;
729     end;
730    
731 tony 209 procedure TMainForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
732     begin
733 tony 272 DBDataModule.Disconnect;
734 tony 209 end;
735    
736 tony 158 procedure TMainForm.MappingsTabHide(Sender: TObject);
737     begin
738     AuthMapSource.DataSet.Active := false;
739     end;
740    
741     procedure TMainForm.MappingsTabShow(Sender: TObject);
742     begin
743     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
744 tony 209 AuthMapSource.DataSet.Active := IBDatabaseInfo.ODSMajorVersion > 11;
745 tony 158 end;
746    
747     procedure TMainForm.PageBuffersEditingDone(Sender: TObject);
748     begin
749 tony 272 DBDataModule.PageBuffers := StrToInt(PageBuffers.Text);
750 tony 158 end;
751    
752 tony 209 procedure TMainForm.QuitExecute(Sender: TObject);
753     begin
754     Close;
755     end;
756    
757 tony 158 procedure TMainForm.RepairTabHide(Sender: TObject);
758     begin
759     DBTablesSource.DataSet.Active := false;
760     end;
761    
762     procedure TMainForm.RepairTabShow(Sender: TObject);
763     begin
764     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
765     SelectRepairActionCloseUp(nil);
766     ValidateOptions.ActivePage := ValidateOptionsTab;
767     end;
768    
769     procedure TMainForm.RevokeAllExecute(Sender: TObject);
770     begin
771     if MessageDlg('Revoke all Access Rights from User ' + Trim(AccessRightsTreeView.Selected.Text),
772     mtConfirmation,[mbYes,mbNo],0) = mrYes then
773 tony 272 DBDataModule.RevokeAll;
774 tony 158 end;
775    
776     procedure TMainForm.RevokeAllUpdate(Sender: TObject);
777     begin
778     with AccessRightsSource.DataSet do
779     (Sender as TAction).Enabled := Active and (RecordCount > 0) and
780     (FieldByName('SUBJECT_TYPE').AsInteger = 8);
781     end;
782    
783 tony 231 procedure TMainForm.RunScriptExecute(Sender: TObject);
784     begin
785     ExecuteSQLScriptDlg.ShowModal;
786     end;
787    
788 tony 158 procedure TMainForm.SelectAllTablesChange(Sender: TObject);
789     var aBookmark: TBookmark;
790     begin
791     with DBTablesSource.DataSet do
792     if Active then
793     begin
794     aBookmark := Bookmark;
795     DisableControls;
796     try
797     First;
798     while not EOF do
799     begin
800     Edit;
801     if SelectAllTables.Checked then
802     FieldByName('Selected').AsInteger := 1
803     else
804     FieldByName('Selected').AsInteger := 0;
805     Post;
806     Next;
807     end;
808     finally
809     Bookmark := aBookmark;
810     EnableControls;
811     end;
812     end;
813     end;
814    
815     procedure TMainForm.SelectedTablesOnlyChange(Sender: TObject);
816     begin
817     SelectedTablesGrid.Enabled := SelectedTablesOnly.Checked;
818     SelectAllTables.Enabled := SelectedTablesOnly.Checked;
819     end;
820    
821     procedure TMainForm.SelectRepairActionCloseUp(Sender: TObject);
822     begin
823     if (SelectRepairAction.ItemIndex = 1) and (IBDatabaseInfo.ODSMajorVersion < 12) then
824     begin
825     MessageDlg('Online validation is not support by Firebird prior to release 3',
826     mtError,[mbOK],0);
827     SelectRepairAction.ItemIndex := 2;
828     end;
829     ValidateOptions.Enabled := SelectRepairAction.ItemIndex = 2;
830     ConfigureOnlineValidation;
831     end;
832    
833     procedure TMainForm.SubjectAccessRightsSourceDataChange(Sender: TObject;
834     Field: TField);
835     begin
836     if (Field = nil) and (not (Sender as TDataSource).Dataset.FieldByName('UPDATE_COLUMNS').IsNull or
837     not (Sender as TDataSource).Dataset.FieldByName('REFERENCE_COLUMNS').IsNull) then
838     SubjectAccessRightsGrid.ShowEditorPanel;
839     end;
840    
841     procedure TMainForm.UserManagerTabHide(Sender: TObject);
842     begin
843     UserListSource.DataSet.Active := PageControl1.ActivePage = AccessRightsTab;
844     end;
845    
846     procedure TMainForm.UserManagerTabShow(Sender: TObject);
847     begin
848 tony 272 if not Visible or not IBDatabaseInfo.Database.Connected or DBDataModule.EmbeddedMode then Exit;
849 tony 158 UserListSource.DataSet.Active := true;
850     end;
851    
852     procedure TMainForm.FilesTabShow(Sender: TObject);
853     begin
854     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
855     PrimaryDBFile.Text := IBDatabaseInfo.DBFileName;
856     SecDBFilesSource.DataSet.Active := true;
857     ShadowSource.DataSet.Active := true;
858     end;
859    
860     procedure TMainForm.OpenDatabaseExecute(Sender: TObject);
861     begin
862     PageControl1.ActivePage := Properties;
863 tony 272 DBDataModule.Connect;
864 tony 158 if not IBDatabaseInfo.Database.Connected then Close;
865     end;
866    
867     procedure TMainForm.PropertiesShow(Sender: TObject);
868     begin
869 tony 272 if Visible and (IBDatabaseInfo.Database <> nil) and IBDatabaseInfo.Database.Connected then
870 tony 158 LoadData;
871     end;
872    
873     procedure TMainForm.RemoveShadowExecute(Sender: TObject);
874     var ShadowSet: integer;
875     begin
876     ShadowSet := ShadowSource.DataSet.FieldByName('RDB$Shadow_Number').AsInteger;
877 tony 272 DBDataModule.RemoveShadowSet(ShadowSet);
878 tony 158 end;
879    
880     procedure TMainForm.RemoveShadowUpdate(Sender: TObject);
881     begin
882     (Sender as TAction).Enabled := ShadowSource.DataSet.Active and (ShadowSource.DataSet.RecordCount > 0);
883     end;
884    
885     procedure TMainForm.RestoreExecute(Sender: TObject);
886     begin
887 tony 272 DBDataModule.RestoreDatabase;
888 tony 158 end;
889    
890     procedure TMainForm.RollbackAllExecute(Sender: TObject);
891     begin
892 tony 272 DBDataModule.LimboResolution(RollbackGlobal,LimboReport.Lines);
893 tony 158 end;
894    
895     procedure TMainForm.RunRepairExecute(Sender: TObject);
896     var Options: TValidateOptions;
897     begin
898     ValidationReport.Lines.Clear;
899     case SelectRepairAction.ItemIndex of
900     0: {sweep}
901     Options := [SweepDB];
902     1: {Online Validation }
903     begin
904 tony 272 DBDataModule.OnlineValidation(ValidationReport.Lines,SelectedTablesOnly.Checked);
905 tony 158 Exit;
906     end;
907     2: {Full Validation}
908     if ValidateOptions.ActivePage = ValidateOptionsTab then
909     begin
910     Options := [ValidateDB];
911     if RecordFragments.Checked then
912     Options += [ValidateFull];
913     if ReadOnlyValidation.Checked then
914     Options += [CheckDB];
915     if IgnoreChecksums.Checked then
916     Options += [IgnoreChecksum];
917     end
918     else
919     begin
920     Options := [MendDB];
921     if ValidateRepairRecordFragments.Checked then
922     Options += [ValidateFull];
923     if IgnoreChecksumsOnRepair.Checked then
924     Options += [IgnoreChecksum];
925     end;
926     3: {Kill Shadows}
927     Options := [KillShadows];
928     end;
929    
930 tony 272 DBDataModule.DatabaseRepair(Options,ValidationReport.Lines);
931 tony 158 if (SelectRepairAction.ItemIndex = 2) and (ValidateDB in Options) then
932     ValidateOptions.ActivePage := RepairOptionsTab
933     else
934     ValidateOptions.ActivePage := ValidateOptionsTab;
935     end;
936    
937     procedure TMainForm.SaveChangesExecute(Sender: TObject);
938     begin
939     if UserTagsSource.DataSet.State in [dsEdit,dsInsert] then
940     UserTagsSource.DataSet.Post;
941     if RoleSource.DataSet.State in [dsEdit,dsInsert] then
942     RoleSource.DataSet.Post;
943     if UserListSource.DataSet.State in [dsEdit,dsInsert] then
944     UserListSource.DataSet.Post;
945     end;
946    
947     procedure TMainForm.SaveChangesUpdate(Sender: TObject);
948     begin
949     (Sender as TAction).Enabled := (UserListSource.DataSet.State in [dsInsert,dsEdit]) or
950     (RoleSource.DataSet.State in [dsInsert,dsEdit]) or
951     (UserTagsSource.DataSet.State in [dsInsert,dsEdit]) ;
952     end;
953    
954     procedure TMainForm.SaveExecute(Sender: TObject);
955     begin
956     if PageControl1.ActivePage = SchemaTab then
957     begin
958     if SQLSaveDialog.Execute then
959     SynEdit1.Lines.SaveToFile(SQLSaveDialog.FileName);
960     end
961     else
962     if PageControl1.ActivePage = StatisticsTab then
963     begin
964     if SaveDialog.Execute then
965     StatsMemo.Lines.SaveToFile(SaveDialog.FileName);
966     end;
967     end;
968    
969     procedure TMainForm.SaveUpdate(Sender: TObject);
970     begin
971     (Sender as TAction).Enabled := (PageControl1.ActivePage = SchemaTab) or
972     (PageControl1.ActivePage = StatisticsTab);
973     end;
974    
975     procedure TMainForm.SchemaTabShow(Sender: TObject);
976     begin
977     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
978     SynEdit1.Lines.Clear;
979     Application.QueueAsyncCall(@DoExtract,0);
980     end;
981    
982     procedure TMainForm.ServerTabHide(Sender: TObject);
983     begin
984     FServerError := false;
985     end;
986    
987     procedure TMainForm.ServerTabShow(Sender: TObject);
988     begin
989 tony 272 if not Visible or FServerError then Exit;
990 tony 158 try
991 tony 272 LoadServerData;
992     DBDataModule.LoadServerLog(ServerLog.Lines);
993 tony 158 except
994     FServerError := true;
995     ServerLog.Lines.Clear;
996     raise;
997     end;
998     end;
999    
1000     procedure TMainForm.StatisticsTabHide(Sender: TObject);
1001     begin
1002     FLastStatsIndex := -1;
1003     end;
1004    
1005     procedure TMainForm.StatisticsTabShow(Sender: TObject);
1006     begin
1007     if not Visible or not IBDatabaseInfo.Database.Connected then Exit;
1008     if FLastStatsIndex <> StatsOptions.ItemIndex then {avoids loops if exception raise in load stats}
1009     StatsOptionsCloseUp(nil);
1010     end;
1011    
1012     procedure TMainForm.StatsOptionsCloseUp(Sender: TObject);
1013     begin
1014     StatsMemo.Lines.Clear;
1015     FLastStatsIndex := StatsOptions.ItemIndex;
1016 tony 272 DBDataModule.LoadDatabaseStatistics(StatsOptions.ItemIndex,StatsMemo.Lines);
1017 tony 158 end;
1018    
1019     procedure TMainForm.SweepIntervalEditingDone(Sender: TObject);
1020     begin
1021     if FLoading then Exit;
1022 tony 272 DBDataModule.SweepInterval := StrtoInt(SweepInterval.Text);
1023 tony 158 end;
1024    
1025     procedure TMainForm.SyncWritesChange(Sender: TObject);
1026     begin
1027     if FLoading then Exit;
1028 tony 272 DBDataModule.ForcedWrites := SyncWrites.Checked;
1029 tony 158 end;
1030    
1031     procedure TMainForm.ToggleAutoRefreshExecute(Sender: TObject);
1032     begin
1033     AttmtTimer.Enabled := not AttmtTimer.Enabled;
1034     end;
1035    
1036     procedure TMainForm.ToggleAutoRefreshUpdate(Sender: TObject);
1037     begin
1038     (Sender as TAction).Enabled := AttachSource.DataSet.Active;
1039     (Sender as TAction).Checked := AttmtTimer.Enabled;
1040     end;
1041    
1042 tony 272 procedure TMainForm.DoDBOpen(Data: PtrInt);
1043     begin
1044     ConnectToDatabase;
1045     end;
1046    
1047 tony 158 procedure TMainForm.HandleDBConnect(Sender: TObject);
1048     begin
1049     ConfigureForServerVersion;
1050     PageControl1.ActivePage := Properties;
1051     ValidationReport.Lines.Clear;
1052     LimboReport.Lines.Clear;
1053     FLastStatsIndex := -1;
1054     end;
1055    
1056     procedure TMainForm.HandleLoadData(Sender: TObject);
1057     begin
1058 tony 272 if DBDataModule.EmbeddedMode then
1059 tony 158 StatusBar1.SimpleText := Format('Database: %s - Logged in as user %s in embedded mode',
1060 tony 272 [DBDataModule.IBDatabase1.DatabaseName,DBDataModule.IBDatabase1.Params.Values['user_name']
1061 tony 158 ])
1062     else
1063 tony 272 if DBDataModule.DBUserName = 'SYSDBA' then
1064 tony 158 StatusBar1.SimpleText := Format('Database: %s - Logged in as user %s by %s, using %s security database.',
1065 tony 272 [DBDataModule.IBDatabase1.DatabaseName,DBDataModule.DBUserName,
1066     DBDataModule.AuthMethod, DBDataModule.SecurityDatabase])
1067 tony 158 else
1068     StatusBar1.SimpleText := Format('Database: %s - Logged in as user %s by %s, using %s security database. Role = %s',
1069 tony 272 [DBDataModule.IBDatabase1.DatabaseName,DBDataModule.DBUserName,
1070     DBDataModule.AuthMethod, DBDataModule.SecurityDatabase,DBDataModule.RoleName]);
1071 tony 158 if assigned(PageControl1.ActivePage.OnShow) then
1072     PageControl1.ActivePage.OnShow(nil);
1073 tony 272 ClientLibrary.Caption := 'Firebird Client Library: ' + DBDataModule.IBDatabase1.FirebirdAPI.GetFBLibrary.GetLibraryFilePath +
1074     ' (API Version = ' + DBDataModule.IBDatabase1.FirebirdAPI.GetImplementationVersion + ')';
1075 tony 158 end;
1076    
1077     procedure TMainForm.LoadData;
1078     begin
1079     if FLoading then Exit;
1080     FLoading := true;
1081     try
1082 tony 272 DatabaseAliasName.Text := DBDataModule.DatabaseName;
1083 tony 158 Edit1.Text := IBDatabaseInfo.DBSiteName;
1084     ODSVersionString.Text := Format('%d.%d',[IBDatabaseInfo.ODSMajorVersion,IBDatabaseInfo.ODSMinorVersion]);
1085     ServerVersionNo.Text := IBDatabaseInfo.Version;
1086 tony 272 DBSQLDialect.Text := IntToStr(DBDataModule.DBSQLDialect);
1087     ConnectString.Text := DBDataModule.IBDatabase1.DatabaseName;
1088 tony 158 Edit10.Text := IntToStr(IBDatabaseInfo.CurrentMemory);
1089     Edit11.Text := IntToStr(IBDatabaseInfo.MaxMemory);
1090 tony 272 PageBuffers.Text := IntToStr(DBDataModule.PageBuffers);
1091 tony 158 AllocatedPages.Text := IntToStr(IBDatabaseInfo.Allocation);
1092 tony 272 DBIsReadOnly.Checked := DBDataModule.DBReadOnly;
1093     SyncWrites.Checked := DBDataModule.ForcedWrites;
1094 tony 158 SweepInterval.Text := IntToStr(IBDatabaseInfo.SweepInterval);
1095 tony 272 NoReserve.Checked := DBDataModule.NoReserve;
1096     LingerDelay.Text := DBDataModule.LingerDelay;
1097     SecDatabase.Text := DBDataModule.SecurityDatabase;
1098     DBOwner.Text := DBDataModule.DBOwner;
1099     DatabaseOnline.Checked := DBDataModule.IsDatabaseOnline;
1100     IsShadowChk.Checked := DBDataModule.IsShadowDatabase;
1101 tony 158 if IBDatabaseInfo.ODSMajorVersion >= 12 then
1102     begin
1103     PagesUsed.Text := IntToStr(IBDatabaseInfo.PagesUsed);
1104     PagesAvail.Text := IntToStr(IBDatabaseInfo.PagesFree);
1105 tony 272 AutoAdmin.Checked := not DBDataModule.EmbeddedMode and DBDataModule.AutoAdmin;
1106 tony 158 end
1107     else
1108     begin
1109     PagesUsed.Text := 'n/a';
1110     PagesAvail.Text := 'n/a';
1111     AutoAdmin.Checked := false;
1112     end;
1113 tony 272 DBDataModule.IBDatabase1.Attachment.getFBVersion(ClientServerVersion.Lines);
1114     DBComments.Lines.Text := DBDataModule.Description;
1115 tony 158 finally
1116     FLoading := false;
1117     end;
1118     end;
1119    
1120 tony 272 procedure TMainForm.LoadServerData;
1121     var i: integer;
1122     begin
1123     with DBDataModule.IBServerProperties1 do
1124     begin
1125     Edit3.Text := VersionInfo.ServerVersion;
1126     Edit2.Text := IntToStr(VersionInfo.ServiceVersion);
1127     Edit4.Text := VersionInfo.ServerImplementation;
1128     OpenDatabasesList.Clear;
1129     for i := 0 to DatabaseInfo.NoOfDatabases - 1 do
1130     OpenDatabasesList.Lines.Add(DatabaseInfo.DbName[i]);
1131     ConfigDataGrid.Visible := DBDataModule.LoadConfigData(ConfigParams.ConfigFileData);
1132     ConfigDataLabel.Visible := ConfigDataGrid.Visible;
1133     if ConfigDataGrid.Visible then
1134     begin
1135     OpenDatabasesList.Height := ConfigDataLabel.Top - OpenDatabasesList.Top - 6;
1136     OpenDatabasesList.Anchors := OpenDatabasesList.Anchors - [akBottom];
1137     end
1138     else
1139     begin
1140     OpenDatabasesList.Height := ConfigDataGrid.Top - OpenDatabasesList.Top + ConfigDataGrid.Height;
1141     OpenDatabasesList.Anchors := OpenDatabasesList.Anchors + [akBottom];
1142     end;
1143     Edit5.Text := ConfigParams.BaseLocation;
1144     Edit6.Text := ConfigParams.LockFileLocation;
1145     Edit7.Text := ConfigParams.SecurityDatabaseLocation;
1146     Edit9.Text := ConfigParams.MessageFileLocation;
1147     Edit8.Text := ServicesConnection.ServerName;
1148     Edit12.Text := IntToStr(DatabaseInfo.NoOfAttachments);
1149     end;
1150     end;
1151    
1152 tony 158 procedure TMainForm.DoExtract(Data: PtrInt);
1153     begin
1154     Screen.Cursor := crHourGlass;
1155     try
1156     Application.ProcessMessages;
1157     if IncludeUserGrants.Checked then
1158     IBExtract1.ExtractObject(eoDatabase,'',[etGrantsToUser])
1159     else
1160     IBExtract1.ExtractObject(eoDatabase);
1161     SynEdit1.Lines.Assign(IBExtract1.Items);
1162     finally
1163     Screen.Cursor := crDefault;
1164     end;
1165     end;
1166    
1167     procedure TMainForm.ConfigureForServerVersion;
1168     var i: integer;
1169     begin
1170     if (IBDatabaseInfo.ODSMajorVersion >= 12) and
1171 tony 272 ((DBDataModule.ServiceUserName = 'SYSDBA') or (DBDataModule.RoleName = 'RDB$ADMIN') or
1172     not DBDataModule.HasUserAdminPrivilege) then
1173 tony 158 begin
1174     for i in [9,10] do
1175     UserManagerGrid.Columns[i].Visible := false;
1176     for i in [4,6,7,8] do
1177     UserManagerGrid.Columns[i].Visible := true ;
1178 tony 272 UserListSource.DataSet := DBDataModule.UserList;
1179 tony 158 TagsHeader.Visible := true;
1180     TagsGrid.Visible := true;
1181     end
1182     else
1183     begin
1184     for i in [4,6,7,8] do
1185     UserManagerGrid.Columns[i].Visible := false;
1186     for i in [9,10] do
1187     UserManagerGrid.Columns[i].Visible := true;
1188 tony 272 UserListSource.DataSet := DBDataModule.LegacyUserList;
1189 tony 158 TagsHeader.Visible := false;
1190     TagsGrid.Visible := false;
1191     end;
1192    
1193     if IBDatabaseInfo.ODSMajorVersion >= 12 then
1194     begin
1195     AttmtGrid.Columns[2].Visible := true;
1196     AttmntODS12Panel.Visible := true;
1197     DBCharacterSet.Visible := true;
1198     DBCharSetRO.Visible := false;
1199     end
1200     else
1201     begin
1202     AttmtGrid.Columns[2].Visible := false;
1203     AttmntODS12Panel.Visible := false;
1204     DBCharacterSet.Visible := false;
1205     DBCharSetRO.Visible := true;
1206     end;
1207 tony 272 MappingsTab.TabVisible := not DBDataModule.EmbeddedMode and
1208 tony 209 ((IBDatabaseInfo.ODSMajorVersion > 11) or
1209     ((IBDatabaseInfo.ODSMajorVersion = 11) and (IBDatabaseInfo.ODSMinorVersion > 0)));
1210 tony 272 UserManagerTab.TabVisible := not DBDataModule.EmbeddedMode;
1211     AccessRightsTab.TabVisible := not DBDataModule.EmbeddedMode;
1212     AutoAdmin.Enabled := not DBDataModule.EmbeddedMode;
1213 tony 158 end;
1214    
1215 tony 272 procedure TMainForm.ConnectToDatabase;
1216     begin
1217     if not DBDataModule.Connect then Close;
1218     PageControl1.Visible := true;
1219     end;
1220    
1221 tony 158 procedure TMainForm.ConfigureOnlineValidation;
1222     begin
1223     if SelectRepairAction.ItemIndex = 1 then
1224     begin
1225     DBTablesPanel.Visible := true;
1226     DBTablesSplitter.Visible := true;
1227     SelectedTablesGrid.Enabled := SelectedTablesOnly.Checked;
1228     SelectAllTables.Checked := true;
1229     DBTablesSource.DataSet.Active := true;
1230     end
1231     else
1232     begin
1233     DBTablesPanel.Visible := false;
1234     DBTablesSplitter.Visible := false;
1235     SelectAllTables.Enabled := false;
1236     DBTablesSource.DataSet.Active := false;
1237     end;
1238     end;
1239    
1240     end.
1241