Explorar o código

Move some object create/frees to form Create and Destroy event to be sure they always run. More reliable than having to manually call init and keep track. Probably solves some memory leaks. Cosmetic: enforce naming convention: prepend F for all private/protected class members but not public/published

Reinier Olislagers %!s(int64=11) %!d(string=hai) anos
pai
achega
0fd5b7388b
Modificáronse 20 ficheiros con 920 adicións e 880 borrados
  1. 6 8
      backuprestore.pas
  2. 2 0
      comparison.lfm
  3. 251 224
      comparison.pas
  4. 4 4
      copytable.pas
  5. 3 3
      dbinfo.pas
  6. 7 7
      editdatafullrec.pas
  7. 14 14
      edittable.pas
  8. 29 29
      main.pas
  9. 18 18
      neweditfield.pas
  10. 6 6
      newgen.pas
  11. 5 5
      newtable.pas
  12. 3 1
      permissionmanage.lfm
  13. 115 114
      permissionmanage.lrs
  14. 79 69
      permissionmanage.pas
  15. 278 278
      querywindow.pas
  16. 1 1
      scriptdb.pas
  17. 11 12
      sqlhistory.pas
  18. 51 51
      tablemanage.pas
  19. 14 13
      unitfirebirdservices.pas
  20. 23 23
      update.pas

+ 6 - 8
backuprestore.pas

@@ -37,10 +37,9 @@ type
     procedure sbBrowseTargetdbClick(Sender: TObject);
     procedure SpeedButton1Click(Sender: TObject);
   private
-
     { private declarations }
+    FDatabase: string; //doesn't really seem to be used anywhere
   public
-    fDatabase: string;
     procedure Init(Title, Database, User, Password: string);
     { public declarations }
   end; 
@@ -70,23 +69,22 @@ end;
 
 procedure TfmBackupRestore.Init(Title, Database, User, Password: string);
 begin
-  fDatabase:= Database;
+  FDatabase:= Database;
   edUserName.Text:= User;
   edPassword.Text:= Password;
 
   // Linux: servername:/path/test.fdb  or /path/test.fdb
   // Windows: servername:c:\path\test.fdb or c:\path\test.fdb
-  if Pos(':', Trim(fDatabase)) > 2 then
+  if Pos(':', Trim(FDatabase)) > 2 then
   begin
-    edHost.Text:= Trim(Copy(fDatabase, 1, Pos(':', fDatabase) - 1));
-    edTargetDatabase.Text:= Trim(Copy(fDatabase, Pos(':', fDatabase) + 1, Length(fDatabase)));
+    edHost.Text:= Trim(Copy(FDatabase, 1, Pos(':', FDatabase) - 1));
+    edTargetDatabase.Text:= Trim(Copy(FDatabase, Pos(':', FDatabase) + 1, Length(FDatabase)));
   end
   else
   begin
     edHost.Text := 'localhost';
-    edTargetDatabase.Text := fDatabase;
+    edTargetDatabase.Text := FDatabase;
   end;
-
 end;
 
 procedure TfmBackupRestore.bbStartClick(Sender: TObject);

+ 2 - 0
comparison.lfm

@@ -8,6 +8,8 @@ object fmComparison: TfmComparison
   ClientWidth = 820
   KeyPreview = True
   OnClose = FormClose
+  OnCreate = FormCreate
+  OnDestroy = FormDestroy
   OnKeyDown = FormKeyDown
   Position = poScreenCenter
   LCLVersion = '1.2.2.0'

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 251 - 224
comparison.pas


+ 4 - 4
copytable.pas

@@ -33,7 +33,7 @@ type
     procedure cbDestDatabaseChange(Sender: TObject);
     procedure cbSourceTableChange(Sender: TObject);
   private
-    fSourceIndex: Integer;
+    FSourceIndex: Integer;
     { private declarations }
   public
     { public declarations }
@@ -68,7 +68,7 @@ var
 begin
   List:= TStringList.Create;
   try
-    fmMain.GetFields(fSourceIndex, cbSourceTable.Text, List);
+    fmMain.GetFields(FSourceIndex, cbSourceTable.Text, List);
     Line:= List.CommaText;
   finally
     List.Free;
@@ -92,7 +92,7 @@ var
 begin
   Statement:= 'insert into ' + cbDestTable.Text + ' (';
   dmSysTables.sqQuery.Close;
-  dmSysTables.Init(fSourceIndex);
+  dmSysTables.Init(FSourceIndex);
   dmSysTables.sqQuery.SQL.Text:= syScript.Lines.Text;
   dmSysTables.sqQuery.Open;
   Values:= '';
@@ -178,7 +178,7 @@ var
   Count: Integer;
 begin
   dmSysTables.sqQuery.Close;
-  fSourceIndex:= SourceIndex;
+  FSourceIndex:= SourceIndex;
   laSourceDatabase.Caption:= fmMain.RegisteredDatabases[SourceIndex].RegRec.Title;
   cbDestDatabase.Clear;
 

+ 3 - 3
dbinfo.pas

@@ -39,7 +39,7 @@ type
     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
   private
     { private declarations }
-    fdbIndex: Integer;
+    FDBIndex: Integer;
   public
     procedure Init(dbIndex: Integer);
     { public declarations }
@@ -64,7 +64,7 @@ end;
 
 procedure TfmDBInfo.bbRefreshClick(Sender: TObject);
 begin
-  Init(fdbIndex);
+  Init(FDBIndex);
 end;
 
 procedure TfmDBInfo.FormClose(Sender: TObject; var CloseAction: TCloseAction);
@@ -94,7 +94,7 @@ var
   ServerTime: string;
   ErrorMsg: string;
 begin
-  fdbIndex:= dbIndex;
+  FDBIndex:= dbIndex;
   ProcessList:= TStringList.Create;
   try
     // Read database info

+ 7 - 7
editdatafullrec.pas

@@ -24,8 +24,8 @@ type
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure sqEditTableAfterScroll(DataSet: TDataSet);
   private
-    ibConnection: TIBConnection;
-    sqlTrans: TSQLTransaction;
+    FIBConnection: TIBConnection;
+    FSQLTrans: TSQLTransaction;
     { private declarations }
   public
     procedure CurrentDateClick(Sender: TObject);
@@ -54,7 +54,7 @@ begin
   if sqEditTable.State in [dsInsert, dsEdit] then
     sqEditTable.Post;
   sqEditTable.ApplyUpdates;
-  SQLTrans.CommitRetaining;
+  FSQLTrans.CommitRetaining;
 end;
 
 procedure TfmEditDataFullRec.sqEditTableAfterScroll(DataSet: TDataSet);
@@ -86,10 +86,10 @@ var
   ATop: Integer;
   bbDate: TBitBtn;
 begin
-  ibConnection:= fmMain.RegisteredDatabases[dbIndex].IBConnection;
-  ibConnection.Close;
-  sqlTrans:= fmMain.RegisteredDatabases[dbIndex].SQLTrans;
-  sqEditTable.DataBase:= ibConnection;
+  FIBConnection:= fmMain.RegisteredDatabases[dbIndex].IBConnection;
+  FIBConnection.Close;
+  FSQLTrans:= fmMain.RegisteredDatabases[dbIndex].SQLTrans;
+  sqEditTable.DataBase:= FIBConnection;
 
 
   sqEditTable.SQL.Text:= 'select * from ' +  ATableName;

+ 14 - 14
edittable.pas

@@ -28,8 +28,8 @@ type
     procedure FormCreate(Sender: TObject);
     procedure sqEditTableAfterScroll(DataSet: TDataSet);
   private
-    ibConnection: TIBConnection;
-    sqlTrans: TSQLTransaction;
+    FIBConnection: TIBConnection;
+    FSQLTrans: TSQLTransaction;
     { private declarations }
   public
     { public declarations }
@@ -48,14 +48,14 @@ procedure TfmEditTable.FormClose(Sender: TObject; var CloseAction: TCloseAction)
 begin
   sqEditTable.Close;
   CloseAction:= caFree;
-  ibConnection:= nil;
-  sqlTrans:= nil;
+  FIBConnection:= nil;
+  FSQLTrans:= nil;
 end;
 
 procedure TfmEditTable.FormCreate(Sender: TObject);
 begin
-  ibConnection:= nil;
-  sqlTrans:= nil;
+  FIBConnection:= nil;
+  FSQLTrans:= nil;
 end;
 
 procedure TfmEditTable.bbSaveClick(Sender: TObject);
@@ -65,8 +65,8 @@ begin
       sqEditTable.Post;
     if sqEditTable.Active then
       sqEditTable.ApplyUpdates;
-    if SQLTrans.Active then
-      SQLTrans.CommitRetaining;
+    if FSQLTrans.Active then
+      FSQLTrans.CommitRetaining;
   except
     on e: exception do
     begin
@@ -97,13 +97,13 @@ var
   PKField: TField;
 begin
   sqEditTable.Close;
-  if ibConnection = nil then
+  if FIBConnection = nil then
   begin
-    ibConnection:= Rec.IBConnection;
-    if not(ibConnection.Connected) then
-      ibConnection.Open;
-    sqlTrans:= Rec.SQLTrans;
-    sqEditTable.DataBase:= ibConnection;
+    FIBConnection:= Rec.IBConnection;
+    if not(FIBConnection.Connected) then
+      FIBConnection.Open;
+    FSQLTrans:= Rec.SQLTrans;
+    sqEditTable.DataBase:= FIBConnection;
   end;
   sqEditTable.SQL.Text:= 'select * from ' + ATableName;
   sqEditTable.Open; // need to have open query in order to access fields below

+ 29 - 29
main.pas

@@ -191,10 +191,10 @@ type
     procedure tvMainExpanded(Sender: TObject; Node: TTreeNode);
     procedure GlobalException(Sender: TObject; E : Exception);
   private
-    ibConnection: TIBConnection;
-    sqlTransaction: TSQLTransaction;
-    CurrentHistoryFile: string;
-    fActivated: Boolean;
+    FIBConnection: TIBConnection;
+    FSQLTransaction: TSQLTransaction;
+    FCurrentHistoryFile: string;
+    FActivated: Boolean;
     function FindCustomForm(ATitle: string; AClass: TClass): TComponent;
     procedure InitNewGen(DatabaseIndex: Integer);
     function GetServerNameNode(ServerName: string): TTreeNode;
@@ -304,7 +304,7 @@ begin
   SetDebuggingEnabled(false);
   {$ENDIF}
   Application.OnException:= @GlobalException;
-  fActivated:= False;
+  FActivated:= False;
   LoadRegisteredDatabases;
   StatusBar1.Panels[0].Text:= 'TurboBird for ' + Target + '-' + Arch;
 end;
@@ -584,7 +584,7 @@ end;
 
 procedure TfmMain.FormActivate(Sender: TObject);
 begin
-  fActivated:= True;
+  FActivated:= True;
 end;
 
 
@@ -1171,13 +1171,13 @@ begin
   try
     AQuery.Close;
 
-    if ibConnection <> RegisteredDatabases[DatabaseIndex].IBConnection then
+    if FIBConnection <> RegisteredDatabases[DatabaseIndex].IBConnection then
     begin
-      ibConnection:= RegisteredDatabases[DatabaseIndex].IBConnection;
-      sqlTransaction:= RegisteredDatabases[DatabaseIndex].SQLTrans;
+      FIBConnection:= RegisteredDatabases[DatabaseIndex].IBConnection;
+      FSQLTransaction:= RegisteredDatabases[DatabaseIndex].SQLTrans;
     end;
-    AQuery.DataBase:= ibConnection;
-    sqlTransaction.Commit;
+    AQuery.DataBase:= FIBConnection;
+    FSQLTransaction.Commit;
 
     Form.sgIndices.RowCount:= 1;
 
@@ -1384,22 +1384,22 @@ end;
 
 procedure TfmMain.SetConnection(Index: Integer);
 begin
-  if ibConnection <> RegisteredDatabases[Index].IBConnection then
+  if FIBConnection <> RegisteredDatabases[Index].IBConnection then
   begin
-    ibConnection:= RegisteredDatabases[Index].IBConnection;
-    // This used to say ibConnection.Close which will simply also close all open
+    FIBConnection:= RegisteredDatabases[Index].IBConnection;
+    // This used to say FIBConnection.Close which will simply also close all open
     // queries - not a good idea
-    //ibConnection.Close;
-    sqlTransaction:= RegisteredDatabases[Index].SQLTrans;
-    ibConnection.Transaction:= sqlTransaction;
-    SQLQuery1.DataBase:= ibConnection;
-    SQLQuery1.Transaction:= sqlTransaction;
+    //FIBConnection.Close;
+    FSQLTransaction:= RegisteredDatabases[Index].SQLTrans;
+    FIBConnection.Transaction:= FSQLTransaction;
+    SQLQuery1.DataBase:= FIBConnection;
+    SQLQuery1.Transaction:= FSQLTransaction;
   end;
 end;
 
 procedure TfmMain.SetFocus;
 begin
-  if not fActivated then
+  if not FActivated then
     inherited SetFocus;
 end;
 
@@ -1439,7 +1439,7 @@ begin
       begin
         mdsHistory.AppendRecord([Now, SQLType, SQLStatement, 0]);
         if SQLType = 'DDL' then
-          mdsHistory.SaveToFile(CurrentHistoryFile);
+          mdsHistory.SaveToFile(FCurrentHistoryFile);
       end;
     end;
 
@@ -1456,7 +1456,7 @@ function TfmMain.SaveAndCloseSQLHistory: Boolean;
 begin
   try
     if mdsHistory.Active then
-      mdsHistory.SaveToFile(CurrentHistoryFile);
+      mdsHistory.SaveToFile(FCurrentHistoryFile);
 
     mdsHistory.Close;
     Result:= True;
@@ -1482,10 +1482,10 @@ begin
     AFileName:= getConfigurationDirectory + LowerCase(RemoveSpecialChars(DatabaseTitle)) + '.history';
 
     // Different opened history file
-    if mdsHistory.Active and (AFileName <> CurrentHistoryFile) then
+    if mdsHistory.Active and (AFileName <> FCurrentHistoryFile) then
     begin
-      if CurrentHistoryFile <> '' then
-        mdsHistory.SaveToFile(CurrentHistoryFile);
+      if FCurrentHistoryFile <> '' then
+        mdsHistory.SaveToFile(FCurrentHistoryFile);
        mdsHistory.Close;
     end;
 
@@ -1511,7 +1511,7 @@ begin
       for i:= 1 to 2 do
         mdsHistory.Delete;
     end;
-    CurrentHistoryFile:= AFileName;
+    FCurrentHistoryFile:= AFileName;
     Result:= True;
   except
     on e: exception do
@@ -2503,7 +2503,7 @@ begin
   SQLQuery1.Close;
   Rec:= RegisteredDatabases[DatabaseIndex];
   SetConnection(DatabaseIndex);
-  sqlTransaction.Commit;
+  FSQLTransaction.Commit;
   SQLQuery1.SQL.Text:= format(QueryTemplate,[ATableName]);
   SQLQuery1.Open;
   // Fill field list if needed
@@ -2711,7 +2711,7 @@ begin
 
     SQLQuery1.ExecSQL;
     Result:= True;
-    SQLTransaction.Commit;
+    FSQLTransaction.Commit;
     AddToSQLHistory(Rec.RegRec.Title, 'DDL', SQLQuery1.SQL.Text);
 
   except
@@ -2818,7 +2818,7 @@ begin
     on e: exception do
     begin
       ShowMessage(e.Message);
-      IBConnection.Close;
+      FIBConnection.Close;
       Result:= False;
     end;
   end;

+ 18 - 18
neweditfield.pas

@@ -32,9 +32,9 @@ type
     procedure cbTypeChange(Sender: TObject);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
   private
-    fdbIndex: Integer;
-    fTableName: string;
-    fRefreshButton: TBitBtn;
+    FDBIndex: Integer;
+    FTableName: string;
+    FRefreshButton: TBitBtn;
   public
     fFormMode: TFormMode;
     OldFieldName: string;
@@ -65,10 +65,10 @@ var
   Nullflag: string;
   Clk: TNotifyEvent;
 begin
-  if fRefreshButton = nil then
+  if FRefreshButton = nil then
    clk:= nil
   else
-    clk:= fRefreshButton.OnClick;
+    clk:= FRefreshButton.OnClick;
 
   if fFormMode = foNew then  // New field
   begin
@@ -89,21 +89,21 @@ begin
     if not cxAllowNull.Checked then
       Line:= Line + ' not null';
 
-    fmMain.ShowCompleteQueryWindow(fdbIndex, 'Add new field on Table: ' + fTableName,
-      'ALTER TABLE ' + fTableName + ' ADD ' + edFieldName.Text + ' ' + Line, Clk);
+    fmMain.ShowCompleteQueryWindow(FDBIndex, 'Add new field on Table: ' + FTableName,
+      'ALTER TABLE ' + FTableName + ' ADD ' + edFieldName.Text + ' ' + Line, Clk);
   end
   else  // Upate
   begin
     Line:= '';
     // Check name change
     if UpperCase(Trim(edFieldName.Text)) <> OldFieldName then
-      Line:= 'ALTER TABLE ' + fTableName + ' ALTER ' + OldFieldName + ' TO ' +
+      Line:= 'ALTER TABLE ' + FTableName + ' ALTER ' + OldFieldName + ' TO ' +
       edFieldName.Text + ';' + LineEnding;
 
     // check type/size change
     if (cbType.Text <> OldFieldType) or (seSize.Value <> OldFieldSize) then
     begin
-      Line:= Line + 'ALTER TABLE ' + fTableName + ' ALTER ' + UpperCase(Trim(edFieldName.Text))
+      Line:= Line + 'ALTER TABLE ' + FTableName + ' ALTER ' + UpperCase(Trim(edFieldName.Text))
         + ' TYPE ' + cbType.Text;
 
       if Pos('CHAR', Line) > 0 then
@@ -113,7 +113,7 @@ begin
     // Field Order
     if seOrder.Value <> OldOrder then
     begin
-      Line:= Line + 'ALTER TABLE ' + fTableName + ' ALTER ' + edFieldName.Text + ' POSITION ' +
+      Line:= Line + 'ALTER TABLE ' + FTableName + ' ALTER ' + edFieldName.Text + ' POSITION ' +
         IntToStr(seOrder.Value) + ';' + LineEnding;
     end;
 
@@ -126,7 +126,7 @@ begin
         NullFlag:= '1';
         Line:= Line + 'UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = ' + NullFlag + LineEnding +
           'WHERE RDB$FIELD_NAME = ''' + UpperCase(Trim(edFieldName.Text)) + ''' AND RDB$RELATION_NAME = ''' +
-          fTableName + '''' + LineEnding;
+          FTableName + '''' + LineEnding;
     end;
 
     // Description
@@ -134,7 +134,7 @@ begin
     begin
       Line:= Line + 'UPDATE RDB$RELATION_FIELDS set RDB$DESCRIPTION = ''' + edDescription.Text +
         '''  where RDB$FIELD_NAME = ''' + UpperCase(Trim(edFieldName.Text)) +
-        ''' and RDB$RELATION_NAME = ''' + fTableName + ''';' + LineEnding;
+        ''' and RDB$RELATION_NAME = ''' + FTableName + ''';' + LineEnding;
     end;
 
     // Default value
@@ -142,18 +142,18 @@ begin
     begin
       Line:= Line + 'UPDATE RDB$RELATION_FIELDS set RDB$Default_Source = ''' + edDefault.Text +
         '''  where RDB$FIELD_NAME = ''' + UpperCase(Trim(edFieldName.Text)) +
-        ''' and RDB$RELATION_NAME = ''' + fTableName + ''';' + LineEnding;
+        ''' and RDB$RELATION_NAME = ''' + FTableName + ''';' + LineEnding;
     end;
 
     if Line <> '' then
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Edit field: ' + OldFieldName, Line, clk);
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Edit field: ' + OldFieldName, Line, clk);
   end;
   Close;
 end;
 
 procedure TfmNewEditField.cbTypeChange(Sender: TObject);
 begin
-  seSize.Value:= dmSysTables.GetDefaultTypeSize(fdbIndex, cbType.Text);
+  seSize.Value:= dmSysTables.GetDefaultTypeSize(FDBIndex, cbType.Text);
 end;
 
 procedure TfmNewEditField.FormClose(Sender: TObject;
@@ -173,10 +173,10 @@ begin
   // Add Domain types
   dmSysTables.GetDomainTypes(dbIndex, cbType.Items);
 
-  fdbIndex:= dbIndex;
-  fTableName:= TableName;
+  FDBIndex:= dbIndex;
+  FTableName:= TableName;
   fFormMode:= FormMode;
-  fRefreshButton:= RefreshButton;
+  FRefreshButton:= RefreshButton;
 
   OldFieldName:= FieldName;
   OldFieldSize:= FSize;

+ 6 - 6
newgen.pas

@@ -28,9 +28,9 @@ type
     procedure cxTriggerChange(Sender: TObject);
   private
     { private declarations }
-    fdbIndex: Integer;
-    ibConnection: TIBConnection;
-    SQLTrans: TSQLTransaction;
+    FDBIndex: Integer;
+    FIBConnection: TIBConnection;
+    FSQLTrans: TSQLTransaction;
   public
     procedure Init(dbIndex: Integer);
     { public declarations }
@@ -76,7 +76,7 @@ begin
         end;
 
       end;
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Create Generator: ' + edGenName.Text, List.Text);
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Create Generator: ' + edGenName.Text, List.Text);
       Close;
     finally
       List.Free;
@@ -92,7 +92,7 @@ var
 begin
   if cbTables.ItemIndex <> -1 then
   begin
-    fmMain.GetFields(fdbIndex, cbTables.Text, nil);
+    fmMain.GetFields(FDBIndex, cbTables.Text, nil);
     cbFields.Clear;
     while not fmMain.SQLQuery1.EOF do
     begin
@@ -122,7 +122,7 @@ var
   TableNames: string;
   Count: Integer;
 begin
-  fdbIndex:= dbIndex;
+  FDBIndex:= dbIndex;
   TableNames:= dmSysTables.GetDBObjectNames(dbIndex, 1, Count);
 
   fmNewGen.cbTables.Items.CommaText:= TableNames;

+ 5 - 5
newtable.pas

@@ -41,7 +41,7 @@ type
     procedure Init(dbIndex: Integer);
     procedure StringGrid1PickListSelect(Sender: TObject);
   private
-    fdbIndex: Integer;
+    FDBIndex: Integer;
     function Validate: Boolean;
     function GetFieldsCount: Integer;
     function GetClosestType(ATypePart: string): string;
@@ -130,7 +130,7 @@ procedure TfmNewTable.Init(dbIndex: Integer);
 var
   i: Integer;
 begin
-  fdbIndex:= dbIndex;
+  FDBIndex:= dbIndex;
   edNewTable.Clear;
   cxCreateGen.Checked:= False;
   StringGrid1.RowCount:= 3;
@@ -150,7 +150,7 @@ begin
     StringGrid1.Cells[4, i]:= '0';
   end;
 
-  cbRolesUsers.Items.CommaText:= StringReplace(dmSysTables.GetDBUsers(fdbIndex), '<R>', '', [rfReplaceAll]);
+  cbRolesUsers.Items.CommaText:= StringReplace(dmSysTables.GetDBUsers(FDBIndex), '<R>', '', [rfReplaceAll]);
 end;
 
 procedure TfmNewTable.StringGrid1PickListSelect(Sender: TObject);
@@ -165,7 +165,7 @@ begin
     if SelType <> '' then
     begin
       Cells[1, Row]:= SelType;
-      Cells[2, Row]:= IntToStr(dmSysTables.GetDefaultTypeSize(fdbIndex, SelType));
+      Cells[2, Row]:= IntToStr(dmSysTables.GetDefaultTypeSize(FDBIndex, SelType));
     end;
   end;
 end;
@@ -294,7 +294,7 @@ begin
         List.Add('  NEW.' + KeyField + ' = GEN_ID(' + GeneratorName + ', 1);');
         List.Add('END;');
       end;
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Create New Table: ' + edNewTable.Text, List.Text);
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Create New Table: ' + edNewTable.Text, List.Text);
     finally
       List.Free;
     end;

+ 3 - 1
permissionmanage.lfm

@@ -7,8 +7,10 @@ object fmPermissionManage: TfmPermissionManage
   ClientHeight = 368
   ClientWidth = 518
   OnClose = FormClose
+  OnCreate = FormCreate
+  OnDestroy = FormDestroy
   Position = poScreenCenter
-  LCLVersion = '1.2.0.3'
+  LCLVersion = '1.2.2.0'
   object PageControl1: TPageControl
     Left = 0
     Height = 368

+ 115 - 114
permissionmanage.lrs

@@ -4,118 +4,119 @@ LazarusResources.Add('TfmPermissionManage','FORMDATA',[
   'TPF0'#19'TfmPermissionManage'#18'fmPermissionManage'#4'Left'#3#218#1#6'Heigh'
   +'t'#3'p'#1#3'Top'#3#204#0#5'Width'#3#6#2#7'Caption'#6#21'Permission Manageme'
   +'nt'#12'ClientHeight'#3'p'#1#11'ClientWidth'#3#6#2#7'OnClose'#7#9'FormClose'
-  +#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#7'1.2.0.3'#0#12'TPageCont'
-  +'rol'#12'PageControl1'#4'Left'#2#0#6'Height'#3'p'#1#3'Top'#2#0#5'Width'#3#240
-  +#1#10'ActivePage'#7#8'tsTables'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8
-  +'akBottom'#0#8'TabIndex'#2#0#8'TabOrder'#2#0#0#9'TTabSheet'#8'tsTables'#7'Ca'
-  +'ption'#6#6'Tables'#12'ClientHeight'#3'V'#1#11'ClientWidth'#3#232#1#0#6'TLab'
-  +'el'#6'Label1'#4'Left'#2#14#6'Height'#2#13#3'Top'#2#11#5'Width'#2'/'#7'Capti'
-  +'on'#6#9'User/Role'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#14#6
-  +'Height'#2#13#3'Top'#2'_'#5'Width'#2#26#7'Caption'#6#5'Table'#11'ParentColor'
-  +#8#0#0#9'TComboBox'#8'cbTables'#4'Left'#2#18#6'Height'#2#21#3'Top'#2'|'#5'Wi'
-  +'dth'#3#236#0#10'ItemHeight'#2#13#8'OnChange'#7#14'cbTablesChange'#5'Style'#7
-  +#14'csDropDownList'#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label3'#4'Left'#3'6'#1#6
-  +'Height'#2#13#3'Top'#2#10#5'Width'#2'7'#7'Caption'#6#11'Permissions'#11'Pare'
-  +'ntColor'#8#0#0#9'TCheckBox'#8'cxSelect'#4'Left'#3'='#1#6'Height'#2#17#3'Top'
-  +#2'V'#5'Width'#2'1'#7'Caption'#6#6'Select'#8'TabOrder'#2#1#0#0#9'TCheckBox'#8
-  +'cxInsert'#4'Left'#3'>'#1#6'Height'#2#17#3'Top'#3#138#0#5'Width'#2'1'#7'Capt'
-  +'ion'#6#6'Insert'#8'TabOrder'#2#2#0#0#9'TCheckBox'#8'cxUpdate'#4'Left'#3'='#1
-  +#6'Height'#2#17#3'Top'#3#183#0#5'Width'#2'7'#7'Caption'#6#6'Update'#8'TabOrd'
-  +'er'#2#3#0#0#9'TCheckBox'#8'cxDelete'#4'Left'#3'='#1#6'Height'#2#17#3'Top'#3
-  +#236#0#5'Width'#2'3'#7'Caption'#6#6'Delete'#8'TabOrder'#2#4#0#0#9'TCheckBox'
-  +#12'cxReferences'#4'Left'#3'>'#1#6'Height'#2#17#3'Top'#3#31#1#5'Width'#2'K'#7
-  +'Caption'#6#10'References'#8'TabOrder'#2#5#0#0#7'TBitBtn'#12'bbApplyTable'#4
-  +'Left'#2#6#6'Height'#2'#'#3'Top'#3'0'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'
-  +#8'akBottom'#0#7'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#17'bbApp'
-  +'lyTableClick'#8'TabOrder'#2#6#0#0#9'TComboBox'#7'cbUsers'#4'Left'#2#18#6'He'
-  +'ight'#2#21#3'Top'#2'"'#5'Width'#3#236#0#10'ItemHeight'#2#13#8'OnChange'#7#14
-  +'cbTablesChange'#8'TabOrder'#2#7#0#0#9'TCheckBox'#13'cxSelectGrant'#4'Left'#3
-  +'Y'#1#6'Height'#2#17#3'Top'#2'g'#5'Width'#2'H'#7'Caption'#6#10'With Grant'#8
-  +'TabOrder'#2#8#0#0#9'TCheckBox'#13'cxInsertGrant'#4'Left'#3'Y'#1#6'Height'#2
-  +#17#3'Top'#3#156#0#5'Width'#2'H'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#9
-  +#0#0#9'TCheckBox'#13'cxUpdateGrant'#4'Left'#3'Y'#1#6'Height'#2#17#3'Top'#3
-  +#203#0#5'Width'#2'H'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#10#0#0#9'TChe'
-  +'ckBox'#13'cxDeleteGrant'#4'Left'#3'V'#1#6'Height'#2#17#3'Top'#3#254#0#5'Wid'
-  +'th'#2'H'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#11#0#0#9'TCheckBox'#17'c'
-  +'xReferencesGrant'#4'Left'#3'Y'#1#6'Height'#2#17#3'Top'#3'5'#1#5'Width'#2'H'
-  +#7'Caption'#6#10'With Grant'#8'TabOrder'#2#12#0#0#9'TCheckBox'#5'cxAll'#4'Le'
-  +'ft'#3'>'#1#6'Height'#2#24#3'Top'#2'"'#5'Width'#2'B'#8'AutoSize'#8#7'Caption'
-  +#6#3'All'#10'Font.Style'#11#6'fsBold'#0#10'ParentFont'#8#8'TabOrder'#2#13#0#0
-  +#9'TCheckBox'#10'cxAllGrant'#4'Left'#3'Y'#1#6'Height'#2#24#3'Top'#2'7'#5'Wid'
-  +'th'#2'n'#8'AutoSize'#8#7'Caption'#6#10'With Grant'#10'Font.Style'#11#6'fsBo'
-  +'ld'#0#10'ParentFont'#8#8'TabOrder'#2#14#0#0#0#9'TTabSheet'#7'tsViews'#7'Cap'
-  +'tion'#6#5'Views'#12'ClientHeight'#3'Q'#1#11'ClientWidth'#3#236#1#0#6'TLabel'
-  +#6'Label8'#4'Left'#2#14#6'Height'#2#18#3'Top'#2#11#5'Width'#2'C'#7'Caption'#6
-  +#9'User/Role'#11'ParentColor'#8#0#0#9'TComboBox'#12'cbViewsUsers'#4'Left'#2
-  +#18#6'Height'#2#21#3'Top'#2'"'#5'Width'#3#220#0#10'ItemHeight'#2#13#8'OnChan'
-  +'ge'#7#18'cbViewsUsersChange'#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label9'#4'Left'
-  +#2#14#6'Height'#2#18#3'Top'#2'_'#5'Width'#2'"'#7'Caption'#6#4'View'#11'Paren'
-  +'tColor'#8#0#0#9'TComboBox'#7'cbViews'#4'Left'#2#18#6'Height'#2#21#3'Top'#2
-  +'|'#5'Width'#3#220#0#10'ItemHeight'#2#13#8'OnChange'#7#13'cbViewsChange'#5'S'
-  +'tyle'#7#14'csDropDownList'#8'TabOrder'#2#1#0#0#7'TBitBtn'#11'bbApplyView'#4
-  +'Left'#2#6#6'Height'#2'!'#3'Top'#3'+'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'
-  +#8'akBottom'#0#7'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#16'bbApp'
-  +'lyViewClick'#8'TabOrder'#2#2#0#0#6'TLabel'#7'Label10'#4'Left'#3'6'#1#6'Heig'
-  +'ht'#2#18#3'Top'#2#10#5'Width'#2'S'#7'Caption'#6#11'Permissions'#11'ParentCo'
-  +'lor'#8#0#0#9'TCheckBox'#9'cxViewAll'#4'Left'#3'>'#1#6'Height'#2#24#3'Top'#2
-  +'"'#5'Width'#2'/'#7'Caption'#6#3'All'#10'Font.Style'#11#6'fsBold'#0#10'Paren'
-  +'tFont'#8#8'TabOrder'#2#3#0#0#9'TCheckBox'#14'cxViewAllGrant'#4'Left'#3'Y'#1
-  +#6'Height'#2#24#3'Top'#2'1'#5'Width'#2'h'#7'Caption'#6#10'With Grant'#10'Fon'
-  +'t.Style'#11#6'fsBold'#0#10'ParentFont'#8#8'TabOrder'#2#4#0#0#9'TCheckBox'#12
-  +'cxViewSelect'#4'Left'#3'='#1#6'Height'#2#24#3'Top'#2'V'#5'Width'#2'C'#7'Cap'
-  +'tion'#6#6'Select'#8'TabOrder'#2#5#0#0#9'TCheckBox'#17'cxViewSelectGrant'#4
-  +'Left'#3'Y'#1#6'Height'#2#24#3'Top'#2'f'#5'Width'#2'c'#7'Caption'#6#10'With '
-  ,'Grant'#8'TabOrder'#2#6#0#0#9'TCheckBox'#12'cxViewInsert'#4'Left'#3'>'#1#6'H'
-  +'eight'#2#24#3'Top'#3#138#0#5'Width'#2'A'#7'Caption'#6#6'Insert'#8'TabOrder'
-  +#2#7#0#0#9'TCheckBox'#17'cxViewInsertGrant'#4'Left'#3'Y'#1#6'Height'#2#24#3
-  +'Top'#3#154#0#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#8#0#0#9
-  +'TCheckBox'#12'cxViewUpdate'#4'Left'#3'='#1#6'Height'#2#24#3'Top'#3#183#0#5
-  +'Width'#2'L'#7'Caption'#6#6'Update'#8'TabOrder'#2#9#0#0#9'TCheckBox'#17'cxVi'
-  +'ewUpdateGrant'#4'Left'#3'Y'#1#6'Height'#2#24#3'Top'#3#202#0#5'Width'#2'c'#7
-  +'Caption'#6#10'With Grant'#8'TabOrder'#2#10#0#0#9'TCheckBox'#12'cxViewDelete'
-  +#4'Left'#3'='#1#6'Height'#2#24#3'Top'#3#236#0#5'Width'#2'F'#7'Caption'#6#6'D'
-  +'elete'#8'TabOrder'#2#11#0#0#9'TCheckBox'#17'cxViewDeleteGrant'#4'Left'#3'V'
-  +#1#6'Height'#2#24#3'Top'#3#253#0#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8
-  +'TabOrder'#2#12#0#0#9'TCheckBox'#16'cxViewReferences'#4'Left'#3'>'#1#6'Heigh'
-  +'t'#2#24#3'Top'#3#31#1#5'Width'#2'e'#7'Caption'#6#10'References'#8'TabOrder'
-  +#2#13#0#0#9'TCheckBox'#21'cxViewReferencesGrant'#4'Left'#3'Y'#1#6'Height'#2
-  +#24#3'Top'#3'3'#1#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#14
-  +#0#0#0#9'TTabSheet'#12'tsProcedures'#7'Caption'#6#10'Procedures'#12'ClientHe'
-  +'ight'#3'Q'#1#11'ClientWidth'#3#236#1#0#6'TLabel'#6'Label4'#4'Left'#2#12#6'H'
-  +'eight'#2#18#3'Top'#2#10#5'Width'#2'C'#7'Caption'#6#9'User/Role'#11'ParentCo'
-  +'lor'#8#0#0#9'TComboBox'#11'cbProcUsers'#4'Left'#2#18#6'Height'#2#21#3'Top'#2
-  +'"'#5'Width'#3#196#0#10'ItemHeight'#2#13#8'OnChange'#7#17'cbProcUsersChange'
-  +#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label5'#4'Left'#3#230#0#6'Height'#2#18#3'To'
-  +'p'#2#11#5'Width'#2'S'#7'Caption'#6#11'Permissions'#11'ParentColor'#8#0#0#13
-  +'TCheckListBox'#13'clbProcedures'#4'Left'#3#246#0#6'Height'#3#1#1#3'Top'#2
-  +''''#5'Width'#3#211#0#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBottom'#0#10'Item'
-  +'Height'#2#0#7'OnClick'#7#18'clbProceduresClick'#7'OnKeyUp'#7#18'clbProcedur'
-  +'esKeyUp'#8'TabOrder'#2#1#0#0#7'TBitBtn'#11'bbApplyProc'#4'Left'#2#6#6'Heigh'
-  +'t'#2'!'#3'Top'#3'('#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7
-  +'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#16'bbApplyProcClick'#8'T'
-  +'abOrder'#2#2#0#0#9'TCheckBox'#11'cxProcGrant'#4'Left'#3#246#0#6'Height'#2#24
-  +#3'Top'#3'+'#1#5'Width'#2'c'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'
-  +#6#10'With Grant'#8'OnChange'#7#17'cxProcGrantChange'#8'TabOrder'#2#3#0#0#0#9
-  +'TTabSheet'#7'tsRoles'#7'Caption'#6#5'Roles'#12'ClientHeight'#3'Q'#1#11'Clie'
-  +'ntWidth'#3#236#1#0#6'TLabel'#6'Label6'#4'Left'#2#12#6'Height'#2#18#3'Top'#2
-  +#10#5'Width'#2' '#7'Caption'#6#4'User'#11'ParentColor'#8#0#0#9'TComboBox'#11
-  +'cbRolesUser'#4'Left'#2#18#6'Height'#2#21#3'Top'#2'"'#5'Width'#3#188#0#10'It'
-  +'emHeight'#2#13#8'OnChange'#7#17'cbRolesUserChange'#8'TabOrder'#2#0#0#0#6'TL'
-  +'abel'#6'Label7'#4'Left'#3#230#0#6'Height'#2#18#3'Top'#2#11#5'Width'#2'S'#7
-  +'Caption'#6#11'Permissions'#11'ParentColor'#8#0#0#7'TBitBtn'#12'bbApplyRoles'
-  +#4'Left'#2#12#6'Height'#2'#'#3'Top'#3'*'#1#5'Width'#2'K'#7'Anchors'#11#6'akL'
-  +'eft'#8'akBottom'#0#7'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#17
-  +'bbApplyRolesClick'#8'TabOrder'#2#1#0#0#13'TCheckListBox'#8'clbRoles'#4'Left'
-  +#3#246#0#6'Height'#3#1#1#3'Top'#2''''#5'Width'#3#211#0#7'Anchors'#11#5'akTop'
-  +#6'akLeft'#8'akBottom'#0#10'ItemHeight'#2#0#7'OnClick'#7#13'clbRolesClick'#7
-  +'OnKeyUp'#7#13'clbRolesKeyUp'#8'TabOrder'#2#2#0#0#7'TBitBtn'#7'BitBtn1'#4'Le'
-  +'ft'#2'f'#6'Height'#2'#'#3'Top'#3'*'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'
-  +#8'akBottom'#0#7'Caption'#6#7'Refresh'#7'OnClick'#7#12'BitBtn1Click'#8'TabOr'
-  +'der'#2#3#0#0#9'TCheckBox'#11'cxRoleGrant'#4'Left'#3#246#0#6'Height'#2#24#3
-  +'Top'#3'0'#1#5'Width'#2'i'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6
-  +#10'With Admin'#8'OnChange'#7#17'cxRoleGrantChange'#8'TabOrder'#2#4#0#0#0#0#7
-  +'TBitBtn'#7'bbClose'#4'Left'#3#232#1#6'Height'#2#24#3'Top'#2#255#5'Width'#2
-  +#27#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#4' X  '#5'Color'#4#219
-  +#242#247#0#10'Font.Style'#11#6'fsBold'#0#7'OnClick'#7#12'bbCloseClick'#10'Pa'
-  +'rentFont'#8#8'TabOrder'#2#1#0#0#0
+  +#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#8'Position'#7#14
+  +'poScreenCenter'#10'LCLVersion'#6#7'1.2.2.0'#0#12'TPageControl'#12'PageContr'
+  +'ol1'#4'Left'#2#0#6'Height'#3'p'#1#3'Top'#2#0#5'Width'#3#240#1#10'ActivePage'
+  +#7#8'tsTables'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'T'
+  +'abIndex'#2#0#8'TabOrder'#2#0#0#9'TTabSheet'#8'tsTables'#7'Caption'#6#6'Tabl'
+  +'es'#12'ClientHeight'#3'V'#1#11'ClientWidth'#3#232#1#0#6'TLabel'#6'Label1'#4
+  +'Left'#2#14#6'Height'#2#13#3'Top'#2#11#5'Width'#2'/'#7'Caption'#6#9'User/Rol'
+  +'e'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#14#6'Height'#2#13#3
+  +'Top'#2'_'#5'Width'#2#26#7'Caption'#6#5'Table'#11'ParentColor'#8#0#0#9'TComb'
+  +'oBox'#8'cbTables'#4'Left'#2#18#6'Height'#2#21#3'Top'#2'|'#5'Width'#3#236#0
+  +#10'ItemHeight'#2#13#8'OnChange'#7#14'cbTablesChange'#5'Style'#7#14'csDropDo'
+  +'wnList'#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label3'#4'Left'#3'6'#1#6'Height'#2
+  +#13#3'Top'#2#10#5'Width'#2'7'#7'Caption'#6#11'Permissions'#11'ParentColor'#8
+  +#0#0#9'TCheckBox'#8'cxSelect'#4'Left'#3'='#1#6'Height'#2#17#3'Top'#2'V'#5'Wi'
+  +'dth'#2'1'#7'Caption'#6#6'Select'#8'TabOrder'#2#1#0#0#9'TCheckBox'#8'cxInser'
+  +'t'#4'Left'#3'>'#1#6'Height'#2#17#3'Top'#3#138#0#5'Width'#2'1'#7'Caption'#6#6
+  +'Insert'#8'TabOrder'#2#2#0#0#9'TCheckBox'#8'cxUpdate'#4'Left'#3'='#1#6'Heigh'
+  +'t'#2#17#3'Top'#3#183#0#5'Width'#2'7'#7'Caption'#6#6'Update'#8'TabOrder'#2#3
+  +#0#0#9'TCheckBox'#8'cxDelete'#4'Left'#3'='#1#6'Height'#2#17#3'Top'#3#236#0#5
+  +'Width'#2'3'#7'Caption'#6#6'Delete'#8'TabOrder'#2#4#0#0#9'TCheckBox'#12'cxRe'
+  +'ferences'#4'Left'#3'>'#1#6'Height'#2#17#3'Top'#3#31#1#5'Width'#2'K'#7'Capti'
+  +'on'#6#10'References'#8'TabOrder'#2#5#0#0#7'TBitBtn'#12'bbApplyTable'#4'Left'
+  +#2#6#6'Height'#2'#'#3'Top'#3'0'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'ak'
+  +'Bottom'#0#7'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#17'bbApplyTa'
+  +'bleClick'#8'TabOrder'#2#6#0#0#9'TComboBox'#7'cbUsers'#4'Left'#2#18#6'Height'
+  +#2#21#3'Top'#2'"'#5'Width'#3#236#0#10'ItemHeight'#2#13#8'OnChange'#7#14'cbTa'
+  +'blesChange'#8'TabOrder'#2#7#0#0#9'TCheckBox'#13'cxSelectGrant'#4'Left'#3'Y'
+  +#1#6'Height'#2#17#3'Top'#2'g'#5'Width'#2'H'#7'Caption'#6#10'With Grant'#8'Ta'
+  +'bOrder'#2#8#0#0#9'TCheckBox'#13'cxInsertGrant'#4'Left'#3'Y'#1#6'Height'#2#17
+  +#3'Top'#3#156#0#5'Width'#2'H'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#9#0#0
+  +#9'TCheckBox'#13'cxUpdateGrant'#4'Left'#3'Y'#1#6'Height'#2#17#3'Top'#3#203#0
+  +#5'Width'#2'H'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#10#0#0#9'TCheckBox'
+  +#13'cxDeleteGrant'#4'Left'#3'V'#1#6'Height'#2#17#3'Top'#3#254#0#5'Width'#2'H'
+  +#7'Caption'#6#10'With Grant'#8'TabOrder'#2#11#0#0#9'TCheckBox'#17'cxReferenc'
+  +'esGrant'#4'Left'#3'Y'#1#6'Height'#2#17#3'Top'#3'5'#1#5'Width'#2'H'#7'Captio'
+  +'n'#6#10'With Grant'#8'TabOrder'#2#12#0#0#9'TCheckBox'#5'cxAll'#4'Left'#3'>'
+  +#1#6'Height'#2#24#3'Top'#2'"'#5'Width'#2'B'#8'AutoSize'#8#7'Caption'#6#3'All'
+  +#10'Font.Style'#11#6'fsBold'#0#10'ParentFont'#8#8'TabOrder'#2#13#0#0#9'TChec'
+  +'kBox'#10'cxAllGrant'#4'Left'#3'Y'#1#6'Height'#2#24#3'Top'#2'7'#5'Width'#2'n'
+  +#8'AutoSize'#8#7'Caption'#6#10'With Grant'#10'Font.Style'#11#6'fsBold'#0#10
+  +'ParentFont'#8#8'TabOrder'#2#14#0#0#0#9'TTabSheet'#7'tsViews'#7'Caption'#6#5
+  +'Views'#12'ClientHeight'#3'Q'#1#11'ClientWidth'#3#236#1#0#6'TLabel'#6'Label8'
+  +#4'Left'#2#14#6'Height'#2#18#3'Top'#2#11#5'Width'#2'C'#7'Caption'#6#9'User/R'
+  +'ole'#11'ParentColor'#8#0#0#9'TComboBox'#12'cbViewsUsers'#4'Left'#2#18#6'Hei'
+  +'ght'#2#21#3'Top'#2'"'#5'Width'#3#220#0#10'ItemHeight'#2#13#8'OnChange'#7#18
+  +'cbViewsUsersChange'#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label9'#4'Left'#2#14#6
+  +'Height'#2#18#3'Top'#2'_'#5'Width'#2'"'#7'Caption'#6#4'View'#11'ParentColor'
+  +#8#0#0#9'TComboBox'#7'cbViews'#4'Left'#2#18#6'Height'#2#21#3'Top'#2'|'#5'Wid'
+  +'th'#3#220#0#10'ItemHeight'#2#13#8'OnChange'#7#13'cbViewsChange'#5'Style'#7
+  +#14'csDropDownList'#8'TabOrder'#2#1#0#0#7'TBitBtn'#11'bbApplyView'#4'Left'#2
+  +#6#6'Height'#2'!'#3'Top'#3'+'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akBo'
+  +'ttom'#0#7'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#16'bbApplyView'
+  +'Click'#8'TabOrder'#2#2#0#0#6'TLabel'#7'Label10'#4'Left'#3'6'#1#6'Height'#2
+  +#18#3'Top'#2#10#5'Width'#2'S'#7'Caption'#6#11'Permissions'#11'ParentColor'#8
+  +#0#0#9'TCheckBox'#9'cxViewAll'#4'Left'#3'>'#1#6'Height'#2#24#3'Top'#2'"'#5'W'
+  +'idth'#2'/'#7'Caption'#6#3'All'#10'Font.Style'#11#6'fsBold'#0#10'ParentFont'
+  +#8#8'TabOrder'#2#3#0#0#9'TCheckBox'#14'cxViewAllGrant'#4'Left'#3'Y'#1#6'Heig'
+  +'ht'#2#24#3'Top'#2'1'#5'Width'#2'h'#7'Caption'#6#10'With Grant'#10'Font.Styl'
+  +'e'#11#6'fsBold'#0#10'ParentFont'#8#8'TabOrder'#2#4#0#0#9'TCheckBox'#12'cxVi'
+  +'ewSelect'#4'Left'#3'='#1#6'Height'#2#24#3'Top'#2'V'#5'Width'#2'C'#7'Caption'
+  +#6#6'Select'#8'TabOrder'#2#5#0#0#9'TCheckBox'#17'cxViewSelectGrant'#4'Left'#3
+  ,'Y'#1#6'Height'#2#24#3'Top'#2'f'#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8
+  +'TabOrder'#2#6#0#0#9'TCheckBox'#12'cxViewInsert'#4'Left'#3'>'#1#6'Height'#2
+  +#24#3'Top'#3#138#0#5'Width'#2'A'#7'Caption'#6#6'Insert'#8'TabOrder'#2#7#0#0#9
+  +'TCheckBox'#17'cxViewInsertGrant'#4'Left'#3'Y'#1#6'Height'#2#24#3'Top'#3#154
+  +#0#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#8#0#0#9'TCheckBox'
+  +#12'cxViewUpdate'#4'Left'#3'='#1#6'Height'#2#24#3'Top'#3#183#0#5'Width'#2'L'
+  +#7'Caption'#6#6'Update'#8'TabOrder'#2#9#0#0#9'TCheckBox'#17'cxViewUpdateGran'
+  +'t'#4'Left'#3'Y'#1#6'Height'#2#24#3'Top'#3#202#0#5'Width'#2'c'#7'Caption'#6
+  +#10'With Grant'#8'TabOrder'#2#10#0#0#9'TCheckBox'#12'cxViewDelete'#4'Left'#3
+  +'='#1#6'Height'#2#24#3'Top'#3#236#0#5'Width'#2'F'#7'Caption'#6#6'Delete'#8'T'
+  +'abOrder'#2#11#0#0#9'TCheckBox'#17'cxViewDeleteGrant'#4'Left'#3'V'#1#6'Heigh'
+  +'t'#2#24#3'Top'#3#253#0#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8'TabOrder'
+  +#2#12#0#0#9'TCheckBox'#16'cxViewReferences'#4'Left'#3'>'#1#6'Height'#2#24#3
+  +'Top'#3#31#1#5'Width'#2'e'#7'Caption'#6#10'References'#8'TabOrder'#2#13#0#0#9
+  +'TCheckBox'#21'cxViewReferencesGrant'#4'Left'#3'Y'#1#6'Height'#2#24#3'Top'#3
+  +'3'#1#5'Width'#2'c'#7'Caption'#6#10'With Grant'#8'TabOrder'#2#14#0#0#0#9'TTa'
+  +'bSheet'#12'tsProcedures'#7'Caption'#6#10'Procedures'#12'ClientHeight'#3'Q'#1
+  +#11'ClientWidth'#3#236#1#0#6'TLabel'#6'Label4'#4'Left'#2#12#6'Height'#2#18#3
+  +'Top'#2#10#5'Width'#2'C'#7'Caption'#6#9'User/Role'#11'ParentColor'#8#0#0#9'T'
+  +'ComboBox'#11'cbProcUsers'#4'Left'#2#18#6'Height'#2#21#3'Top'#2'"'#5'Width'#3
+  +#196#0#10'ItemHeight'#2#13#8'OnChange'#7#17'cbProcUsersChange'#8'TabOrder'#2
+  +#0#0#0#6'TLabel'#6'Label5'#4'Left'#3#230#0#6'Height'#2#18#3'Top'#2#11#5'Widt'
+  +'h'#2'S'#7'Caption'#6#11'Permissions'#11'ParentColor'#8#0#0#13'TCheckListBox'
+  +#13'clbProcedures'#4'Left'#3#246#0#6'Height'#3#1#1#3'Top'#2''''#5'Width'#3
+  +#211#0#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBottom'#0#10'ItemHeight'#2#0#7'O'
+  +'nClick'#7#18'clbProceduresClick'#7'OnKeyUp'#7#18'clbProceduresKeyUp'#8'TabO'
+  +'rder'#2#1#0#0#7'TBitBtn'#11'bbApplyProc'#4'Left'#2#6#6'Height'#2'!'#3'Top'#3
+  +'('#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#5'App'
+  +'ly'#4'Kind'#7#4'bkOK'#7'OnClick'#7#16'bbApplyProcClick'#8'TabOrder'#2#2#0#0
+  +#9'TCheckBox'#11'cxProcGrant'#4'Left'#3#246#0#6'Height'#2#24#3'Top'#3'+'#1#5
+  +'Width'#2'c'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#10'With Gran'
+  +'t'#8'OnChange'#7#17'cxProcGrantChange'#8'TabOrder'#2#3#0#0#0#9'TTabSheet'#7
+  +'tsRoles'#7'Caption'#6#5'Roles'#12'ClientHeight'#3'Q'#1#11'ClientWidth'#3#236
+  +#1#0#6'TLabel'#6'Label6'#4'Left'#2#12#6'Height'#2#18#3'Top'#2#10#5'Width'#2
+  +' '#7'Caption'#6#4'User'#11'ParentColor'#8#0#0#9'TComboBox'#11'cbRolesUser'#4
+  +'Left'#2#18#6'Height'#2#21#3'Top'#2'"'#5'Width'#3#188#0#10'ItemHeight'#2#13#8
+  +'OnChange'#7#17'cbRolesUserChange'#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label7'#4
+  +'Left'#3#230#0#6'Height'#2#18#3'Top'#2#11#5'Width'#2'S'#7'Caption'#6#11'Perm'
+  +'issions'#11'ParentColor'#8#0#0#7'TBitBtn'#12'bbApplyRoles'#4'Left'#2#12#6'H'
+  +'eight'#2'#'#3'Top'#3'*'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akBottom'
+  +#0#7'Caption'#6#5'Apply'#4'Kind'#7#4'bkOK'#7'OnClick'#7#17'bbApplyRolesClick'
+  +#8'TabOrder'#2#1#0#0#13'TCheckListBox'#8'clbRoles'#4'Left'#3#246#0#6'Height'
+  +#3#1#1#3'Top'#2''''#5'Width'#3#211#0#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBo'
+  +'ttom'#0#10'ItemHeight'#2#0#7'OnClick'#7#13'clbRolesClick'#7'OnKeyUp'#7#13'c'
+  +'lbRolesKeyUp'#8'TabOrder'#2#2#0#0#7'TBitBtn'#7'BitBtn1'#4'Left'#2'f'#6'Heig'
+  +'ht'#2'#'#3'Top'#3'*'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7
+  +'Caption'#6#7'Refresh'#7'OnClick'#7#12'BitBtn1Click'#8'TabOrder'#2#3#0#0#9'T'
+  +'CheckBox'#11'cxRoleGrant'#4'Left'#3#246#0#6'Height'#2#24#3'Top'#3'0'#1#5'Wi'
+  +'dth'#2'i'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#10'With Admin'
+  +#8'OnChange'#7#17'cxRoleGrantChange'#8'TabOrder'#2#4#0#0#0#0#7'TBitBtn'#7'bb'
+  +'Close'#4'Left'#3#232#1#6'Height'#2#24#3'Top'#2#255#5'Width'#2#27#7'Anchors'
+  +#11#5'akTop'#7'akRight'#0#7'Caption'#6#4' X  '#5'Color'#4#219#242#247#0#10'F'
+  +'ont.Style'#11#6'fsBold'#0#7'OnClick'#7#12'bbCloseClick'#10'ParentFont'#8#8
+  +'TabOrder'#2#1#0#0#0
 ]);

+ 79 - 69
permissionmanage.pas

@@ -87,21 +87,23 @@ type
     procedure cxProcGrantChange(Sender: TObject);
     procedure cxRoleGrantChange(Sender: TObject);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
+    procedure FormCreate(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
   private
-    fdbIndex: Integer;
-    ProcList: TStringList;
-    RoleList: TStringList;
-    ProcGrant: array of Boolean;
-    OrigProcGrant: array of Boolean;
-    RoleGrant: array of Boolean;
-    OrigRoleGrant: array of Boolean;
-    fOnCommitProcedure: TNotifyEvent;
-
-    OldTableSelectGrant: Boolean;
-    OldTableInsertGrant: Boolean;
-    OldTableUpdateGrant: Boolean;
-    OldTableDeleteGrant: Boolean;
-    OldTableReferencesGrant: Boolean;
+    FDBIndex: Integer;
+    FProcList: TStringList;
+    FRoleList: TStringList;
+    FProcGrant: array of Boolean;
+    FOrigProcGrant: array of Boolean;
+    FRoleGrant: array of Boolean;
+    FOrigRoleGrant: array of Boolean;
+    FOnCommitProcedure: TNotifyEvent;
+
+    FOldTableSelectGrant: Boolean;
+    FOldTableInsertGrant: Boolean;
+    FOldTableUpdateGrant: Boolean;
+    FOldTableDeleteGrant: Boolean;
+    FOldTableReferencesGrant: Boolean;
 
     procedure UpdatePermissions;
     procedure UpdateViewsPermissions;
@@ -125,11 +127,21 @@ uses SysTables, main;
 
 procedure TfmPermissionManage.FormClose(Sender: TObject; var CloseAction: TCloseAction);
 begin
-  ProcList.Free;
-  RoleList.Free;
   CloseAction:= caFree;
-  SetLength(ProcGrant, 0);
-  SetLength(OrigProcGrant, 0);
+  SetLength(FProcGrant, 0);
+  SetLength(FOrigProcGrant, 0);
+end;
+
+procedure TfmPermissionManage.FormCreate(Sender: TObject);
+begin
+  FProcList:= TStringList.Create;
+  FRoleList:= TStringList.Create;
+end;
+
+procedure TfmPermissionManage.FormDestroy(Sender: TObject);
+begin
+  FProcList.Free;
+  FRoleList.Free;
 end;
 
 procedure TfmPermissionManage.UpdatePermissions;
@@ -139,7 +151,7 @@ var
 begin
   if (cbUsers.Text <> '') and (cbTables.Text <> '') then
   begin;
-    Permissions := dmSysTables.GetObjectUserPermission(fdbIndex, cbTables.Text, cbUsers.Text, ObjType);
+    Permissions := dmSysTables.GetObjectUserPermission(FDBIndex, cbTables.Text, cbUsers.Text, ObjType);
     cxAll.Checked:= False;
     cxAllGrant.Checked:= False;
 
@@ -155,11 +167,11 @@ begin
     cxDeleteGrant.Checked:= Pos('DG', Permissions) > 0;;
     cxReferencesGrant.Checked:= Pos('RG', Permissions) > 0;;
 
-    OldTableSelectGrant:= cxSelectGrant.Checked;
-    OldTableInsertGrant:= cxInsertGrant.Checked;
-    OldTableUpdateGrant:= cxUpdateGrant.Checked;
-    OldTableDeleteGrant:= cxDeleteGrant.Checked;
-    OldTableReferencesGrant:= cxReferencesGrant.Checked;
+    FOldTableSelectGrant:= cxSelectGrant.Checked;
+    FOldTableInsertGrant:= cxInsertGrant.Checked;
+    FOldTableUpdateGrant:= cxUpdateGrant.Checked;
+    FOldTableDeleteGrant:= cxDeleteGrant.Checked;
+    FOldTableReferencesGrant:= cxReferencesGrant.Checked;
   end;
 
 end;
@@ -171,7 +183,7 @@ var
 begin
   if (cbViewsUsers.Text <> '') and (cbViews.Text <> '') then
   begin;
-    Permissions := dmSysTables.GetObjectUserPermission(fdbIndex, cbViews.Text, cbViewsUsers.Text, ObjType);
+    Permissions := dmSysTables.GetObjectUserPermission(FDBIndex, cbViews.Text, cbViewsUsers.Text, ObjType);
     cxViewAll.Checked:= False;
     cxViewAllGrant.Checked:= False;
 
@@ -200,23 +212,23 @@ begin
   clbProcedures.Clear;
   if cbProcUsers.Text <> '' then
   begin
-    clbProcedures.Items.CommaText:= dmSysTables.GetDBObjectsForPermissions(fdbIndex, 5);
-    ProcList:= TStringList.Create;
-    ProcList.CommaText:= dmSysTables.GetUserObjects(fdbIndex, cbProcUsers.Text, 5);
-    SetLength(ProcGrant, clbProcedures.Count);
-    SetLength(OrigProcGrant, clbProcedures.Count);
-    for i:= 0 to ProcList.Count - 1 do
+    clbProcedures.Items.CommaText:= dmSysTables.GetDBObjectsForPermissions(FDBIndex, 5);
+    FProcList.Clear;
+    FProcList.CommaText:= dmSysTables.GetUserObjects(FDBIndex, cbProcUsers.Text, 5);
+    SetLength(FProcGrant, clbProcedures.Count);
+    SetLength(FOrigProcGrant, clbProcedures.Count);
+    for i:= 0 to FProcList.Count - 1 do
     begin
-      ObjName:= ProcList[i];
+      ObjName:= FProcList[i];
       if Pos('<G>', ObjName) = 1 then
       begin
         Delete(ObjName, 1, 3);
-        ProcList[i]:= ObjName;
+        FProcList[i]:= ObjName;
         ProcIndex:= clbProcedures.Items.IndexOf(ObjName);
         if ProcIndex <> -1 then
         begin
-          ProcGrant[ProcIndex]:= True;
-          OrigProcGrant[ProcIndex]:= True;
+          FProcGrant[ProcIndex]:= True;
+          FOrigProcGrant[ProcIndex]:= True;
         end;
       end;
 
@@ -239,26 +251,26 @@ begin
   clbRoles.Clear;
   if cbRolesUser.Text <> '' then
   begin
-    clbRoles.Items.CommaText:= dmSysTables.GetDBObjectNames(fdbIndex, 9, Count);
-    RoleList:= TStringList.Create;
-    RoleList.CommaText:= dmSysTables.GetUserObjects(fdbIndex, cbRolesUser.Text, 13);
-    SetLength(RoleGrant, clbRoles.Count);
-    SetLength(OrigRoleGrant, clbRoles.Count);
-    for i:= 0 to RoleList.Count - 1 do
+    clbRoles.Items.CommaText:= dmSysTables.GetDBObjectNames(FDBIndex, 9, Count);
+    FRoleList.Clear;
+    FRoleList.CommaText:= dmSysTables.GetUserObjects(FDBIndex, cbRolesUser.Text, 13);
+    SetLength(FRoleGrant, clbRoles.Count);
+    SetLength(FOrigRoleGrant, clbRoles.Count);
+    for i:= 0 to FRoleList.Count - 1 do
     begin
-      ObjName:= RoleList[i];
+      ObjName:= FRoleList[i];
       if Pos('<G>', ObjName) = 1 then
       begin
         Delete(ObjName, 1, 3);
-        RoleList[i]:= ObjName;
+        FRoleList[i]:= ObjName;
         RoleIndex:= clbRoles.Items.IndexOf(ObjName);
         if RoleIndex <> -1 then
         begin
-          RoleGrant[RoleIndex]:= True;
-          OrigRoleGrant[RoleIndex]:= True;
+          FRoleGrant[RoleIndex]:= True;
+          FOrigRoleGrant[RoleIndex]:= True;
         end;
       end;
-      Index:= clbRoles.Items.IndexOf(RoleList[i]);
+      Index:= clbRoles.Items.IndexOf(FRoleList[i]);
       if Index <> -1 then
         clbRoles.Checked[Index]:= True;
     end;
@@ -292,19 +304,19 @@ begin
 
   if (Grant) and (not WithGrant) then
   begin
-    if OldTableSelectGrant and not cxSelectGrant.Checked and (LowerCase(OptionName) = 'select') then
+    if FOldTableSelectGrant and not cxSelectGrant.Checked and (LowerCase(OptionName) = 'select') then
       Line:= Line + LineEnding + 'REVOKE GRANT OPTION FOR SELECT ON ' + ATableName + ' FROM ' + cbUsers.Text + ';';
 
-    if OldTableUpdateGrant and not cxUpdateGrant.Checked and (LowerCase(OptionName) = 'update') then
+    if FOldTableUpdateGrant and not cxUpdateGrant.Checked and (LowerCase(OptionName) = 'update') then
       Line:= Line + LineEnding + 'REVOKE GRANT OPTION FOR Update ON ' + ATableName + ' FROM ' + cbUsers.Text + ';';
 
-    if OldTableReferencesGrant and not cxReferencesGrant.Checked and (LowerCase(OptionName) = 'references') then
+    if FOldTableReferencesGrant and not cxReferencesGrant.Checked and (LowerCase(OptionName) = 'references') then
       Line:= Line + LineEnding + 'REVOKE GRANT OPTION FOR References ON ' + ATableName + ' FROM ' + cbUsers.Text + ';';
 
-    if OldTableDeleteGrant and not cxDeleteGrant.Checked and (LowerCase(OptionName) = 'delete') then
+    if FOldTableDeleteGrant and not cxDeleteGrant.Checked and (LowerCase(OptionName) = 'delete') then
       Line:= Line +LineEnding +  'REVOKE GRANT OPTION FOR Delete ON ' + ATableName + ' FROM ' + cbUsers.Text + ';';
 
-    if OldTableInsertGrant and not cxInsertGrant.Checked and (LowerCase(OptionName) = 'insert') then
+    if FOldTableInsertGrant and not cxInsertGrant.Checked and (LowerCase(OptionName) = 'insert') then
       Line:= Line  +LineEnding +  'REVOKE GRANT OPTION FOR Insert ON ' + ATableName + ' FROM ' + cbUsers.Text + ';';
   end;
 
@@ -330,7 +342,7 @@ begin
         ComposeTablePermissionSQL(cbTables.Text, 'References', cxReferences.Checked, cxReferencesGrant.Checked, List);
       end;
 
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Edit Permission for: ' + cbTables.Text, List.Text, fOnCommitProcedure);
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Edit Permission for: ' + cbTables.Text, List.Text, FOnCommitProcedure);
     finally
       List.Free;
     end;
@@ -360,7 +372,7 @@ begin
         ComposeTablePermissionSQL('"' + cbViews.Text + '"', 'References', cxViewReferences.Checked, cxViewReferencesGrant.Checked, List);
       end;
 
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Edit Permission for: ' + cbViews.Text, List.Text, fOnCommitProcedure);
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Edit Permission for: ' + cbViews.Text, List.Text, FOnCommitProcedure);
     finally
       List.Free;
     end;
@@ -396,21 +408,21 @@ begin
       For i:= 0 to clbProcedures.Items.Count - 1 do
       begin
         if clbProcedures.Checked[i] and
-          ((ProcList.IndexOf(clbProcedures.Items[i]) = -1) or (ProcGrant[i] and (not OrigProcGrant[i]))) then // Grant this proc
+          ((FProcList.IndexOf(clbProcedures.Items[i]) = -1) or (FProcGrant[i] and (not FOrigProcGrant[i]))) then // Grant this proc
           begin
             Line:= 'grant execute on procedure ' + clbProcedures.Items[i] + ' to ' + cbProcUsers.Text;
-            if ProcGrant[i] then
+            if FProcGrant[i] then
               Line:= Line + ' with grant option';
             List.Add(Line + ';');
 
           end;
 
-        if (not clbProcedures.Checked[i]) and (ProcList.IndexOf(clbProcedures.Items[i]) <> -1) then // Remove this proc
+        if (not clbProcedures.Checked[i]) and (FProcList.IndexOf(clbProcedures.Items[i]) <> -1) then // Remove this proc
           List.Add('Revoke execute on procedure ' + clbProcedures.Items[i] + ' from ' + cbProcUsers.Text + ';');
       end;
       if List.Count > 0 then
       begin
-        fmMain.ShowCompleteQueryWindow(fdbIndex, 'Edit Permission for: ' + cbProcUsers.Text, List.Text, fOnCommitProcedure);
+        fmMain.ShowCompleteQueryWindow(FDBIndex, 'Edit Permission for: ' + cbProcUsers.Text, List.Text, FOnCommitProcedure);
         Close;
         Parent.Free;
       end
@@ -435,21 +447,21 @@ begin
       For i:= 0 to clbRoles.Items.Count - 1 do
       begin
         if clbRoles.Checked[i] and
-          ((RoleList.IndexOf(clbRoles.Items[i]) = -1) or (RoleGrant[i] and (not OrigRoleGrant[i]))) then // Grant this Role
+          ((FRoleList.IndexOf(clbRoles.Items[i]) = -1) or (FRoleGrant[i] and (not FOrigRoleGrant[i]))) then // Grant this Role
         begin
           Line:= 'grant ' + clbRoles.Items[i] + ' to ' + cbRolesUser.Text;
-          if RoleGrant[i] then
+          if FRoleGrant[i] then
             Line:= Line + ' with admin option';
           List.Add(Line + ';');
         end;
 
-        if (not clbRoles.Checked[i]) and (RoleList.IndexOf(clbRoles.Items[i]) <> -1) then // Remove this Role
+        if (not clbRoles.Checked[i]) and (FRoleList.IndexOf(clbRoles.Items[i]) <> -1) then // Remove this Role
           List.Add('Revoke ' + clbRoles.Items[i] + ' from ' + cbRolesUser.Text + ';');
       end;
 
       if List.Count > 0 then
       begin
-        fmMain.ShowCompleteQueryWindow(fdbIndex, 'Edit Permission for: ' + cbRolesUser.Text, List.Text, fOnCommitProcedure);
+        fmMain.ShowCompleteQueryWindow(FDBIndex, 'Edit Permission for: ' + cbRolesUser.Text, List.Text, FOnCommitProcedure);
         Close;
         Parent.Free;
       end
@@ -494,7 +506,7 @@ begin
   Index:= clbProcedures.ItemIndex;
   if Index <> -1 then
   begin
-    cxProcGrant.Checked:= ProcGrant[Index];
+    cxProcGrant.Checked:= FProcGrant[Index];
     cxProcGrant.Caption:= 'With Grant for ' + clbProcedures.Items[Index];
   end;
 end;
@@ -513,7 +525,7 @@ begin
   Index:= clbRoles.ItemIndex;
   if Index <> -1 then
   begin
-    cxRoleGrant.Checked:= RoleGrant[Index];
+    cxRoleGrant.Checked:= FRoleGrant[Index];
     cxRoleGrant.Caption:= 'With Admin for ' + clbRoles.Items[Index];
   end;
 end;
@@ -530,7 +542,7 @@ var
 begin
   Index:= clbProcedures.ItemIndex;
   if Index <> -1 then
-    ProcGrant[Index]:= cxProcGrant.Checked;
+    FProcGrant[Index]:= cxProcGrant.Checked;
 end;
 
 procedure TfmPermissionManage.cxRoleGrantChange(Sender: TObject);
@@ -539,7 +551,7 @@ var
 begin
   Index:= clbRoles.ItemIndex;
   if Index <> -1 then
-    RoleGrant[Index]:= cxRoleGrant.Checked;
+    FRoleGrant[Index]:= cxRoleGrant.Checked;
 end;
 
 procedure TfmPermissionManage.Init(dbIndex: integer; ATableName, AUserName: string; UserType: Integer;
@@ -547,12 +559,10 @@ procedure TfmPermissionManage.Init(dbIndex: integer; ATableName, AUserName: stri
 var
   Count: integer;
 begin
-  fOnCommitProcedure:= OnCommitProcedure;
-  ProcList:= TStringList.Create;
-  RoleList:= TStringList.Create;
+  FOnCommitProcedure:= OnCommitProcedure;
 
   PageControl1.ActivePageIndex:= 0;
-  fdbIndex := dbIndex;
+  FDBIndex := dbIndex;
   cbUsers.Text := AUserName;
   cbTables.Items.CommaText:= dmSysTables.GetDBObjectNames(dbIndex, 1, Count);
   cbViews.Items.CommaText:= dmSysTables.GetDBObjectNames(dbIndex, 4, Count);

+ 278 - 278
querywindow.pas

@@ -32,9 +32,9 @@ type
 
   TQueryThread = class(TThread)
     private
-      fSQLQuery: TSQLQuery;
-      fTrans: TSQLTransaction;
-      fConnection: TIBConnection;
+      FSQLQuery: TSQLQuery;
+      FTrans: TSQLTransaction;
+      FConnection: TIBConnection;
 
     public
       Error: Boolean;
@@ -42,9 +42,9 @@ type
       fTerminated: Boolean;
       fType: TQueryActions;
       fStatement: string;
-      property Query: TSQLQuery read fSQLQuery write fSQLQuery;
-      property Trans: TSQLTransaction read fTrans write fTrans;
-      property Connection: TIBConnection read fConnection write fConnection;
+      property Query: TSQLQuery read FSQLQuery write FSQLQuery;
+      property Trans: TSQLTransaction read FTrans write FTrans;
+      property Connection: TIBConnection read FConnection write FConnection;
       property Statement: String read fStatement write fStatement;
       procedure DoJob;
       procedure Execute; override;
@@ -161,29 +161,29 @@ type
     procedure tbSaveClick(Sender: TObject);
   private
     { private declarations }
-    fdbIndex: Integer; // Index of selected registered database
-    RegRec: TRegisteredDatabase;
-    fResultControls: array of TObject;
-    fParentResultControls: array of TObject;
-    fOptions: set of TSynSearchOption;
-    ibConnection: TIBConnection;
-    fSqlTrans: TSQLTransaction;
-    fCanceled: Boolean;
-    fStartLine: Integer;
-    fQuery: TStringList; //query text
-    fOrigQueryType: TQueryTypes;
-    fFinished: Boolean;
-    fQT: TQueryThread;
-    fQueryPart: string;
-    fTab: TTabSheet;
-    fmeResult: TMemo;
-    fSqlQuery: TSQLQuery;
-    fSqlScript: TModSQLScript;
+    FDBIndex: Integer; // Index of selected registered database
+    FRegRec: TRegisteredDatabase;
+    FResultControls: array of TObject;
+    FParentResultControls: array of TObject;
+    FOptions: set of TSynSearchOption;
+    FIBConnection: TIBConnection;
+    FSQLTrans: TSQLTransaction;
+    FCanceled: Boolean;
+    FStartLine: Integer;
+    FQuery: TStringList; //query text
+    FOrigQueryType: TQueryTypes;
+    FFinished: Boolean;
+    FQT: TQueryThread;
+    FQueryPart: string;
+    FTab: TTabSheet;
+    FResultMemo: TMemo;
+    FSQLQuery: TSQLQuery;
+    FSQLScript: TModSQLScript;
     // Text for caption
-    faText: string;
-    fModifyCount: Integer;
-    fCnt: Integer;
-    fModifiedRecords: array of array of Integer;
+    FAText: string;
+    FModifyCount: Integer;
+    FCounter: Integer;
+    FModifiedRecords: array of array of Integer;
 
     procedure EnableCommitButton;
     procedure ExecuteQuery;
@@ -368,15 +368,15 @@ var
   Exists: Boolean;
 begin
   Exists:= False;
-  if TabIndex > High(fModifiedRecords) then // Insert new tab
+  if TabIndex > High(FModifiedRecords) then // Insert new tab
   begin
-    SetLength(fModifiedRecords, TabIndex + 1);
+    SetLength(FModifiedRecords, TabIndex + 1);
   end;
 
   // Check if record already inserted
-  for i:= 0 to High(fModifiedRecords[TabIndex]) do
+  for i:= 0 to High(FModifiedRecords[TabIndex]) do
   begin
-    if fModifiedRecords[TabIndex][i] = RecordNo then
+    if FModifiedRecords[TabIndex][i] = RecordNo then
     begin
       Exists:= True;
       Break;
@@ -385,12 +385,12 @@ begin
 
   if not Exists then  // Insert record pointer
   begin
-    setLength(fModifiedRecords[TabIndex], Length(fModifiedRecords[TabIndex]) + 1);
-    fModifiedRecords[TabIndex][High(fModifiedRecords[TabIndex])]:= RecordNo;
+    setLength(FModifiedRecords[TabIndex], Length(FModifiedRecords[TabIndex]) + 1);
+    FModifiedRecords[TabIndex][High(FModifiedRecords[TabIndex])]:= RecordNo;
   end;
 
   // Enable apply/save button
-  if Length(fModifiedRecords[TabIndex]) = 1 then
+  if Length(FModifiedRecords[TabIndex]) = 1 then
   begin
     EnableApplyButton;
   end;
@@ -419,27 +419,27 @@ begin
     RecordSet:= GetRecordSet(TabIndex);
 
     // Get primary key name
-    PKIndexName:= fmMain.GetPrimaryKeyIndexName(fdbIndex, ATableName, ConstraintName);
+    PKIndexName:= fmMain.GetPrimaryKeyIndexName(FDBIndex, ATableName, ConstraintName);
     if PKIndexName <> '' then
     begin
       KeyList:= TStringList.Create;
       Fieldslist:= TStringList.Create;
       aQuery:= TSQLQuery.Create(nil);
       try
-        aQuery.DataBase:= ibConnection;
-        aQuery.Transaction:= fSqlTrans;
+        aQuery.DataBase:= FIBConnection;
+        aQuery.Transaction:= FSQLTrans;
 
         // Get primary key fields
         fmMain.GetIndexFields(ATableName, PKIndexName, aQuery, KeyList);
-        fmMain.GetFields(fdbIndex, ATableName, FieldsList);
+        fmMain.GetFields(FDBIndex, ATableName, FieldsList);
         WhereClause:= 'where ';
 
         RecordSet.DisableControls;
         // Check modified fields
-        for i:= Low(fModifiedRecords[TabIndex]) to High(fModifiedRecords[TabIndex]) do
+        for i:= Low(FModifiedRecords[TabIndex]) to High(FModifiedRecords[TabIndex]) do
         begin
           FieldsSQL:= '';
-          RecordSet.RecNo:= fModifiedRecords[TabIndex][i];
+          RecordSet.RecNo:= FModifiedRecords[TabIndex][i];
           for x:= 0 to RecordSet.Fields.Count - 1 do
           begin
             if (FieldsList.IndexOf(RecordSet.Fields[x].FieldName) <> -1) and  // Field exist in origional table
@@ -493,14 +493,14 @@ begin
 
             // Auto commit
             if cxAutoCommit.Checked then
-              fSqlTrans.CommitRetaining
+              FSQLTrans.CommitRetaining
             else
               EnableCommitButton;
           end;
         end;
 
-        // Reset fModifiedRecords pointer
-        fModifiedRecords[TabIndex]:= nil;
+        // Reset FModifiedRecords pointer
+        FModifiedRecords[TabIndex]:= nil;
         RecordSet.EnableControls;
       finally
         FieldsList.Free;
@@ -524,11 +524,11 @@ procedure TfmQueryWindow.EnableApplyButton;
 var
   i: Integer;
 begin
-  for i:= 0 to High(fResultControls) do
-  if (fResultControls[i] is TBitBtn) and ((fResultControls[i] as TBitBtn).Tag = PageControl1.TabIndex) and
-    ((fResultControls[i] as TBitBtn).Caption = 'Apply') then
+  for i:= 0 to High(FResultControls) do
+  if (FResultControls[i] is TBitBtn) and ((FResultControls[i] as TBitBtn).Tag = PageControl1.TabIndex) and
+    ((FResultControls[i] as TBitBtn).Caption = 'Apply') then
   begin
-    (fResultControls[i] as TBitBtn).Visible:= True;
+    (FResultControls[i] as TBitBtn).Visible:= True;
     Break;
   end;
 end;
@@ -540,11 +540,11 @@ procedure TfmQueryWindow.EnableCommitButton;
 var
   i: Integer;
 begin
-  for i:= 0 to High(fResultControls) do
-  if (fResultControls[i] is TBitBtn) and ((fResultControls[i] as TBitBtn).Tag = PageControl1.TabIndex)
-    and ((fResultControls[i] as TBitBtn).Caption = 'Commit') then
+  for i:= 0 to High(FResultControls) do
+  if (FResultControls[i] is TBitBtn) and ((FResultControls[i] as TBitBtn).Tag = PageControl1.TabIndex)
+    and ((FResultControls[i] as TBitBtn).Caption = 'Commit') then
   begin
-    (fResultControls[i] as TBitBtn).Visible:= True;
+    (FResultControls[i] as TBitBtn).Visible:= True;
     Break;
   end;
 end;
@@ -579,11 +579,11 @@ function TfmQueryWindow.GetCurrentSQLText: string;
 var
   i: Integer;
 begin
-  for i:= 0 to High(fResultControls) do
+  for i:= 0 to High(FResultControls) do
   begin
-    if (fResultControls[i] is TDBGrid) and ((fResultControls[i] as TDBGrid).Tag = PageControl1.TabIndex) then
+    if (FResultControls[i] is TDBGrid) and ((FResultControls[i] as TDBGrid).Tag = PageControl1.TabIndex) then
     begin
-      Result:= ((fResultControls[i] as TDBGrid).DataSource.DataSet as TSQLQuery).SQL.Text;
+      Result:= ((FResultControls[i] as TDBGrid).DataSource.DataSet as TSQLQuery).SQL.Text;
       Break;
     end;
   end;
@@ -594,7 +594,7 @@ end;
 
 procedure TfmQueryWindow.CommitResultClick(Sender: TObject);
 begin
-  fSqlTrans.CommitRetaining;
+  FSQLTrans.CommitRetaining;
   (Sender as TBitBtn).Visible:= False;
 end;
 
@@ -623,12 +623,12 @@ function TfmQueryWindow.GetRecordSet(TabIndex: Integer): TSQLQuery;
 var
   i: Integer;
 begin
-  for i:= 0 to High(fResultControls) do
+  for i:= 0 to High(FResultControls) do
   begin
-    if (fResultControls[i] is TSQLQuery) and
-      ((fResultControls[i] as TSQLQuery).Tag = TabIndex) then
+    if (FResultControls[i] is TSQLQuery) and
+      ((FResultControls[i] as TSQLQuery).Tag = TabIndex) then
     begin
-      Result:= fResultControls[i] as TSQLQuery;
+      Result:= FResultControls[i] as TSQLQuery;
       Break;
     end;
   end;
@@ -679,25 +679,25 @@ procedure TQueryThread.DoJob;
 begin
   try
     if fType = qaOpen then
-      fSQLQuery.Open
+      FSQLQuery.Open
     else
     if fType = qaExec then
-      fSQLQuery.ExecSQL
+      FSQLQuery.ExecSQL
     else
     if fType = qaDDL then
-      fConnection.ExecuteDirect(fStatement)
+      FConnection.ExecuteDirect(fStatement)
     else
     if fType = qaCommit then
-      fTrans.Commit
+      FTrans.Commit
     else
     if fType = qaCommitRet then
-      fTrans.CommitRetaining
+      FTrans.CommitRetaining
     else
     if fType = qaRollBack then
-      fTrans.Rollback
+      FTrans.Rollback
     else
     if fType = qaRollbackRet then
-      fTrans.RollbackRetaining;
+      FTrans.RollbackRetaining;
 
     Error:= False;
     fTerminated:= True;
@@ -781,7 +781,7 @@ begin
   ATab:= CreateResultTab(qtExecute, SqlQuery, SqlScript, meResult);
   QT:= TQueryThread.Create(qaCommit);
   try
-    QT.Trans:= fSqlTrans;
+    QT.Trans:= FSQLTrans;
     ATab.ImageIndex:= 6;
 
     // Run thread
@@ -823,7 +823,7 @@ var
 begin
   QT:= TQueryThread.Create(qaCommitRet);
   try
-    QT.Trans:= fSqlTrans;
+    QT.Trans:= FSQLTrans;
 
     // Run thread
     QT.Resume;
@@ -851,7 +851,7 @@ end;
 
 procedure TfmQueryWindow.tbHistoryClick(Sender: TObject);
 begin
-  fmSQLHistory.Init(RegRec.Title, Self);
+  fmSQLHistory.Init(FRegRec.Title, Self);
   fmSQLHistory.Show;
 end;
 
@@ -873,9 +873,9 @@ begin
   // Get a free number to be assigned to the new Query window
   for i:= 1 to 1000 do
   begin
-    if fmMain.FindQueryWindow(RegRec.Title + ': Query Window # ' + IntToStr(i)) = nil then
+    if fmMain.FindQueryWindow(FRegRec.Title + ': Query Window # ' + IntToStr(i)) = nil then
     begin
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Query Window # ' + IntToStr(i), '');
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Query Window # ' + IntToStr(i), '');
       Break;
     end;
   end;
@@ -905,7 +905,7 @@ begin
   ATab:= CreateResultTab(qtExecute, SqlQuery, SqlScript, meResult);
   QT:= TQueryThread.Create(qaRollBack);
   try
-    QT.Trans:= fSqlTrans;
+    QT.Trans:= FSQLTrans;
     ATab.ImageIndex:= 6;
     QT.Resume;
     repeat
@@ -943,12 +943,12 @@ var
 begin
   QT:= TQueryThread.Create(qaRollbackRet);
   try
-    QT.Trans:= fSqlTrans;
+    QT.Trans:= FSQLTrans;
 
     QT.Resume;
     repeat
       application.ProcessMessages;
-    until QT.fTerminated or (fCanceled);
+    until QT.fTerminated or (FCanceled);
     if QT.Error then
       ShowMessage(QT.ErrorMsg);
   finally
@@ -993,21 +993,21 @@ end;
 
 procedure TfmQueryWindow.Init(dbIndex: Integer);
 begin
-  fdbIndex:= dbIndex;
-  RegRec:= fmMain.RegisteredDatabases[dbIndex].RegRec;
+  FDBIndex:= dbIndex;
+  FRegRec:= fmMain.RegisteredDatabases[dbIndex].RegRec;
 
-  // Set instances of IBConnection and SQLTransaction for the current Query Window
-  fmMain.setTransactionIsolation(fSqlTrans.Params);
-  fSqlTrans.DataBase:= ibConnection;
+  // Set instances of FIBConnection and SQLTransaction for the current Query Window
+  fmMain.setTransactionIsolation(FSQLTrans.Params);
+  FSQLTrans.DataBase:= FIBConnection;
 
-  // Set connection parameters to IBConnection
+  // Set connection parameters to FIBConnection
   with fmMain.RegisteredDatabases[dbIndex] do
   begin
-    Self.ibConnection.DatabaseName:= RegRec.DatabaseName;
-    Self.ibConnection.UserName:= RegRec.UserName;
-    Self.ibConnection.Password:= RegRec.Password;
-    Self.IBConnection.CharSet:= RegRec.Charset;
-    Self.ibConnection.Role:= RegRec.Role;
+    Self.FIBConnection.DatabaseName:= RegRec.DatabaseName;
+    Self.FIBConnection.UserName:= RegRec.UserName;
+    Self.FIBConnection.Password:= RegRec.Password;
+    Self.FIBConnection.CharSet:= RegRec.Charset;
+    Self.FIBConnection.Role:= RegRec.Role;
   end;
 
   // Get current database tables to be hilighted in SQL query editor
@@ -1109,8 +1109,8 @@ begin
   begin
     // Query
     aSqlQuery:= TSQLQuery.Create(self);
-    aSqlQuery.DataBase:= ibConnection;
-    aSqlQuery.Transaction:= fSqlTrans;
+    aSqlQuery.DataBase:= FIBConnection;
+    aSqlQuery.Transaction:= FSQLTrans;
     aSqlQuery.AfterScroll:= @QueryAfterScroll;
     aSqlQuery.AfterPost:= @FinishCellEditing;
     aSqlQuery.Tag:= ATab.TabIndex;
@@ -1169,14 +1169,14 @@ begin
       qtExecute:
       begin
         aSqlQuery:= TSQLQuery.Create(self);
-        aSqlQuery.DataBase:= ibConnection;
-        aSqlQuery.Transaction:= fSqlTrans;
+        aSqlQuery.DataBase:= FIBConnection;
+        aSqlQuery.Transaction:= FSQLTrans;
       end;
       qtScript: // Script
       begin
         aSQLScript:= TModSQLScript.Create(self);
-        aSQLScript.DataBase:= ibConnection;
-        aSQLScript.Transaction:= fSqlTrans;
+        aSQLScript.DataBase:= FIBConnection;
+        aSQLScript.Transaction:= FSQLTrans;
         aSQLScript.CommentsInSQL:= true;
         aSQLScript.UseSetTerm:= true; //needed if set term is used, e.g. for stored procedures
       end;
@@ -1198,240 +1198,240 @@ var
 begin
   try
     // Script
-    if (fOrigQueryType = qtScript) then
+    if (FOrigQueryType = qtScript) then
     begin // script
-      ExecuteScript(fQuery.Text);
-      Inc(fModifyCount);
-      SqlType:= GetSQLType(fQuery.Text, Command);
-      fmMain.AddToSQLHistory(RegRec.Title, SqlType, fQuery.Text);
-      fFinished:= True;
-      fQuery.Clear;
+      ExecuteScript(FQuery.Text);
+      Inc(FModifyCount);
+      SqlType:= GetSQLType(FQuery.Text, Command);
+      fmMain.AddToSQLHistory(FRegRec.Title, SqlType, FQuery.Text);
+      FFinished:= True;
+      FQuery.Clear;
     end
     else  // normal statement / Multi statements
     begin
-      Inc(fCnt);
-      if not GetSQLSegment(fQuery, fStartline, fQueryType, EndLine, fQueryPart, IsDDL) then
+      Inc(FCounter);
+      if not GetSQLSegment(FQuery, FStartLine, fQueryType, EndLine, FQueryPart, IsDDL) then
       begin
-        fFinished:= True;
+        FFinished:= True;
         Exit;
       end;
 
-      {if EndLine < fStartLine then
-        fStartLine:= fStartLine + 1
+      {if EndLine < FStartLine then
+        FStartLine:= FStartLine + 1
       else}
-        fStartLine:= EndLine + 1;
+        FStartLine:= EndLine + 1;
 
-      if Trim(fQueryPart) <> '' then   // Select
+      if Trim(FQueryPart) <> '' then   // Select
       if fQueryType = qtSelectable then
       begin
-        fTab:= nil;
+        FTab:= nil;
         try
-          fTab:= CreateResultTab(qtSelectable, fSqlQuery, fSqlScript, fmeResult);
-          fTab.ImageIndex:= 6;
-          fTab.Hint:= fQueryPart;
-          fTab.ShowHint:= True;
-          fSQLQuery.SQL.Text:= fQueryPart;
+          FTab:= CreateResultTab(qtSelectable, FSQLQuery, FSQLScript, FResultMemo);
+          FTab.ImageIndex:= 6;
+          FTab.Hint:= FQueryPart;
+          FTab.ShowHint:= True;
+          FSQLQuery.SQL.Text:= FQueryPart;
 
           // Create thread to open dataset
-          fQT:= TQueryThread.Create(qaOpen);
-          fQT.Query:= fSqlQuery;
-          // fQT.OnTerminate:= @ThreadTerminated;
-          faText:= fTab.Caption;
-          fTab.Caption:= 'Running..';
-          fQT.Resume;
+          FQT:= TQueryThread.Create(qaOpen);
+          FQT.Query:= FSQLQuery;
+          // FQT.OnTerminate:= @ThreadTerminated;
+          FAText:= FTab.Caption;
+          FTab.Caption:= 'Running..';
+          FQT.Resume;
 
           // Wait for the thread to complete
           repeat
             Sleep(100);
             application.ProcessMessages; // This prevents display freeze
-          until fQT.fTerminated;
+          until FQT.fTerminated;
 
           // Raise exception if an error occured during thread execution (Open)
-          if fQT.Error then
-            raise Exception.Create(fQT.ErrorMsg);
+          if FQT.Error then
+            raise Exception.Create(FQT.ErrorMsg);
 
-          fQT.Free;
-          fTab.Caption:= faText;
-          fTab.ImageIndex:= 0;
-          fmMain.AddToSQLHistory(RegRec.Title, 'SELECT', fQueryPart);
+          FQT.Free;
+          FTab.Caption:= FAText;
+          FTab.ImageIndex:= 0;
+          fmMain.AddToSQLHistory(FRegRec.Title, 'SELECT', FQueryPart);
         except
           on e: Exception do
           begin
-            if Assigned(fTab) then
-              fTab.TabVisible:= False;
-            SetLength(fResultControls, High(fResultControls));
-            SetLength(fParentResultControls, High(fParentResultControls));
-            fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
-            PageControl1.ActivePage:= fTab;
-
-            fmeResult.Text:= e.message;
-            fmeResult.Lines.Add(fQueryPart);
-            fmeResult.Font.Color:= clRed;
-            fTab.Font.Color:= clRed;
-            fTab.ImageIndex:= 3;
+            if Assigned(FTab) then
+              FTab.TabVisible:= False;
+            SetLength(FResultControls, High(FResultControls));
+            SetLength(FParentResultControls, High(FParentResultControls));
+            FTab:= CreateResultTab(qtExecute, FSQLQuery, FSQLScript, FResultMemo);
+            PageControl1.ActivePage:= FTab;
+
+            FResultMemo.Text:= e.message;
+            FResultMemo.Lines.Add(FQueryPart);
+            FResultMemo.Font.Color:= clRed;
+            FTab.Font.Color:= clRed;
+            FTab.ImageIndex:= 3;
           end;
         end;
       end
       else  // Execute
         if fQueryType = qtExecute then
         begin
-          fTab:= nil;
-          fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
+          FTab:= nil;
+          FTab:= CreateResultTab(qtExecute, FSQLQuery, FSQLScript, FResultMemo);
 
-          fTab.ImageIndex:= 1;
-          SqlType:= GetSQLType(fQueryPart, Command);
+          FTab.ImageIndex:= 1;
+          SqlType:= GetSQLType(FQueryPart, Command);
           StartTime:= Now;
           Affected:= 0;
           try
             if IsDDL then
             begin
               // Execute the statement in thread
-              fQT:= TQueryThread.Create(qaDDL);
-              fQT.Connection:= ibConnection;
-              fQT.Statement:= fQueryPart;
-              fQT.Resume;
-              faText:= fTab.Caption;
-              fTab.Caption:= 'Running..';
+              FQT:= TQueryThread.Create(qaDDL);
+              FQT.Connection:= FIBConnection;
+              FQT.Statement:= FQueryPart;
+              FQT.Resume;
+              FAText:= FTab.Caption;
+              FTab.Caption:= 'Running..';
 
               // Wait for thread completion
               repeat
                 application.ProcessMessages;
-              until (fQT.fTerminated) or (fCanceled);
+              until (FQT.fTerminated) or (FCanceled);
 
               // Raise exception if an error occured during thread execution (ExecProc)
-              if fQT.Error then
-                raise Exception.Create(fQT.ErrorMsg);
+              if FQT.Error then
+                raise Exception.Create(FQT.ErrorMsg);
 
-              fTab.Caption:= faText;
+              FTab.Caption:= FAText;
 
               // Auto commit
               if cxAutoCommit.Checked then
-                fSqlTrans.Commit;
-              fQT.Free;
+                FSQLTrans.Commit;
+              FQT.Free;
             end
             else
             begin // DML
-              fSqlQuery.Close;
-              fSqlQuery.SQL.Text:= fQueryPart;
-              fTab.ImageIndex:= 6;
-              fTab.Hint:= fQueryPart;
-              fTab.ShowHint:= True;
-              fSQLQuery.SQL.Text:= fQueryPart;
+              FSQLQuery.Close;
+              FSQLQuery.SQL.Text:= FQueryPart;
+              FTab.ImageIndex:= 6;
+              FTab.Hint:= FQueryPart;
+              FTab.ShowHint:= True;
+              FSQLQuery.SQL.Text:= FQueryPart;
 
               // Execute the statement in thread
-              fQT:= TQueryThread.Create(qaExec);
+              FQT:= TQueryThread.Create(qaExec);
               try
-                fQT.Query:= fSqlQuery;
-                fQT.Resume;
-                faText:= fTab.Caption;
-                fTab.Caption:= 'Running..';
+                FQT.Query:= FSQLQuery;
+                FQT.Resume;
+                FAText:= FTab.Caption;
+                FTab.Caption:= 'Running..';
 
                 // Wait for thread completion
                 repeat
                   application.ProcessMessages;
-                until (fQT.fTerminated) or (fCanceled);
+                until (FQT.fTerminated) or (FCanceled);
 
                 // Raise exception if an error occured during thread execution (ExecProc)
-                if fQT.Error then
-                  raise Exception.Create(fQT.ErrorMsg);
+                if FQT.Error then
+                  raise Exception.Create(FQT.ErrorMsg);
 
                 // Auto commit
                 if cxAutoCommit.Checked then
-                  fSqlTrans.Commit;
+                  FSQLTrans.Commit;
               finally
-                fQT.Free;
+                FQT.Free;
               end;
-              fTab.Caption:= faText;
-              fTab.ImageIndex:= 1;
-              Affected:= fsqlQuery.RowsAffected;
+              FTab.Caption:= FAText;
+              FTab.ImageIndex:= 1;
+              Affected:= FSQLQuery.RowsAffected;
             end;
-            Inc(fModifyCount);
+            Inc(FModifyCount);
 
-            fmMain.AddToSQLHistory(RegRec.Title, SQLType, fQueryPart);
-            fmeResult.Visible:= True;
-            fmeResult.Clear;
-            fmeResult.Lines.Add('statement #' + IntToStr(fCnt));
+            fmMain.AddToSQLHistory(FRegRec.Title, SQLType, FQueryPart);
+            FResultMemo.Visible:= True;
+            FResultMemo.Clear;
+            FResultMemo.Lines.Add('statement #' + IntToStr(FCounter));
             if IsDDL then
-              fmeResult.Lines.Add(FormatDateTime('hh:nn:ss.z', Now) + ' - DDL Executed. Takes (H:M:S.MS) ' +
+              FResultMemo.Lines.Add(FormatDateTime('hh:nn:ss.z', Now) + ' - DDL Executed. Takes (H:M:S.MS) ' +
                 FormatDateTime('HH:nn:ss.z', Now - StartTime))
             else // DML
             begin
-              fmeResult.Lines.Add(FormatDateTime('hh:nn:ss.z', Now) + ' - DML Executed. Takes (H:M:S.MS) ' +
+              FResultMemo.Lines.Add(FormatDateTime('hh:nn:ss.z', Now) + ' - DML Executed. Takes (H:M:S.MS) ' +
                 FormatDateTime('HH:nn:ss.z', Now - StartTime));
-              fmeResult.Lines.Add('Rows affected: ' + Format('%3.0n', [Affected / 1]));
+              FResultMemo.Lines.Add('Rows affected: ' + Format('%3.0n', [Affected / 1]));
             end;
-            fmeResult.Lines.Add('----');
-            fmeResult.Lines.Add(fQueryPart);
+            FResultMemo.Lines.Add('----');
+            FResultMemo.Lines.Add(FQueryPart);
           except
             on e: exception do
             begin
-              if Assigned(fTab) then
-                fTab.TabVisible:= False;
-              fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
-              PageControl1.ActivePage:= fTab;
-              fmeResult.Text:= e.message;
-              fmeResult.Lines.Add(fQueryPart);
-              fmeResult.Font.Color:= clRed;
-              fTab.Font.Color:= clRed;
-              fTab.ImageIndex:= 3;
+              if Assigned(FTab) then
+                FTab.TabVisible:= False;
+              FTab:= CreateResultTab(qtExecute, FSQLQuery, FSQLScript, FResultMemo);
+              PageControl1.ActivePage:= FTab;
+              FResultMemo.Text:= e.message;
+              FResultMemo.Lines.Add(FQueryPart);
+              FResultMemo.Font.Color:= clRed;
+              FTab.Font.Color:= clRed;
+              FTab.ImageIndex:= 3;
             end;
           end;
         end
         else  // Script
         begin
           try
-            if ExecuteScript(fQueryPart) then
+            if ExecuteScript(FQueryPart) then
             begin
-              Inc(fModifyCount);
-              SqlType:= GetSQLType(fQueryPart, Command);
-              fmMain.AddToSQLHistory(RegRec.Title, SqlType, fQueryPart);
+              Inc(FModifyCount);
+              SqlType:= GetSQLType(FQueryPart, Command);
+              fmMain.AddToSQLHistory(FRegRec.Title, SqlType, FQueryPart);
             end;
           except
             on e: exception do
             begin
-              if Assigned(fTab) then
-                fTab.TabVisible:= False;
-              fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
-              PageControl1.ActivePage:= fTab;
-              fmeResult.Text:= e.message;
-              fmeResult.Lines.Add(fQueryPart);
-              fmeResult.Lines.Add('--------');
-              fmeResult.Font.Color:= clRed;
-              fTab.Font.Color:= clRed;
-              fTab.ImageIndex:= 3;
+              if Assigned(FTab) then
+                FTab.TabVisible:= False;
+              FTab:= CreateResultTab(qtExecute, FSQLQuery, FSQLScript, FResultMemo);
+              PageControl1.ActivePage:= FTab;
+              FResultMemo.Text:= e.message;
+              FResultMemo.Lines.Add(FQueryPart);
+              FResultMemo.Lines.Add('--------');
+              FResultMemo.Font.Color:= clRed;
+              FTab.Font.Color:= clRed;
+              FTab.ImageIndex:= 3;
             end;
           end;
         end;
-        if (fModifyCount > 50) then
+        if (FModifyCount > 50) then
         begin
           if (MessageDlg('Commit', 'There are too many transactions, do you want to commit',
             mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
           begin
-            fSqlTrans.CommitRetaining;
-            fModifyCount:= 0;
+            FSQLTrans.CommitRetaining;
+            FModifyCount:= 0;
           end
           else
           begin
-            fModifyCount:= 0;
+            FModifyCount:= 0;
           end;
         end;
-      if fStartLine >= fQuery.Count then
-        fFinished:= True;
+      if FStartLine >= FQuery.Count then
+        FFinished:= True;
     end;
   except
     on e: exception do
     begin
-      if Assigned(fTab) then
-        fTab.TabVisible:= False;
-      fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
-      fTab.ImageIndex:= 2;
-      PageControl1.ActivePage:= fTab;
-
-      fmeResult.Text:= e.message;
-      fmeResult.Lines.Add('--------');
-      fmeResult.Lines.Add(fQueryPart);
-      fmeResult.Font.Color:= clRed;
-      fFinished:= True;
+      if Assigned(FTab) then
+        FTab.TabVisible:= False;
+      FTab:= CreateResultTab(qtExecute, FSQLQuery, FSQLScript, FResultMemo);
+      FTab.ImageIndex:= 2;
+      PageControl1.ActivePage:= FTab;
+
+      FResultMemo.Text:= e.message;
+      FResultMemo.Lines.Add('--------');
+      FResultMemo.Lines.Add(FQueryPart);
+      FResultMemo.Font.Color:= clRed;
+      FFinished:= True;
     end;
   end;
 end;
@@ -1463,7 +1463,7 @@ begin
 
       // Auto commit
       if cxAutoCommit.Checked then
-        fSqlTrans.Commit;
+        FSQLTrans.Commit;
 
       Result:= True;
       meResult.Lines.Text:= FormatDateTime('hh:nn:ss.z', Now) + ' - Script Executed. It took (H:M:S.MS) ' +
@@ -1670,21 +1670,21 @@ end;
 
 procedure TfmQueryWindow.FindDialog1Find(Sender: TObject);
 begin
-  fOptions:= [];
+  FOptions:= [];
 
   if frMatchCase in FindDialog1.Options then
-    fOptions:= fOptions + [ssoMatchCase];
+    FOptions:= FOptions + [ssoMatchCase];
 
   if frWholeWord in FindDialog1.Options then
-    fOptions:= fOptions + [ssoWholeWord];
+    FOptions:= FOptions + [ssoWholeWord];
 
   if not (frDown in FindDialog1.Options) then
-    fOptions:= fOptions + [ssoBackwards];
+    FOptions:= FOptions + [ssoBackwards];
 
    if frEntireScope in FindDialog1.Options then
-     fOptions:= fOptions + [ssoEntireScope];
+     FOptions:= FOptions + [ssoEntireScope];
 
-  meQuery.SearchReplace(FindDialog1.FindText, '', fOptions);
+  meQuery.SearchReplace(FindDialog1.FindText, '', FOptions);
 end;
 
 
@@ -1694,14 +1694,14 @@ procedure TfmQueryWindow.FormClose(Sender: TObject;
   var CloseAction: TCloseAction);
 begin
   // Check if the transaction is active; then commit it
-  if fSqlTrans.Active then
+  if FSQLTrans.Active then
   begin
-    fSqlTrans.CommitRetaining;
+    FSQLTrans.CommitRetaining;
     if OnCommit <> nil then
       OnCommit(self);
     OnCommit:= nil;
   end;
-  IBConnection.Close;
+  FIBConnection.Close;
   CloseAction:= caFree;
 end;
 
@@ -1714,14 +1714,14 @@ begin
   // Do not log to debug server if built as release instead of debug
   SetDebuggingEnabled(false);
   {$ENDIF}
-  fQuery:= TStringList.Create;
-  // Initialize new instance of IBConnection and SQLTransaction
-  ibConnection:= TIBConnection.Create(nil);
+  FQuery:= TStringList.Create;
+  // Initialize new instance of FIBConnection and SQLTransaction
+  FIBConnection:= TIBConnection.Create(nil);
   {$IFDEF DEBUG}
-  ibConnection.OnLog:=@GetLogEvent;
-  ibConnection.LogEvents:=[detCustom,detExecute,detCommit,detRollBack];
+  FIBConnection.OnLog:=@GetLogEvent;
+  FIBConnection.LogEvents:=[detCustom,detExecute,detCommit,detRollBack];
   {$ENDIF DEBUG}
-  fSqlTrans:= TSQLTransaction.Create(nil);
+  FSQLTrans:= TSQLTransaction.Create(nil);
   SynCompletion1.ItemList.CommaText:= 'create,table,Select,From,INTEGER,FLOAT';
   SortSynCompletion;
 end;
@@ -1729,9 +1729,9 @@ end;
 procedure TfmQueryWindow.FormDestroy(Sender: TObject);
 begin
   // Clean up resources to avoid memory leaks
-  fSqlTrans.Free;
-  IBConnection.Free;
-  fQuery.Free;
+  FSQLTrans.Free;
+  FIBConnection.Free;
+  FQuery.Free;
 end;
 
 procedure TfmQueryWindow.FormKeyDown(Sender: TObject; var Key: Word;
@@ -2048,7 +2048,7 @@ end;
 
 procedure TfmQueryWindow.lmFindAgainClick(Sender: TObject);
 begin
-  meQuery.SearchReplace(FindDialog1.FindText, '', fOptions);
+  meQuery.SearchReplace(FindDialog1.FindText, '', FOptions);
 end;
 
 
@@ -2075,24 +2075,24 @@ var
 begin
   TabSheet:= nil;
   // Get DataSet's TTabsheet
-  for i:= 0 to High(fResultControls) do
-  if (fResultControls[i] <> nil) and
-    (DataSet = fResultControls[i]) then
+  for i:= 0 to High(FResultControls) do
+  if (FResultControls[i] <> nil) and
+    (DataSet = FResultControls[i]) then
   begin
-    TabSheet:= fParentResultControls[i] as TTabSheet;
+    TabSheet:= FParentResultControls[i] as TTabSheet;
     Break;
   end;
 
 
   // Search for status bar inside current query result TabSheet
   if TabSheet <> nil then
-  for i:= 0 to High(fResultControls) do
-  if fResultControls[i] <> nil then
-    if  (fParentResultControls[i] <> nil) and ((fParentResultControls[i] as TTabSheet) = TabSheet)
-      and (fResultControls[i] is TStatusBar) then
+  for i:= 0 to High(FResultControls) do
+  if FResultControls[i] <> nil then
+    if  (FParentResultControls[i] <> nil) and ((FParentResultControls[i] as TTabSheet) = TabSheet)
+      and (FResultControls[i] is TStatusBar) then
     begin
       // Display current record and number of total records in status bar
-      (fResultControls[i] as TStatusBar).SimpleText:= IntToStr(DataSet.RecordCount) +
+      (FResultControls[i] as TStatusBar).SimpleText:= IntToStr(DataSet.RecordCount) +
       ' records fetched. At record # ' + IntToStr(DataSet.RecNo);
     break;
   end;
@@ -2105,12 +2105,12 @@ end;
 procedure TfmQueryWindow.CallExecuteQuery(aQueryType: TQueryTypes);
 begin
   // Get query text from memo
-  if not(GetQuery(fQuery)) then
+  if not(GetQuery(FQuery)) then
   begin
     ShowMessage('Could not get valid query');
     exit;
   end;
-  fStartLine:= 0;
+  FStartLine:= 0;
 
   // Disable buttons to prevent query interrupt
   tbRun.Enabled:= False;
@@ -2119,20 +2119,20 @@ begin
   tbRollback.Enabled:= False;
   tbRollbackRetaining.Enabled:= False;
 
-  fModifyCount:= 0;
+  FModifyCount:= 0;
 
   // Get initial query type; this can be changed later in the next parts
   if aQueryType = qtUnknown then // Auto
-    fOrigQueryType:= GetQueryType(fQuery.Text)
+    FOrigQueryType:= GetQueryType(FQuery.Text)
   else
-    fOrigQueryType:= aQueryType;
+    FOrigQueryType:= aQueryType;
 
   // Call execute query for each part until finished
-  fCnt:= 0;
-  fFinished:= False;
+  FCounter:= 0;
+  FFinished:= False;
   repeat
     ExecuteQuery;
-  until fFinished;
+  until FFinished;
   EnableButtons;
 end;
 
@@ -2163,32 +2163,32 @@ end;
 procedure TfmQueryWindow.ThreadTerminated(Sender: TObject);
 begin
   // Raise exception if an error occured during thread execution (Open)
-  if fQT.Error then
+  if FQT.Error then
   begin
-    if Assigned(fTab) then
-      fTab.TabVisible:= False;
-    SetLength(fResultControls, High(fResultControls));
-    SetLength(fParentResultControls, High(fParentResultControls));
-    fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
-    PageControl1.ActivePage:= fTab;
-
-    fmeResult.Text:= fQT.ErrorMsg;
-    fmeResult.Lines.Add(fQueryPart);
-    fmeResult.Font.Color:= clRed;
-    fTab.Font.Color:= clRed;
-    fTab.ImageIndex:= 3;
+    if Assigned(FTab) then
+      FTab.TabVisible:= False;
+    SetLength(FResultControls, High(FResultControls));
+    SetLength(FParentResultControls, High(FParentResultControls));
+    FTab:= CreateResultTab(qtExecute, FSQLQuery, FSQLScript, FResultMemo);
+    PageControl1.ActivePage:= FTab;
+
+    FResultMemo.Text:= FQT.ErrorMsg;
+    FResultMemo.Lines.Add(FQueryPart);
+    FResultMemo.Font.Color:= clRed;
+    FTab.Font.Color:= clRed;
+    FTab.ImageIndex:= 3;
   end
   else
   begin
-    fTab.Caption:= faText;
-    fTab.ImageIndex:= 0;
-    fmMain.AddToSQLHistory(RegRec.Title, 'SELECT', fQueryPart);
+    FTab.Caption:= FAText;
+    FTab.ImageIndex:= 0;
+    fmMain.AddToSQLHistory(FRegRec.Title, 'SELECT', FQueryPart);
   end;
-  fQT.Free;
-  if fFinished then
+  FQT.Free;
+  if FFinished then
     EnableButtons;
 
-  if not fFinished then
+  if not FFinished then
     ExecuteQuery;
 
 end;

+ 1 - 1
scriptdb.pas

@@ -57,7 +57,7 @@ implementation
 
 uses SysTables, Main;
 
-// Tries to guess if a constraint name is system-generated.
+// Indicates if a constraint name is system-generated.
 function IsConstraintSystemGenerated(ConstraintName: string): boolean;
 begin
   { Unfortunately there does not seem to be a way to search the system tables

+ 11 - 12
sqlhistory.pas

@@ -33,7 +33,7 @@ type
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormCreate(Sender: TObject);
   private
-    fQueryForm: TForm;
+    FQueryForm: TForm;
     { private declarations }
   public
     { public declarations }
@@ -77,9 +77,9 @@ begin
   end;
 
   if cxOverwrite.Checked then
-    (fQueryForm as TfmQueryWindow).meQuery.Lines.Clear;
+    (FQueryForm as TfmQueryWindow).meQuery.Lines.Clear;
 
-  (fQueryForm as TfmQueryWindow).meQuery.Lines.Text:= (fQueryForm as TfmQueryWindow).meQuery.Lines.Text + SQLStatement;
+  (FQueryForm as TfmQueryWindow).meQuery.Lines.Text:= (FQueryForm as TfmQueryWindow).meQuery.Lines.Text + SQLStatement;
   Close;
 end;
 
@@ -122,14 +122,13 @@ begin
             ((CurrType = 'DDL') and (cbSQLType.ItemIndex in [1, 2])) or
             ((CurrType = 'DML') and (cbSQLType.ItemIndex in [1, 3])) or
             ((CurrType = 'SELECT') and (cbSQLType.ItemIndex = 4)) then
-            begin
-              List.Add('-- ' + FieldByName('Time').AsString);
-              Line:= FieldByName('SQLStatement').AsString;
-              if Pos(';', Line) = 0 then
-                Line:= Line + ';';
-              List.Add(Line);
-            end;
-
+          begin
+            List.Add('-- ' + FieldByName('Time').AsString);
+            Line:= FieldByName('SQLStatement').AsString;
+            if Pos(';', Line) = 0 then
+              Line:= Line + ';';
+            List.Add(Line);
+          end;
         end;
         Next;
       end;
@@ -143,7 +142,7 @@ end;
 
 procedure TfmSQLHistory.Init(DatabaseTitle: string; QueryForm: TForm);
 begin
-  fQueryForm:= QueryForm;
+  FQueryForm:= QueryForm;
   Caption:= 'SQL History for: ' + DatabaseTitle;
   Datasource1.DataSet:= fmMain.mdsHistory;
   fmMain.mdsHistory.Last;

+ 51 - 51
tablemanage.pas

@@ -82,10 +82,10 @@ type
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
   private
-    fdbIndex: Integer;
-    fTableName: string;
-    ibConnection: TIBConnection;
-    sqlTrans: TSQLTransaction;
+    FDBIndex: Integer;
+    FTableName: string;
+    FIBConnection: TIBConnection;
+    FSQLTrans: TSQLTransaction;
   public
     PKeyName, ConstraintName: string;
     procedure Init(dbIndex: Integer; TableName: string);
@@ -142,7 +142,7 @@ begin
     DefaultValue:= Cells[5, Row];
     Description:= Cells[6, Row];
     FieldOrder:= Row;
-    fmNewEditField.Init(fdbIndex, fTableName, foEdit, FieldName, FieldType, DefaultValue, Description, FieldSize,
+    fmNewEditField.Init(FDBIndex, FTableName, foEdit, FieldName, FieldType, DefaultValue, Description, FieldSize,
       FieldOrder, AllowNull, bbRefresh);
 
     Caption:= 'Edit field: ' + OldFieldName;
@@ -161,8 +161,8 @@ begin
     List:= TStringList.Create;
     try
       ATriggerName:= sgTriggers.Cells[0, sgTriggers.Row];
-      dmSysTables.ScriptTrigger(fdbIndex, ATriggerName, List);
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Edit Trigger ', List.Text, bbRefreshTriggers.OnClick);
+      dmSysTables.ScriptTrigger(FDBIndex, ATriggerName, List);
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Edit Trigger ', List.Text, bbRefreshTriggers.OnClick);
     finally
       List.Free;
     end;
@@ -179,10 +179,10 @@ begin
         [mbYes, mbNo], 0) = mrYes) then
     begin
       if Cells[0, Row] = PKeyName then // Delete primary key
-        fmMain.ShowCompleteQueryWindow(fdbIndex,  'Drop Primary Key on Table: ' + fTableName,
-          'alter table ' + fTableName + ' DROP CONSTRAINT ' + ConstraintName, bbRefreshIndices.OnClick)
+        fmMain.ShowCompleteQueryWindow(FDBIndex,  'Drop Primary Key on Table: ' + FTableName,
+          'alter table ' + FTableName + ' DROP CONSTRAINT ' + ConstraintName, bbRefreshIndices.OnClick)
       else // Delete normal index
-        fmMain.ShowCompleteQueryWindow(fdbIndex, 'Drop Index on table: ' + fTableName,
+        fmMain.ShowCompleteQueryWindow(FDBIndex, 'Drop Index on table: ' + FTableName,
           'DROP INDEX ' + Cells[0, Row], bbRefreshIndices.OnClick);
     end;
   end;
@@ -198,8 +198,8 @@ begin
     ConstName:= sgConstraints.Cells[0, sgConstraints.Row];
     if MessageDlg('Are you sure you want to drop ' + ConstName, mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
-      QWindow:= fmMain.ShowQueryWindow(fdbIndex, 'drop constraint: ' + ConstName);
-      QWindow.meQuery.Lines.Text:= 'ALTER TABLE ' + fTableName + ' DROP CONSTRAINT ' + ConstName;
+      QWindow:= fmMain.ShowQueryWindow(FDBIndex, 'drop constraint: ' + ConstName);
+      QWindow.meQuery.Lines.Text:= 'ALTER TABLE ' + FTableName + ' DROP CONSTRAINT ' + ConstName;
       fmMain.Show;
       QWindow.OnCommit:= bbRefreshConstraint.OnClick;
     end;
@@ -214,7 +214,7 @@ begin
     (MessageDlg('Are You sure to drop this trigger', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
   begin
     ATriggerName:= sgTriggers.Cells[0, sgTriggers.Row];
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Drop Trigger : ' + ATriggerName,
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Drop Trigger : ' + ATriggerName,
         'drop trigger ' + ATriggerName, bbRefreshTriggers.OnClick);
 
   end;
@@ -240,12 +240,12 @@ begin
     MessageDlg('Error', 'Your should enter new index name', mtError, [mbOk], 0)
   else
   begin
-    QWindow:= fmMain.ShowQueryWindow(fdbIndex, 'Create new index');
+    QWindow:= fmMain.ShowQueryWindow(FDBIndex, 'Create new index');
     QWindow.meQuery.Lines.Clear;
 
     if cbIndexType.ItemIndex = 0 then // primary key
     begin
-      QWindow.meQuery.Lines.Text:= 'alter table ' + fTableName + LineEnding +
+      QWindow.meQuery.Lines.Text:= 'alter table ' + FTableName + LineEnding +
       'add constraint ' + edIndexName.Text + LineEnding +
       'primary key (' + Fields + ')';
     end
@@ -255,7 +255,7 @@ begin
       if cxUnique.Checked then
         FirstLine:= FirstLine + 'unique ';
       FirstLine:= FirstLine + cbSortType.Text + ' index ' + edIndexName.Text;
-      QWindow.meQuery.Lines.Text:= FirstLine + LineEnding + 'on ' + fTableName + LineEnding + Fields;
+      QWindow.meQuery.Lines.Text:= FirstLine + LineEnding + 'on ' + FTableName + LineEnding + Fields;
     end;
 
     QWindow.OnCommit:= bbRefreshIndices.OnClick;
@@ -268,7 +268,7 @@ var
   fmPermissions: TfmPermissionManage;
 begin
   fmPermissions:= TfmPermissionManage.Create(nil);
-  fmPermissions.Init(fdbIndex, fTableName, '', 1, bbRefreshPermissions.OnClick);
+  fmPermissions.Init(FDBIndex, FTableName, '', 1, bbRefreshPermissions.OnClick);
   fmPermissions.Show;
 end;
 
@@ -285,8 +285,8 @@ begin
   fmNewEditField:= TfmNewEditField.Create(nil);
   with fmNewEditField do
   begin
-    Init(fdbIndex, fTableName, foNew, '', '', '', '', 0, 0, True, bbRefresh);
-    Caption:= 'Add new field on Table: ' + fTableName;
+    Init(FDBIndex, FTableName, foNew, '', '', '', '', 0, 0, True, bbRefresh);
+    Caption:= 'Add new field on Table: ' + FTableName;
     Show;
   end;
 end;
@@ -299,21 +299,21 @@ begin
   // Get current fields
   FieldsList:= TStringList.Create;
   try
-    fmMain.GetFields(fdbIndex, fTableName, FieldsList);
+    fmMain.GetFields(FDBIndex, FTableName, FieldsList);
     fmNewConstraint.clxOnFields.Clear;
     fmNewConstraint.clxOnFields.Items.AddStrings(FieldsList);
   finally
     FieldsList.Free;
   end;
   fmMain.SQLQuery1.Close;
-  fmNewConstraint.edNewName.Text:= 'FK_' + fTableName + '_' + IntToStr(sgConstraints.RowCount);
+  fmNewConstraint.edNewName.Text:= 'FK_' + FTableName + '_' + IntToStr(sgConstraints.RowCount);
 
   // Foreign tables
-  fmNewConstraint.cbTables.Items.CommaText:= dmSysTables.GetDBObjectNames(fdbIndex, 1, Count);
-  fmNewConstraint.DatabaseIndex:= fdbIndex;
+  fmNewConstraint.cbTables.Items.CommaText:= dmSysTables.GetDBObjectNames(FDBIndex, 1, Count);
+  fmNewConstraint.DatabaseIndex:= FDBIndex;
 
-  fmNewConstraint.laTable.Caption:= fTableName;
-  fmNewConstraint.Caption:= 'New Constraint for : ' + fTableName;
+  fmNewConstraint.laTable.Caption:= FTableName;
+  fmNewConstraint.Caption:= 'New Constraint for : ' + FTableName;
   if fmNewConstraint.ShowModal = mrOK then
   begin
     fmNewConstraint.QWindow.OnCommit:= bbRefreshConstraint.OnClick;
@@ -322,27 +322,27 @@ end;
 
 procedure TfmTableManage.bbNewTriggerClick(Sender: TObject);
 begin
-  fmMain.CreateNewTrigger(fdbIndex, fTableName, bbRefreshTriggers.OnClick);
+  fmMain.CreateNewTrigger(FDBIndex, FTableName, bbRefreshTriggers.OnClick);
 end;
 
 procedure TfmTableManage.bbRefreshClick(Sender: TObject);
 begin
-  fmMain.ViewTableFields(fTableName, fdbIndex, sgFields);
+  fmMain.ViewTableFields(FTableName, FDBIndex, sgFields);
   Parent.Show;
   Show;
 end;
 
 procedure TfmTableManage.bbRefreshConstraintClick(Sender: TObject);
 begin
-  SQLTrans.Commit;
-  fmMain.FillAndShowConstraintsForm(Self, fTableName, fdbIndex);
+  FSQLTrans.Commit;
+  fmMain.FillAndShowConstraintsForm(Self, FTableName, FDBIndex);
   Parent.Show;
   Show;
 end;
 
 procedure TfmTableManage.bbRefreshIndicesClick(Sender: TObject);
 begin
-  fmMain.ShowIndicesManagement(Self, fdbIndex, fTableName);
+  fmMain.ShowIndicesManagement(Self, FDBIndex, FTableName);
   Parent.Show;
   Show;
 end;
@@ -356,7 +356,7 @@ end;
 
 procedure TfmTableManage.bbRefreshTriggersClick(Sender: TObject);
 begin
-  SQLTrans.Commit;
+  FSQLTrans.Commit;
   ViewTriggers;
   Parent.Show;
   Show;
@@ -364,9 +364,9 @@ end;
 
 procedure TfmTableManage.bbRefreshReferencesClick(Sender: TObject);
 begin
-  SQLTrans.Commit;
-  dmSysTables.Init(fdbIndex);
-  dmSysTables.GetConstraintsOfTable(fTableName, SQLQuery1);
+  FSQLTrans.Commit;
+  dmSysTables.Init(FDBIndex);
+  dmSysTables.GetConstraintsOfTable(FTableName, SQLQuery1);
   sgReferences.RowCount:= 1;
 
   SQLQuery1.First;
@@ -388,8 +388,8 @@ end;
 procedure TfmTableManage.cbIndexTypeChange(Sender: TObject);
 begin
   case cbIndexType.ItemIndex of
-    0: edIndexName.Text:= 'PK_' + fTableName + '_1';
-    1: edIndexName.Text:= 'IX_' + fTableName + '_' + IntToStr(sgIndices.RowCount);
+    0: edIndexName.Text:= 'PK_' + FTableName + '_1';
+    1: edIndexName.Text:= 'IX_' + FTableName + '_' + IntToStr(sgIndices.RowCount);
   end;
 end;
 
@@ -398,7 +398,7 @@ begin
   if MessageDlg('Are you sure you want to delete the field: ' + sgFields.Cells[1, sgFields.Row] +
     ' with its data', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
-      fmMain.ShowCompleteQueryWindow(fdbIndex, 'Drop field', 'ALTER TABLE ' + fTableName + ' DROP ' +
+      fmMain.ShowCompleteQueryWindow(FDBIndex, 'Drop field', 'ALTER TABLE ' + FTableName + ' DROP ' +
         sgFields.Cells[1, sgFields.Row], @bbRefreshClick);
     end;
 end;
@@ -415,7 +415,7 @@ begin
     else
       UserType:= 2;
     fmPermissions:= TfmPermissionManage.Create(nil);
-    fmPermissions.Init(fdbIndex, fTableName, sgPermissions.Cells[0, sgPermissions.Row], UserType, @bbRefreshPermissionsClick);
+    fmPermissions.Init(FDBIndex, FTableName, sgPermissions.Cells[0, sgPermissions.Row], UserType, @bbRefreshPermissionsClick);
     fmPermissions.Show;
   end
   else
@@ -426,19 +426,19 @@ end;
 procedure TfmTableManage.Init(dbIndex: Integer; TableName: string);
 begin
   try
-    fdbIndex:= dbIndex;
-    fTableName:= TableName;
+    FDBIndex:= dbIndex;
+    FTableName:= TableName;
     with fmMain do
     begin
-      ibConnection:= RegisteredDatabases[dbIndex].IBConnection;
-      ibConnection.Close;
-      sqlTrans:= RegisteredDatabases[dbIndex].SQLTrans;
-      ibConnection.Transaction:= sqlTrans;
+      FIBConnection:= RegisteredDatabases[dbIndex].IBConnection;
+      FIBConnection.Close;
+      FSQLTrans:= RegisteredDatabases[dbIndex].SQLTrans;
+      FIBConnection.Transaction:= FSQLTrans;
     end;
     SQLQuery1.Close;
-    SQLQuery1.DataBase:= ibConnection;
+    SQLQuery1.DataBase:= FIBConnection;
     SQLQuery2.Close;
-    SQLQuery2.DataBase:= ibConnection;
+    SQLQuery2.DataBase:= FIBConnection;
 
   except
     on e: exception do
@@ -451,7 +451,7 @@ end;
 procedure TfmTableManage.FillConstraints(dbIndex: Integer);
 begin
   SQLQuery1.First;
-  fdbIndex:= dbIndex;
+  FDBIndex:= dbIndex;
   sgConstraints.RowCount:= 1;
   with sgConstraints do
   // SQLQuery1 should have been filled by GetTableConstraints
@@ -475,7 +475,7 @@ procedure TfmTableManage.ViewTriggers;
 begin
   SQLQuery1.Close;
   SQLQuery1.SQL.Text:= 'SELECT RDB$Trigger_Name, RDB$Trigger_Inactive FROM RDB$TRIGGERS WHERE RDB$SYSTEM_FLAG=0 ' +
-    'and RDB$Relation_Name = ''' + fTableName + '''';
+    'and RDB$Relation_Name = ''' + FTableName + '''';
   SQLQuery1.Open;
   sgTriggers.RowCount:= 1;
   with sgTriggers, SQLQuery1 do
@@ -500,10 +500,10 @@ var
   ObjType: Integer;
   Permissions: string;
 begin
-  sqlTrans.Commit;
+  FSQLTrans.Commit;
   UsersList:= TStringList.Create;
   try
-    UsersList.CommaText:= dmSysTables.GetDBUsers(fdbIndex, fTableName);
+    UsersList.CommaText:= dmSysTables.GetDBUsers(FDBIndex, FTableName);
     sgPermissions.RowCount:= UsersList.Count + 1;
     for i:= 0 to UsersList.Count - 1 do
     begin
@@ -519,7 +519,7 @@ begin
       sgPermissions.Cells[0, i + 1]:= UserName;
 
       // Permissions
-      Permissions:= dmSysTables.GetObjectUserPermission(fdbIndex, fTableName, UserName, ObjType);
+      Permissions:= dmSysTables.GetObjectUserPermission(FDBIndex, FTableName, UserName, ObjType);
 
       if Pos('S', Permissions) > 0 then
         sgPermissions.Cells[2, i + 1]:= '1'

+ 14 - 13
unitfirebirdservices.pas

@@ -23,8 +23,8 @@ type
     FPassword: String;
     FUserName: String;
     FVerboseOutput: Boolean;
-    PServHandl: pisc_svc_handle;
-    ArrIStat: array [0..19] of ISC_STATUS;
+    FPServHandl: pisc_svc_handle;
+    FArrIStatus: array [0..19] of ISC_STATUS;
 
     procedure SetBkpName(const AValue: String);
     procedure SetDBName(const AValue: String);
@@ -44,6 +44,7 @@ type
     procedure StartBackup;
     procedure StartRestore;
     function ServiceQuery(out S: String): Boolean; //Returns True if there is more output.
+    // Runs sweep on database
     procedure StartSweep;
     function ServiceAttached: Boolean;
 
@@ -175,7 +176,7 @@ begin
   W := Length(S);
   Buff := S;
 
-  if isc_service_start(@ArrIStat, @PServHandl, nil, W, @Buff) <> 0 then
+  if isc_service_start(@FArrIStatus, @FPServHandl, nil, W, @Buff) <> 0 then
     RaiseServiceErr;
 
 end;
@@ -185,12 +186,12 @@ var
   Msg:  array [0..1023] of Char;
   Ps: PISC_STATUS;
 begin
-  Ps := @ArrIStat;
+  Ps := @FArrIStatus;
   isc_interprete(@Msg, @Ps); // Firebird interpretes the error code and
                              // turns it into a human-readable error message.
 
   raise EFBServiceError.Create(
-                   'Error: ' + IntToStr(ArrIStat[1]) + LineEnding + Msg);
+                   'Error: ' + IntToStr(FArrIStatus[1]) + LineEnding + Msg);
 end;
 
 function TFirebirdServices.ServiceQuery(out S: String): Boolean;
@@ -206,7 +207,7 @@ begin
   for I := Low(ResultBuff) to High(ResultBuff) do
     ResultBuff[I] := #0;
 
-  isc_service_query(@ArrIStat, @PServHandl, nil, 0, nil,
+  isc_service_query(@FArrIStatus, @FPServHandl, nil, 0, nil,
                      Length(S2), @RequestBuff, Length(ResultBuff), @ResultBuff);
 
   Result := False;
@@ -267,20 +268,20 @@ begin
 
   Buff := S;
 
-  if isc_service_start(@ArrIStat, @PServHandl, nil, W, @Buff) <> 0 then
+  if isc_service_start(@FArrIStatus, @FPServHandl, nil, W, @Buff) <> 0 then
     RaiseServiceErr;
 end;
 
 function TFirebirdServices.ServiceAttached: Boolean;
 begin
-  Result := PServHandl <> nil;
+  Result := FPServHandl <> nil;
 end;
 
 constructor TFirebirdServices.Create;
 begin
   inherited Create;
 
-  PServHandl := nil;
+  FPServHandl := nil;
   FVerboseOutput := True;
   FHostName := '';
   FBkpName := '';
@@ -332,7 +333,7 @@ begin
 
   Buff := S;
 
-  Result := isc_service_attach(@ArrIStat, W1, @ServiceName, @PServHandl, W2, @Buff) = 0;
+  Result := isc_service_attach(@FArrIStatus, W1, @ServiceName, @FPServHandl, W2, @Buff) = 0;
 
   if not Result then
     RaiseServiceErr;
@@ -341,12 +342,12 @@ end;
 function TFirebirdServices.DetachService: Boolean;
 begin
   Result := True;
-  if PServHandl <> nil then begin
-    Result := isc_service_detach(@ArrIStat, @PServHandl) = 0;
+  if FPServHandl <> nil then begin
+    Result := isc_service_detach(@FArrIStatus, @FPServHandl) = 0;
     if not Result then
       RaiseServiceErr;
 
-    PServHandl := nil;
+    FPServHandl := nil;
   end;
 end;
 

+ 23 - 23
update.pas

@@ -17,10 +17,10 @@ type
 
   THTTPDownload = class(TThread)
     private
-      fURL: string;
-      fFileName: string;
-      fSuccess: Boolean;
-      fErrorMessage: string;
+      FURL: string;
+      FFileName: string;
+      FSuccess: Boolean;
+      FErrorMessage: string;
     public
       constructor Create(URL, FileName: string);
       procedure Execute; override;
@@ -55,8 +55,8 @@ type
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure Timer1Timer(Sender: TObject);
   private
-    fNewFileName: string;
-    downloadThread: THTTPDownload;
+    FNewFileName: string;
+    FDownloadThread: THTTPDownload;
     { private declarations }
     procedure DownloadTerminated(Sender: TObject);
   public
@@ -82,8 +82,8 @@ uses Main;
 constructor THTTPDownload.Create(URL, FileName: string);
 begin
   inherited Create(True);
-  fURL:= URL;
-  fFileName:= FileName;
+  FURL:= URL;
+  FFileName:= FileName;
 end;
 
 procedure THTTPDownload.Execute;
@@ -103,17 +103,17 @@ begin
         http.ProxyPass:= edPassword.Text;
       end;
 
-      fSuccess:= http.HTTPMethod('GET', fURL);
-      if fSuccess then
+      FSuccess:= http.HTTPMethod('GET', FURL);
+      if FSuccess then
       if http.Document.Size > 10000 then  // Actual file has been downloaded
-        http.Document.SaveToFile(ExtractFilePath(ParamStr(0)) + fFileName)
+        http.Document.SaveToFile(ExtractFilePath(ParamStr(0)) + FFileName)
       else
       begin // Error HTML response
         List:= TStringList.Create;
         try
           List.LoadFromStream(http.Document);
-          fSuccess:= False;
-          fErrorMessage:= List.Text;
+          FSuccess:= False;
+          FErrorMessage:= List.Text;
         finally
           List.Free;
         end;
@@ -124,8 +124,8 @@ begin
   except
     on e: exception do
     begin
-      fSuccess:= False;
-      fErrorMessage:= e.Message;
+      FSuccess:= False;
+      FErrorMessage:= e.Message;
     end;
   end;
 
@@ -137,7 +137,7 @@ var
   ResMsg: string;
   ThereIsaNewVersion: Boolean;
 begin
-  if GetNewVersion(fNewFileName, Version, ResMsg, ThereisaNewVersion) then
+  if GetNewVersion(FNewFileName, Version, ResMsg, ThereisaNewVersion) then
   begin
     if ThereisaNewVersion then
     begin
@@ -212,13 +212,13 @@ begin
   bbDownload.Enabled:= True;
   bbSearch.Enabled:= True;
   cxProxy.Enabled:= True;
-  ResMsg:= downloadThread.fErrorMessage;
+  ResMsg:= FDownloadThread.FErrorMessage;
 
-  if downloadThread.fSuccess then
+  if FDownloadThread.FSuccess then
   begin
     stStatus.Caption:= 'Update completed';
     SetCurrentDir(ExtractFileDir(ParamStr(0)));
-    Process1.CommandLine:= AppName + ' ' + fNewFileName + ' ' + ExtractFileName(ParamStr(0));
+    Process1.CommandLine:= AppName + ' ' + FNewFileName + ' ' + ExtractFileName(ParamStr(0));
     Process1.Execute;
     Close;
     fmMain.Close;
@@ -286,10 +286,10 @@ end;
 
 function TfmUpdate.DownloadNewVersion: Boolean;
 begin
-  downloadThread:= THTTPDownload.Create('http://code-sd.com/turbobird/releases/' + fNewFileName, fNewFileName);
-  downloadThread.OnTerminate:= @DownloadTerminated;
-  downloadThread.FreeOnTerminate:= False;
-  downloadThread.Resume;
+  FDownloadThread:= THTTPDownload.Create('http://code-sd.com/turbobird/releases/' + FNewFileName, FNewFileName);
+  FDownloadThread.OnTerminate:= @DownloadTerminated;
+  FDownloadThread.FreeOnTerminate:= False;
+  FDownloadThread.Resume;
 end;
 
 procedure TfmUpdate.Init(aMajor, aMinor, aReleaseVersion: Word);

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio