Refactor Maintenance dialog to fullfill reasonable user wishes in bug #1865477 :

- Rename components with reasonable names
- Use caching mechanism from Childwin.FetchDBTableList to fill tables listbox
- Make form resizable, store and restore customized dimensions
- Keep form instance alive and recycle that instance as long as Mainform lives
- Fix confusion with action item (wasn't really used in both menuitems)
- Add documentation
This commit is contained in:
Ansgar Becker
2008-03-18 20:58:03 +00:00
parent b815b91039
commit de12c10721
7 changed files with 204 additions and 118 deletions

View File

@ -155,6 +155,8 @@ const
REGNAME_UPDATECHECK_INTERVAL = 'UpdatecheckInterval'; REGNAME_UPDATECHECK_INTERVAL = 'UpdatecheckInterval';
DEFAULT_UPDATECHECK_INTERVAL = 3; DEFAULT_UPDATECHECK_INTERVAL = 3;
REGNAME_LAST_UPDATECHECK = 'UpdatecheckLastrun'; REGNAME_LAST_UPDATECHECK = 'UpdatecheckLastrun';
REGNAME_MAINTWINWIDTH = 'Maintenance_WindowWidth';
REGNAME_MAINTWINHEIGHT = 'Maintenance_WindowHeight';
REGPREFIX_COLWIDTHS = 'ColWidths_'; REGPREFIX_COLWIDTHS = 'ColWidths_';
REGPREFIX_COLSVISIBLE = 'ColsVisible_'; REGPREFIX_COLSVISIBLE = 'ColsVisible_';

View File

@ -1817,9 +1817,7 @@ object MDIChild: TMDIChild
OnClick = MenuRenameTableClick OnClick = MenuRenameTableClick
end end
object menuMaintenance: TMenuItem object menuMaintenance: TMenuItem
Caption = 'Maintenance' Action = MainForm.actMaintenance
ImageIndex = 39
OnClick = menuMaintenanceClick
end end
object N18: TMenuItem object N18: TMenuItem
Caption = '-' Caption = '-'

View File

@ -408,7 +408,6 @@ type
procedure EditQuery1Click(Sender: TObject); procedure EditQuery1Click(Sender: TObject);
procedure Markall3Click(Sender: TObject); procedure Markall3Click(Sender: TObject);
procedure ReadWindowOptions; procedure ReadWindowOptions;
procedure menuMaintenanceClick(Sender: TObject);
procedure ListTablesDblClick(Sender: TObject); procedure ListTablesDblClick(Sender: TObject);
procedure TimerConnectErrorCloseWindowTimer(Sender: TObject); procedure TimerConnectErrorCloseWindowTimer(Sender: TObject);
procedure gridDataTitleClick(Column: TColumn); procedure gridDataTitleClick(Column: TColumn);
@ -664,7 +663,7 @@ implementation
uses uses
Main, fieldeditor, Main, fieldeditor,
optimizetables, copytable, sqlhelp, printlist, copytable, sqlhelp, printlist,
column_selection, data_sorting, runsqlfile, mysql_structures, column_selection, data_sorting, runsqlfile, mysql_structures,
Registry; Registry;
@ -2490,7 +2489,7 @@ begin
MenuFlushTableswithreadlock.Enabled := FrmIsFocussed; MenuFlushTableswithreadlock.Enabled := FrmIsFocussed;
MenuFlushStatus.Enabled := FrmIsFocussed; MenuFlushStatus.Enabled := FrmIsFocussed;
UserManager.Enabled := FrmIsFocussed; UserManager.Enabled := FrmIsFocussed;
Diagnostics.Enabled := FrmIsFocussed; actMaintenance.Enabled := FrmIsFocussed;
InsertFiles.Enabled := FrmIsFocussed; InsertFiles.Enabled := FrmIsFocussed;
{*** {***
Activate export-options if we're on Data- or Query-tab Activate export-options if we're on Data- or Query-tab
@ -3581,12 +3580,6 @@ begin
end; end;
procedure TMDIChild.menuMaintenanceClick(Sender: TObject);
begin
TableDiagnosticsWindow(Self);
end;
{** {**
Clear Query memo Clear Query memo
} }

View File

@ -482,8 +482,7 @@ object MainForm: TMainForm
Action = UserManager Action = UserManager
end end
object menuMaintenance: TMenuItem object menuMaintenance: TMenuItem
Action = Diagnostics Action = actMaintenance
Caption = 'Maintenance'
end end
object N7: TMenuItem object N7: TMenuItem
Caption = '-' Caption = '-'
@ -659,13 +658,13 @@ object MainForm: TMainForm
Hint = 'About MySQL-Front' Hint = 'About MySQL-Front'
OnExecute = ShowAboutBoxExecute OnExecute = ShowAboutBoxExecute
end end
object Diagnostics: TAction object actMaintenance: TAction
Tag = 35 Tag = 35
Caption = 'Table-Diagnostics' Caption = 'Maintenance'
Enabled = False Enabled = False
Hint = 'Optimize, repair and analyse tables' Hint = 'Optimize, repair and analyse tables'
ImageIndex = 39 ImageIndex = 39
OnExecute = DiagnosticsExecute OnExecute = actMaintenanceExecute
end end
object CopyHTMLtable: TAction object CopyHTMLtable: TAction
Tag = 49 Tag = 49

View File

@ -17,7 +17,7 @@ uses
ActnList, ImgList, Registry, ShellApi, ToolWin, Clipbrd, db, DBCtrls, ActnList, ImgList, Registry, ShellApi, ToolWin, Clipbrd, db, DBCtrls,
SynMemo, synedit, SynEditTypes, ZDataSet, ZSqlProcessor, SynMemo, synedit, SynEditTypes, ZDataSet, ZSqlProcessor,
HeidiComp, sqlhelp, MysqlQueryThread, Childwin, VirtualTrees, TntDBGrids, HeidiComp, sqlhelp, MysqlQueryThread, Childwin, VirtualTrees, TntDBGrids,
StrUtils, DateUtils, PngImageList; StrUtils, DateUtils, PngImageList, OptimizeTables;
type type
TMainForm = class(TForm) TMainForm = class(TForm)
@ -66,7 +66,7 @@ type
menuReadme: TMenuItem; menuReadme: TMenuItem;
UserManager: TAction; UserManager: TAction;
ShowAboutBox: TAction; ShowAboutBox: TAction;
Diagnostics: TAction; actMaintenance: TAction;
menuMaintenance: TMenuItem; menuMaintenance: TMenuItem;
ImExport1: TMenuItem; ImExport1: TMenuItem;
CopyContentsasHTMLTable1: TMenuItem; CopyContentsasHTMLTable1: TMenuItem;
@ -163,7 +163,7 @@ type
procedure FormResize(Sender: TObject); procedure FormResize(Sender: TObject);
procedure UserManagerExecute(Sender: TObject); procedure UserManagerExecute(Sender: TObject);
procedure ShowAboutBoxExecute(Sender: TObject); procedure ShowAboutBoxExecute(Sender: TObject);
procedure DiagnosticsExecute(Sender: TObject); procedure actMaintenanceExecute(Sender: TObject);
procedure CopyHTMLtableExecute(Sender: TObject); procedure CopyHTMLtableExecute(Sender: TObject);
procedure Copy2CSVExecute(Sender: TObject); procedure Copy2CSVExecute(Sender: TObject);
procedure PrintListExecute(Sender: TObject); procedure PrintListExecute(Sender: TObject);
@ -203,6 +203,7 @@ type
function GetParamValue(const paramChar: Char; const paramName: function GetParamValue(const paramChar: Char; const paramName:
string; var curIdx: Byte; out paramValue: string): Boolean; string; var curIdx: Byte; out paramValue: string): Boolean;
public public
MaintenanceForm: TOptimize;
procedure OpenRegistry(Session: String = ''); procedure OpenRegistry(Session: String = '');
function GetRegValue( valueName: String; defaultValue: Integer; Session: String = '' ) : Integer; Overload; function GetRegValue( valueName: String; defaultValue: Integer; Session: String = '' ) : Integer; Overload;
function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean; Overload; function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean; Overload;
@ -251,7 +252,6 @@ uses
loaddata, loaddata,
usermanager, usermanager,
options, options,
optimizetables,
printlist, printlist,
copytable, copytable,
insertfiles, insertfiles,
@ -711,10 +711,12 @@ begin
AboutWindow (Self); AboutWindow (Self);
end; end;
procedure TMainForm.DiagnosticsExecute(Sender: TObject); procedure TMainForm.actMaintenanceExecute(Sender: TObject);
begin begin
// optimize / repair... tables // optimize / repair... tables
TableDiagnosticsWindow (Self); if MaintenanceForm = nil then
MaintenanceForm := TOptimize.Create(Self);
MaintenanceForm.ShowModal;
end; end;

View File

@ -1,10 +1,10 @@
object optimize: Toptimize object optimize: Toptimize
Left = 734 Left = 734
Top = 126 Top = 126
BorderStyle = bsDialog BorderIcons = [biSystemMenu, biMaximize]
Caption = 'Table-Diagnostics' Caption = 'Maintenance'
ClientHeight = 386 ClientHeight = 409
ClientWidth = 433 ClientWidth = 431
Color = clBtnFace Color = clBtnFace
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText Font.Color = clWindowText
@ -13,111 +13,126 @@ object optimize: Toptimize
Font.Style = [] Font.Style = []
OldCreateOrder = False OldCreateOrder = False
Position = poMainFormCenter Position = poMainFormCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
DesignSize = (
431
409)
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
object Label1: TLabel object lblSelect: TLabel
Left = 16 Left = 8
Top = 16 Top = 8
Width = 145 Width = 145
Height = 13 Height = 13
Caption = 'Select Database and Table(s):' Caption = 'Select Database and Table(s):'
end end
object Label3: TLabel object lblResults: TLabel
Left = 16 Left = 8
Top = 224 Top = 211
Width = 39 Width = 39
Height = 13 Height = 13
Caption = 'Results:' Caption = 'Results:'
end end
object TablesCheckListBox: TCheckListBox object TablesCheckListBox: TCheckListBox
Left = 16 Left = 8
Top = 56 Top = 50
Width = 218 Width = 239
Height = 145 Height = 155
OnClickCheck = TablesCheckListBoxClickCheck OnClickCheck = TablesCheckListBoxClickCheck
Anchors = [akLeft, akTop, akRight]
Columns = 2 Columns = 2
ItemHeight = 13 ItemHeight = 13
TabOrder = 2 TabOrder = 2
end end
object DBComboBox: TComboBox object DBComboBox: TComboBox
Left = 62 Left = 54
Top = 32 Top = 26
Width = 171 Width = 193
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
Anchors = [akLeft, akTop, akRight]
ItemHeight = 13 ItemHeight = 13
TabOrder = 0 TabOrder = 0
OnChange = DBComboBoxChange OnChange = DBComboBoxChange
end end
object Button3: TButton object btnClose: TButton
Left = 328 Left = 326
Top = 360 Top = 378
Width = 99 Width = 99
Height = 25 Height = 25
Anchors = [akRight, akBottom]
Cancel = True Cancel = True
Caption = 'Close' Caption = 'Close'
Default = True Default = True
ModalResult = 2 ModalResult = 2
TabOrder = 12 TabOrder = 12
end end
object CheckBoxQuickRepair: TCheckBox object cbxQuickRepair: TCheckBox
Left = 360 Left = 358
Top = 168 Top = 170
Width = 57 Width = 57
Height = 17 Height = 17
Anchors = [akTop, akRight]
Caption = 'Quick' Caption = 'Quick'
TabOrder = 9 TabOrder = 9
end end
object CheckBoxQuickCheck: TCheckBox object cbxQuickCheck: TCheckBox
Left = 360 Left = 358
Top = 88 Top = 90
Width = 57 Width = 57
Height = 17 Height = 17
Anchors = [akTop, akRight]
Caption = 'Quick' Caption = 'Quick'
TabOrder = 5 TabOrder = 5
end end
object btnOptimize: TButton object btnOptimize: TButton
Left = 248 Left = 253
Top = 56 Top = 50
Width = 99 Width = 99
Height = 25 Height = 25
Caption = 'Optimze' Anchors = [akTop, akRight]
Caption = 'Optimize'
TabOrder = 3 TabOrder = 3
OnClick = Optimze OnClick = Optimize
end end
object btnCheck: TButton object btnCheck: TButton
Left = 248 Left = 253
Top = 96 Top = 90
Width = 99 Width = 99
Height = 25 Height = 25
Anchors = [akTop, akRight]
Caption = 'Check' Caption = 'Check'
TabOrder = 4 TabOrder = 4
OnClick = Check OnClick = Check
end end
object btnAnalyze: TButton object btnAnalyze: TButton
Left = 248 Left = 253
Top = 136 Top = 130
Width = 99 Width = 99
Height = 25 Height = 25
Anchors = [akTop, akRight]
Caption = 'Analyze' Caption = 'Analyze'
TabOrder = 7 TabOrder = 7
OnClick = Analyze OnClick = Analyze
end end
object btnRepair: TButton object btnRepair: TButton
Left = 248 Left = 253
Top = 176 Top = 170
Width = 99 Width = 99
Height = 25 Height = 25
Anchors = [akTop, akRight]
Caption = 'Repair' Caption = 'Repair'
TabOrder = 8 TabOrder = 8
OnClick = Repair OnClick = Repair
end end
object ListViewResults: TListView object ListResults: TListView
Left = 16 Left = 8
Top = 240 Top = 230
Width = 409 Width = 417
Height = 105 Height = 142
Anchors = [akLeft, akTop, akRight, akBottom]
Columns = <> Columns = <>
ColumnClick = False ColumnClick = False
MultiSelect = True MultiSelect = True
@ -126,36 +141,36 @@ object optimize: Toptimize
TabOrder = 11 TabOrder = 11
ViewStyle = vsReport ViewStyle = vsReport
end end
object ToolBar1: TToolBar object tlbCheckToggle: TToolBar
Left = 16 Left = 8
Top = 32 Top = 26
Width = 46 Width = 46
Height = 22 Height = 22
Align = alNone Align = alNone
AutoSize = True AutoSize = True
Caption = 'ToolBar1' Caption = 'tlbCheckToggle'
EdgeInner = esNone EdgeInner = esNone
EdgeOuter = esNone EdgeOuter = esNone
Images = MainForm.PngImageListMain Images = MainForm.PngImageListMain
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 1 TabOrder = 1
object ToolButton1: TToolButton object tlbCheckNone: TToolButton
Left = 0 Left = 0
Top = 0 Top = 0
Hint = 'Check none' Hint = 'Check none'
Caption = 'ToolButton1' Caption = 'tlbCheckNone'
ImageIndex = 65 ImageIndex = 65
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
OnClick = CheckListToggle OnClick = CheckListToggle
end end
object ToolButton2: TToolButton object tlbCheckAll: TToolButton
Tag = 1 Tag = 1
Left = 23 Left = 23
Top = 0 Top = 0
Hint = 'Check all' Hint = 'Check all'
Caption = 'ToolButton2' Caption = 'tlbCheckAll'
ImageIndex = 64 ImageIndex = 64
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
@ -163,18 +178,20 @@ object optimize: Toptimize
end end
end end
object cbxExtendedCheck: TCheckBox object cbxExtendedCheck: TCheckBox
Left = 360 Left = 358
Top = 111 Top = 108
Width = 70 Width = 70
Height = 17 Height = 17
Anchors = [akTop, akRight]
Caption = 'Extended' Caption = 'Extended'
TabOrder = 6 TabOrder = 6
end end
object cbxExtendedRepair: TCheckBox object cbxExtendedRepair: TCheckBox
Left = 360 Left = 358
Top = 191 Top = 188
Width = 70 Width = 70
Height = 17 Height = 17
Anchors = [akTop, akRight]
Caption = 'Extended' Caption = 'Extended'
TabOrder = 10 TabOrder = 10
end end

View File

@ -10,31 +10,33 @@ interface
uses uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, CheckLst, comctrls, Buttons, ToolWin, Db; ExtCtrls, StdCtrls, CheckLst, comctrls, Buttons, ToolWin, Db, Registry;
type type
Toptimize = class(TForm) Toptimize = class(TForm)
TablesCheckListBox: TCheckListBox; TablesCheckListBox: TCheckListBox;
DBComboBox: TComboBox; DBComboBox: TComboBox;
Label1: TLabel; lblSelect: TLabel;
Button3: TButton; btnClose: TButton;
CheckBoxQuickRepair: TCheckBox; cbxQuickRepair: TCheckBox;
CheckBoxQuickCheck: TCheckBox; cbxQuickCheck: TCheckBox;
btnOptimize: TButton; btnOptimize: TButton;
btnCheck: TButton; btnCheck: TButton;
btnAnalyze: TButton; btnAnalyze: TButton;
btnRepair: TButton; btnRepair: TButton;
Label3: TLabel; lblResults: TLabel;
ListViewResults: TListView; ListResults: TListView;
ToolBar1: TToolBar; tlbCheckToggle: TToolBar;
ToolButton1: TToolButton; tlbCheckNone: TToolButton;
ToolButton2: TToolButton; tlbCheckAll: TToolButton;
cbxExtendedCheck: TCheckBox; cbxExtendedCheck: TCheckBox;
cbxExtendedRepair: TCheckBox; cbxExtendedRepair: TCheckBox;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure DBComboBoxChange(Sender: TObject); procedure DBComboBoxChange(Sender: TObject);
procedure CheckListToggle(Sender: TObject); procedure CheckListToggle(Sender: TObject);
procedure Optimze(Sender: TObject); procedure Optimize(Sender: TObject);
procedure Check(Sender: TObject); procedure Check(Sender: TObject);
procedure Analyze(Sender: TObject); procedure Analyze(Sender: TObject);
procedure Repair(Sender: TObject); procedure Repair(Sender: TObject);
@ -49,23 +51,45 @@ type
{ Public declarations } { Public declarations }
end; end;
function TableDiagnosticsWindow (AOwner : TComponent; Flags : String = '') : Boolean;
implementation implementation
uses childwin, helpers, main; uses childwin, helpers, main;
{$R *.DFM} {$R *.DFM}
function TableDiagnosticsWindow (AOwner : TComponent; Flags : String = '') : Boolean;
var {**
f : Toptimize; FormCreate: Restore GUI setup
}
procedure Toptimize.FormCreate(Sender: TObject);
begin begin
f := Toptimize.Create(AOwner); Width := Mainform.GetRegValue(REGNAME_MAINTWINWIDTH, Width);
f.ShowModal; Height := Mainform.GetRegValue(REGNAME_MAINTWINHEIGHT, Height);
Result := True;
FreeAndNil (f);
end; end;
{**
FormDestroy: Save GUI setup
}
procedure Toptimize.FormDestroy(Sender: TObject);
var
reg : TRegistry;
begin
reg := TRegistry.Create;
if reg.OpenKey(REGPATH, False) then begin
reg.WriteInteger( REGNAME_MAINTWINWIDTH, Width );
reg.WriteInteger( REGNAME_MAINTWINHEIGHT, Height );
reg.CloseKey;
end;
reg.Free;
Close;
end;
{**
FormShow: Fill DB combobox and tables list
}
procedure Toptimize.FormShow(Sender: TObject); procedure Toptimize.FormShow(Sender: TObject);
var var
i : Integer; i : Integer;
@ -94,14 +118,25 @@ begin
Selected := GetVTCaptions( Mainform.ChildWin.ListTables, True ); Selected := GetVTCaptions( Mainform.ChildWin.ListTables, True );
if Selected.Count > 0 then if Selected.Count > 0 then
ToggleCheckListBox(TablesCheckListBox, True, Selected) ToggleCheckListBox(TablesCheckListBox, True, Selected)
else // Select all in checkboxlist if no table is preselected else // Select all in checkboxlist if no table is preselected
ToggleCheckListBox(TablesCheckListBox, True); ToggleCheckListBox(TablesCheckListBox, True);
end; end;
{**
DB selected in pulldown
}
procedure Toptimize.DBComboBoxChange(Sender: TObject); procedure Toptimize.DBComboBoxChange(Sender: TObject);
var
ds: TDataset;
begin begin
// read tables from db // read tables from db
TablesCheckListBox.Items := Mainform.ChildWin.GetCol( 'SHOW TABLES FROM ' + MainForm.mask(DBComboBox.Text) ); ds := Mainform.ChildWin.FetchDbTableList(DBComboBox.Text);
TablesCheckListBox.Items.Clear;
while not ds.Eof do begin
TablesCheckListBox.Items.Add(ds.Fields[0].AsString);
ds.Next;
end;
// Check all // Check all
ToggleCheckListBox( TablesCheckListBox, True ); ToggleCheckListBox( TablesCheckListBox, True );
// Enable controls if there are tables in the database. // Enable controls if there are tables in the database.
@ -109,6 +144,9 @@ begin
end; end;
{**
Check all/none
}
procedure Toptimize.CheckListToggle(Sender: TObject); procedure Toptimize.CheckListToggle(Sender: TObject);
begin begin
// select all/none // select all/none
@ -116,6 +154,10 @@ begin
TablesCheckListBox.OnClickCheck(self); TablesCheckListBox.OnClickCheck(self);
end; end;
{**
Parse and run SQL template for all maintenance actions
}
procedure Toptimize.RunIterated(pseudoSql: string); procedure Toptimize.RunIterated(pseudoSql: string);
var var
i: integer; i: integer;
@ -143,50 +185,74 @@ begin
end; end;
end; end;
procedure Toptimize.Optimze(Sender: TObject);
{**
Optimize tables
}
procedure Toptimize.Optimize(Sender: TObject);
begin begin
RunIterated('OPTIMIZE TABLE $table'); RunIterated('OPTIMIZE TABLE $table');
end; end;
{**
Check tables
}
procedure Toptimize.Check(Sender: TObject); procedure Toptimize.Check(Sender: TObject);
var var
querystr : String; querystr : String;
begin begin
querystr := 'CHECK TABLE $table'; querystr := 'CHECK TABLE $table';
if CheckBoxQuickCheck.Checked then if cbxQuickCheck.Checked then
querystr := querystr + ' QUICK'; querystr := querystr + ' QUICK';
if cbxExtendedCheck.Checked then if cbxExtendedCheck.Checked then
querystr := querystr + ' EXTENDED'; querystr := querystr + ' EXTENDED';
RunIterated(querystr); RunIterated(querystr);
end; end;
{**
Analyze tables
}
procedure Toptimize.Analyze(Sender: TObject); procedure Toptimize.Analyze(Sender: TObject);
begin begin
RunIterated('ANALYZE TABLE $table'); RunIterated('ANALYZE TABLE $table');
end; end;
{**
Repair tables
}
procedure Toptimize.Repair(Sender: TObject); procedure Toptimize.Repair(Sender: TObject);
var var
querystr : String; querystr : String;
begin begin
querystr := 'REPAIR TABLE $table'; querystr := 'REPAIR TABLE $table';
if CheckBoxQuickRepair.Checked then if cbxQuickRepair.Checked then
querystr := querystr + ' QUICK'; querystr := querystr + ' QUICK';
if cbxExtendedRepair.Checked then if cbxExtendedRepair.Checked then
querystr := querystr + ' EXTENDED'; querystr := querystr + ' EXTENDED';
RunIterated(querystr); RunIterated(querystr);
end; end;
{**
Clear ListResults
}
procedure Toptimize.ClearResults; procedure Toptimize.ClearResults;
begin begin
ListViewResults.Columns.BeginUpdate(); ListResults.Columns.BeginUpdate;
ListViewResults.Columns.Clear; ListResults.Columns.Clear;
ListViewResults.Items.BeginUpdate(); ListResults.Items.BeginUpdate;
ListViewResults.Items.Clear; ListResults.Items.Clear;
ListViewResults.Columns.EndUpdate(); ListResults.Columns.EndUpdate;
ListViewResults.Items.EndUpdate(); ListResults.Items.EndUpdate;
end; end;
{**
Add results from maintenance action
}
procedure Toptimize.AddResults(ds: TDataSet); procedure Toptimize.AddResults(ds: TDataSet);
var var
i,j,fieldcount : Integer; i,j,fieldcount : Integer;
@ -194,37 +260,45 @@ var
lc : TListColumn; lc : TListColumn;
begin begin
fieldcount := ds.FieldCount; fieldcount := ds.FieldCount;
if fieldcount > ListViewResults.Columns.Count then begin if fieldcount > ListResults.Columns.Count then begin
ListViewResults.Columns.BeginUpdate(); ListResults.Columns.BeginUpdate();
for i := ListViewResults.Columns.Count to fieldcount - 1 do begin for i := ListResults.Columns.Count to fieldcount - 1 do begin
lc := ListViewResults.Columns.Add; lc := ListResults.Columns.Add;
lc.Caption := ds.Fields[i].Fieldname; lc.Caption := ds.Fields[i].Fieldname;
end; end;
ListViewResults.Columns.EndUpdate(); ListResults.Columns.EndUpdate;
end; end;
ListViewResults.Items.BeginUpdate(); ListResults.Items.BeginUpdate;
for i:=1 to ds.RecordCount do for i:=1 to ds.RecordCount do
begin begin
li := ListViewResults.Items.Add; li := ListResults.Items.Add;
li.Caption := ds.Fields[0].AsString; li.Caption := ds.Fields[0].AsString;
for j := 1 to fieldcount -1 do // fill cells for j := 1 to fieldcount -1 do // fill cells
li.SubItems.Add(ds.Fields[j].AsString); li.SubItems.Add(ds.Fields[j].AsString);
ds.Next; ds.Next;
end; end;
for i := 0 to ListViewResults.Columns.Count-1 do for i := 0 to ListResults.Columns.Count-1 do
ListViewResults.Columns[i].Width := -2; ListResults.Columns[i].Width := -2;
ListViewResults.Items[ListViewResults.Items.Count - 1].MakeVisible(false); ListResults.Items[ListResults.Items.Count - 1].MakeVisible(false);
ListViewResults.Items.EndUpdate(); ListResults.Items.EndUpdate;
end; end;
{**
Table was (un-)checked: ensure correct state of buttons
}
procedure Toptimize.TablesCheckListBoxClickCheck(Sender: TObject); procedure Toptimize.TablesCheckListBoxClickCheck(Sender: TObject);
begin begin
ValidateControls; ValidateControls;
end; end;
{**
Check if at least one table is checked and dis/enable the buttons
}
procedure Toptimize.ValidateControls; procedure Toptimize.ValidateControls;
var var
i : Integer; i : Integer;
@ -244,4 +318,5 @@ begin
btnRepair.Enabled := somechecked; btnRepair.Enabled := somechecked;
end; end;
end. end.