浏览代码

Store data (e.g. dbindex, field order) for nodes in Data property not Overlayindex, as that will change the nodes' icons.

Reinier Olislagers 11 年之前
父节点
当前提交
10ee69e806
共有 1 个文件被更改,包括 68 次插入68 次删除
  1. 68 68
      main.pas

+ 68 - 68
main.pas

@@ -311,7 +311,7 @@ begin
   with fmCreateUser do
   with fmCreateUser do
   try
   try
     SelNode:= tvMain.Selected;
     SelNode:= tvMain.Selected;
-    dbIndex:= SelNode.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Data);
     Init(dbIndex);
     Init(dbIndex);
     edUserName.Clear;
     edUserName.Clear;
     edPassword.Clear;
     edPassword.Clear;
@@ -350,7 +350,7 @@ var
   SelNode: TTreeNode;
   SelNode: TTreeNode;
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
-  with RegisteredDatabases[tvMain.Selected.OverlayIndex].RegRec do
+  with RegisteredDatabases[PtrInt(tvMain.Selected.Data)].RegRec do
     fmBackupRestore.Init(SelNode.Text, DatabaseName, UserName, Password);
     fmBackupRestore.Init(SelNode.Text, DatabaseName, UserName, Password);
   fmBackupRestore.cbOperation.Enabled:= True;
   fmBackupRestore.cbOperation.Enabled:= True;
   fmBackupRestore.Show;
   fmBackupRestore.Show;
@@ -366,7 +366,7 @@ begin
   if fmChangePass.ShowModal = mrOK then
   if fmChangePass.ShowModal = mrOK then
   begin
   begin
     try
     try
-       dmSysTables.Init(tvMain.Selected.Parent.Parent.OverlayIndex);
+       dmSysTables.Init(PtrInt(tvMain.Selected.Parent.Parent.Data));
        dmSysTables.sqQuery.Close;
        dmSysTables.sqQuery.Close;
        dmSysTables.sqQuery.SQL.Text:= 'alter user ' + tvMain.Selected.Text +
        dmSysTables.sqQuery.SQL.Text:= 'alter user ' + tvMain.Selected.Text +
          ' password ' + QuotedStr(fmChangePass.edPassword.Text);
          ' password ' + QuotedStr(fmChangePass.edPassword.Text);
@@ -386,7 +386,7 @@ var
   Title: string;
   Title: string;
   ATab: TTabSheet;
   ATab: TTabSheet;
 begin
 begin
-  dbIndex:= tvMain.Selected.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Data);
 
 
   // Check if password is saved - it may be empty, which can be valid for
   // Check if password is saved - it may be empty, which can be valid for
   // e.g. embedded databases
   // e.g. embedded databases
@@ -433,7 +433,7 @@ begin
   if InputQuery('Permission', 'Please type a User/Role name to copy perissions to', NewUser) then
   if InputQuery('Permission', 'Please type a User/Role name to copy perissions to', NewUser) then
   begin
   begin
     UserName:= tvMain.Selected.Text;
     UserName:= tvMain.Selected.Text;
-    dbIndex:= tvMain.Selected.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(tvMain.Selected.Parent.Parent.Data);
     List:= TStringList.Create;
     List:= TStringList.Create;
     try
     try
       Scriptdb.ScriptUserAllPermissions(dbIndex, UserName, List, NewUser);
       Scriptdb.ScriptUserAllPermissions(dbIndex, UserName, List, NewUser);
@@ -446,7 +446,7 @@ end;
 
 
 procedure TfmMain.lmCopyTableClick(Sender: TObject);
 procedure TfmMain.lmCopyTableClick(Sender: TObject);
 begin
 begin
-  fmCopyTable.Init(tvMain.Selected.Parent.Parent.OverlayIndex, tvMain.Selected.Text);
+  fmCopyTable.Init(PtrInt(tvMain.Selected.Parent.Parent.Data), tvMain.Selected.Text);
   fmCopyTable.Show;
   fmCopyTable.Show;
 end;
 end;
 
 
@@ -463,7 +463,7 @@ var
   dbIndex: Integer;
   dbIndex: Integer;
 begin
 begin
   Title:= 'Database information for: ' + tvMain.Selected.Text;
   Title:= 'Database information for: ' + tvMain.Selected.Text;
-  dbIndex:= tvMain.Selected.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Data);
 
 
   fmDBInfo:= FindCustomForm(Title, TfmDBInfo) as TfmDBInfo;
   fmDBInfo:= FindCustomForm(Title, TfmDBInfo) as TfmDBInfo;
 
 
@@ -496,7 +496,7 @@ var
   j: Integer;
   j: Integer;
   TabSheet: TTabSheet;
   TabSheet: TTabSheet;
 begin
 begin
-  dbIndex:= tvMain.Selected.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Data);
   RegisteredDatabases[dbIndex].IBConnection.Close;
   RegisteredDatabases[dbIndex].IBConnection.Close;
   for i:= PageControl1.PageCount - 1 downto 0 do
   for i:= PageControl1.PageCount - 1 downto 0 do
     if (PageControl1.Pages[i] as TComponent).Tag = dbIndex then
     if (PageControl1.Pages[i] as TComponent).Tag = dbIndex then
@@ -524,7 +524,7 @@ var
   NotNull: Boolean;
   NotNull: Boolean;
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
-  dbIndex:= SelNode.Parent.Parent.Parent.OverlayIndex;
+  dbIndex:= PtrInt(SelNode.Parent.Parent.Parent.Data);
   FieldName:= Copy(SelNode.Text, 1, Pos(' ', SelNode.Text) - 1);
   FieldName:= Copy(SelNode.Text, 1, Pos(' ', SelNode.Text) - 1);
   if dmSysTables.GetFieldInfo(dbIndex, SelNode.Parent.Text, FieldName,
   if dmSysTables.GetFieldInfo(dbIndex, SelNode.Parent.Text, FieldName,
     FieldType, Size, Scale, NotNull,
     FieldType, Size, Scale, NotNull,
@@ -536,7 +536,7 @@ begin
       CharacterSet, Collation,
       CharacterSet, Collation,
       DefaultValue, Description,
       DefaultValue, Description,
       Size, Scale,
       Size, Scale,
-      SelNode.OverlayIndex, not NotNull,
+      PtrInt(SelNode.Data), not NotNull,
       nil);
       nil);
     fmNewEditField.Show;
     fmNewEditField.Show;
   end
   end
@@ -553,7 +553,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
 
 
     AGenName:= SelNode.Text;
     AGenName:= SelNode.Text;
 
 
@@ -585,7 +585,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, SelNode.Text);
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), SelNode.Text);
     QWindow.meQuery.Lines.Text:= 'select * from ' + SelNode.Text;
     QWindow.meQuery.Lines.Text:= 'select * from ' + SelNode.Text;
     QWindow.bbRunClick(nil);
     QWindow.bbRunClick(nil);
     QWindow.Show;
     QWindow.Show;
@@ -597,7 +597,7 @@ var
   SelNode: TTreeNode;
   SelNode: TTreeNode;
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
-  if ChangeTriggerActivity(SelNode.Parent.Parent.OverlayIndex, SelNode.Text, True) then
+  if ChangeTriggerActivity(PtrInt(SelNode.Parent.Parent.Data), SelNode.Text, True) then
     MessageDlg('Trigger has been activated', mtInformation, [mbOk], 0);
     MessageDlg('Trigger has been activated', mtInformation, [mbOk], 0);
 end;
 end;
 
 
@@ -623,7 +623,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     AProcName:= SelNode.Text;
     AProcName:= SelNode.Text;
-    Body:= GetStoredProcBody(SelNode.Parent.Parent.OverlayIndex, AProcName, SPOwner);
+    Body:= GetStoredProcBody(PtrInt(SelNode.Parent.Parent.Data), AProcName, SPOwner);
     Params:= RetrieveInputParamFromSP(Body);
     Params:= RetrieveInputParamFromSP(Body);
     withParams:= Params <> '';
     withParams:= Params <> '';
     with fmCallProc do
     with fmCallProc do
@@ -654,7 +654,7 @@ begin
 
 
       if (Called) or (not WithParams) then
       if (Called) or (not WithParams) then
       begin
       begin
-        QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Call procedure: ' + AProcName);
+        QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Call procedure: ' + AProcName);
         QWindow.meQuery.lines.Clear;
         QWindow.meQuery.lines.Clear;
         if Pos('suspend', LowerCase(Body)) > 0 then
         if Pos('suspend', LowerCase(Body)) > 0 then
           Line:= 'select * from ' + AProcName
           Line:= 'select * from ' + AProcName
@@ -687,7 +687,7 @@ end;
 
 
 procedure TfmMain.lmConnectAsClick(Sender: TObject);
 procedure TfmMain.lmConnectAsClick(Sender: TObject);
 begin
 begin
-  if ConnectToDBAs(tvMain.Selected.OverlayIndex, True) then
+  if ConnectToDBAs(PtrInt(tvMain.Selected.Data), True) then
     tvMain.Selected.Expand(False)
     tvMain.Selected.Expand(False)
   else
   else
     tvMain.Selected.Collapse(False);
     tvMain.Selected.Collapse(False);
@@ -815,7 +815,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    InitNewGen(SelNode.Parent.Parent.OverlayIndex);
+    InitNewGen(PtrInt(SelNode.Parent.Parent.Data));
     fmNewGen.edGenName.Text:= SelNode.Text;
     fmNewGen.edGenName.Text:= SelNode.Text;
     fmNewGen.edGenName.Enabled:= False;
     fmNewGen.edGenName.Enabled:= False;
     fmNewGen.cxTrigger.Checked:= True;
     fmNewGen.cxTrigger.Checked:= True;
@@ -835,7 +835,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if InputQuery('Create new stored procedure', 'Please enter new procedure name', AProcName) then
   if InputQuery('Create new stored procedure', 'Please enter new procedure name', AProcName) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.OverlayIndex, 'Create new stored procedure');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Data), 'Create new stored procedure');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
  //   QWindow.meQuery.Lines.Add('SET TERM ^;');
  //   QWindow.meQuery.Lines.Add('SET TERM ^;');
     QWindow.meQuery.Lines.Add('CREATE PROCEDURE ' + AProcName);
     QWindow.meQuery.Lines.Add('CREATE PROCEDURE ' + AProcName);
@@ -919,7 +919,7 @@ var
   Count: Integer;
   Count: Integer;
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
-  DBIndex:= SelNode.Parent.OverlayIndex;
+  DBIndex:= PtrInt(SelNode.Parent.Data);
 
 
   TableNames:= dmSysTables.GetDBObjectNames(DBIndex, otTables, Count);
   TableNames:= dmSysTables.GetDBObjectNames(DBIndex, otTables, Count);
   fmCreateTrigger.cbTables.Items.CommaText:= TableNames;
   fmCreateTrigger.cbTables.Items.CommaText:= TableNames;
@@ -938,7 +938,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if InputQuery('Create new view', 'Please enter new view name', AViewName) then
   if InputQuery('Create new view', 'Please enter new view name', AViewName) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.OverlayIndex, 'Create new view');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Data), 'Create new view');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('CREATE VIEW "' + AViewName + '" (');
     QWindow.meQuery.Lines.Add('CREATE VIEW "' + AViewName + '" (');
     QWindow.meQuery.Lines.Add('Field1Name, Field2Name) ');
     QWindow.meQuery.Lines.Add('Field1Name, Field2Name) ');
@@ -954,7 +954,7 @@ var
   SelNode: TTreeNode;
   SelNode: TTreeNode;
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
-  if ChangeTriggerActivity(SelNode.Parent.Parent.OverlayIndex, SelNode.Text, False) then
+  if ChangeTriggerActivity(PtrInt(SelNode.Parent.Parent.Data), SelNode.Text, False) then
     MessageDlg('Trigger has been DeActivated', mtInformation, [mbOk], 0);
     MessageDlg('Trigger has been DeActivated', mtInformation, [mbOk], 0);
 end;
 end;
 
 
@@ -968,7 +968,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex,  'Select first 1000 from ' + SelNode.Text);
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data),  'Select first 1000 from ' + SelNode.Text);
     QWindow.meQuery.Lines.Text:= 'select first 1000 * from "' + SelNode.Text + '"';
     QWindow.meQuery.Lines.Text:= 'select first 1000 * from "' + SelNode.Text + '"';
     QWindow.bbRunClick(nil);
     QWindow.bbRunClick(nil);
     QWindow.Show;
     QWindow.Show;
@@ -986,7 +986,7 @@ begin
   if MessageDlg('Are you sure you want to delete ' + SelNode.Text + ' permanently', mtConfirmation,
   if MessageDlg('Are you sure you want to delete ' + SelNode.Text + ' permanently', mtConfirmation,
     [mbYes, mbNo], 0) = mrYes then
     [mbYes, mbNo], 0) = mrYes then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Drop Exception');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Drop Exception');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('DROP EXCEPTION ' + SelNode.Text + ';');
     QWindow.meQuery.Lines.Add('DROP EXCEPTION ' + SelNode.Text + ';');
     QWindow.Show;
     QWindow.Show;
@@ -1006,7 +1006,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     ATableName:= SelNode.Text;
     ATableName:= SelNode.Text;
     Rec:= RegisteredDatabases[dbIndex];
     Rec:= RegisteredDatabases[dbIndex];
     EditForm:= TfmEditDataFullRec(FindCustomForm(Rec.RegRec.Title + ': Edit Data (Form) for Table : ' +
     EditForm:= TfmEditDataFullRec(FindCustomForm(Rec.RegRec.Title + ': Edit Data (Form) for Table : ' +
@@ -1036,7 +1036,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     AProcName:= SelNode.Text;
     AProcName:= SelNode.Text;
-    DBIndex:= SelNode.Parent.Parent.OverlayIndex;
+    DBIndex:= PtrInt(SelNode.Parent.Parent.Data);
     SPBody:= GetStoredProcBody(DBIndex, AProcName, SPOwner);
     SPBody:= GetStoredProcBody(DBIndex, AProcName, SPOwner);
 
 
     // Procedure body
     // Procedure body
@@ -1066,7 +1066,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     ATableName:= SelNode.Text;
     ATableName:= SelNode.Text;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     Rec:= RegisteredDatabases[dbIndex];
     Rec:= RegisteredDatabases[dbIndex];
     EditWindow:= TfmEditTable(FindCustomForm(Rec.RegRec.Title + ': Edit Data for Table : ' + ATableName, TfmEditTable));
     EditWindow:= TfmEditTable(FindCustomForm(Rec.RegRec.Title + ': Edit Data for Table : ' + ATableName, TfmEditTable));
     if EditWindow = nil then
     if EditWindow = nil then
@@ -1093,10 +1093,10 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     ATriggerName:= SelNode.Text;
     ATriggerName:= SelNode.Text;
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Edit Trigger ' + ATriggerName);
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Edit Trigger ' + ATriggerName);
 
 
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
-    dmSysTables.ScriptTrigger(SelNode.Parent.Parent.OverlayIndex, ATriggerName, QWindow.meQuery.Lines);
+    dmSysTables.ScriptTrigger(PtrInt(SelNode.Parent.Parent.Data), ATriggerName, QWindow.meQuery.Lines);
     QWindow.Show;
     QWindow.Show;
   end;
   end;
 
 
@@ -1115,9 +1115,9 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     AViewName:= SelNode.Text;
     AViewName:= SelNode.Text;
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Edit view ' + AViewName);
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Edit view ' + AViewName);
 
 
-    GetViewInfo(SelNode.Parent.Parent.OverlayIndex, AViewName, Columns, ViewBody);
+    GetViewInfo(PtrInt(SelNode.Parent.Parent.Data), AViewName, Columns, ViewBody);
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('DROP VIEW "' + AViewName + '";');
     QWindow.meQuery.Lines.Add('DROP VIEW "' + AViewName + '";');
     QWindow.meQuery.Lines.Add('');
     QWindow.meQuery.Lines.Add('');
@@ -1251,7 +1251,7 @@ begin
   if fmNewDomain.ShowModal = mrOk then
   if fmNewDomain.ShowModal = mrOk then
   with QWindow do
   with QWindow do
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.OverlayIndex, 'Create new domain');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Data), 'Create new domain');
     meQuery.Lines.Clear;
     meQuery.Lines.Clear;
     Line:= 'CREATE DOMAIN ' + fmNewDomain.edName.Text + ' AS ' + fmNewDomain.cbType.Text;
     Line:= 'CREATE DOMAIN ' + fmNewDomain.edName.Text + ' AS ' + fmNewDomain.cbType.Text;
     if Pos('char', LowerCase(fmNewDomain.cbType.Text)) > 0 then
     if Pos('char', LowerCase(fmNewDomain.cbType.Text)) > 0 then
@@ -1280,7 +1280,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.OverlayIndex, 'Create new Exception');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Data), 'Create new Exception');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('CREATE EXCEPTION Exception_name_1 ''exception message'';');
     QWindow.meQuery.Lines.Add('CREATE EXCEPTION Exception_name_1 ''exception message'';');
     QWindow.Show;
     QWindow.Show;
@@ -1537,7 +1537,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    InitNewGen(SelNode.Parent.OverlayIndex);
+    InitNewGen(PtrInt(SelNode.Parent.Data));
     fmNewGen.edGenName.Clear;
     fmNewGen.edGenName.Clear;
     fmNewGen.edGenName.Enabled:= True;
     fmNewGen.edGenName.Enabled:= True;
     fmNewGen.cxTrigger.Checked:= False;
     fmNewGen.cxTrigger.Checked:= False;
@@ -1557,7 +1557,7 @@ var
   ATab: TTabSheet;
   ATab: TTabSheet;
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
-  dbIndex:= SelNode.Parent.OverlayIndex;
+  dbIndex:= PtrInt(SelNode.Parent.Data);
   Rec:= RegisteredDatabases[dbIndex];
   Rec:= RegisteredDatabases[dbIndex];
 
 
   Title:= SelNode.Parent.Text + ': New Table';
   Title:= SelNode.Parent.Text + ': New Table';
@@ -1606,7 +1606,7 @@ begin
   if InputQuery('Create new function', 'Please enter module name (Library)', ModuleName) then
   if InputQuery('Create new function', 'Please enter module name (Library)', ModuleName) then
   if InputQuery('Create new function', 'Please enter entry point (External function name)', EntryPoint) then
   if InputQuery('Create new function', 'Please enter entry point (External function name)', EntryPoint) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.OverlayIndex, 'Create new function');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Data), 'Create new function');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('DECLARE EXTERNAL FUNCTION "' + AFuncName + '"');
     QWindow.meQuery.Lines.Add('DECLARE EXTERNAL FUNCTION "' + AFuncName + '"');
     QWindow.meQuery.Lines.Add('-- (int, varchar(100))');
     QWindow.meQuery.Lines.Add('-- (int, varchar(100))');
@@ -1629,7 +1629,7 @@ var
   Count: Integer;
   Count: Integer;
   dbIndex: Integer;
   dbIndex: Integer;
 begin
 begin
-  dbIndex:= tvMain.Selected.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Data);
   Rec:= RegisteredDatabases[dbIndex].RegRec;
   Rec:= RegisteredDatabases[dbIndex].RegRec;
   // Password form
   // Password form
   if (Rec.Password = '') and (not tvMain.Selected.Expanded) then
   if (Rec.Password = '') and (not tvMain.Selected.Expanded) then
@@ -1666,7 +1666,7 @@ var
   ATab: TTabSheet;
   ATab: TTabSheet;
   Title: string;
   Title: string;
 begin
 begin
-  dbIndex:= tvMain.Selected.Parent.Parent.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Parent.Parent.Data);
   UserName:= tvMain.Selected.Text;
   UserName:= tvMain.Selected.Text;
   List:= TStringList.Create;
   List:= TStringList.Create;
   try
   try
@@ -1768,7 +1768,7 @@ begin
   else
   else
     ATab:= fmViewGen.Parent as TTabSheet;
     ATab:= fmViewGen.Parent as TTabSheet;
   PageControl1.ActivePage:= ATab;
   PageControl1.ActivePage:= ATab;
-  dbIndex:= tvMain.Selected.Parent.Parent.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Parent.Parent.Data);
   ATab.Tag:= dbIndex;
   ATab.Tag:= dbIndex;
   fmPermissions.Init(dbIndex, '', tvMain.Selected.Text, 2);
   fmPermissions.Init(dbIndex, '', tvMain.Selected.Text, 2);
   fmPermissions.Show;
   fmPermissions.Show;
@@ -1787,7 +1787,7 @@ var
   List: TStringList;
   List: TStringList;
   dbIndex: Integer;
   dbIndex: Integer;
 begin
 begin
-  dbIndex:= tvMain.Selected.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Data);
   QueryWindow:= ShowQueryWindow(dbIndex, 'Database Script');
   QueryWindow:= ShowQueryWindow(dbIndex, 'Database Script');
   Screen.Cursor:= crSQLWait;
   Screen.Cursor:= crSQLWait;
   List:= TStringList.Create;
   List:= TStringList.Create;
@@ -1902,7 +1902,7 @@ var
 begin
 begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if dmSysTables.GetExceptionInfo(SelNode.Text, Msg, Desc, Script) then
   if dmSysTables.GetExceptionInfo(SelNode.Text, Msg, Desc, Script) then
-    ShowCompleteQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Script Exception ' + SelNode.Text, Script, nil);
+    ShowCompleteQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Script Exception ' + SelNode.Text, Script, nil);
 end;
 end;
 
 
 (**************  Script table as Insert stored procedure ************)
 (**************  Script table as Insert stored procedure ************)
@@ -1923,7 +1923,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     ATableName:= SelNode.Text;
     ATableName:= SelNode.Text;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     QWindow:= ShowQueryWindow(dbIndex, 'Script Table as insert : ' + ATableName);
     QWindow:= ShowQueryWindow(dbIndex, 'Script Table as insert : ' + ATableName);
     GetFields(dbIndex, ATableName, nil);
     GetFields(dbIndex, ATableName, nil);
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
@@ -2015,7 +2015,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     ATableName:= SelNode.Text;
     ATableName:= SelNode.Text;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     ScriptList:= TStringList.Create;
     ScriptList:= TStringList.Create;
     try
     try
       ScriptTableAsCreate(dbIndex, ATableName, ScriptList);
       ScriptTableAsCreate(dbIndex, ATableName, ScriptList);
@@ -2153,7 +2153,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     ATableName:= SelNode.Text;
     ATableName:= SelNode.Text;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     QWindow:= ShowQueryWindow(dbIndex, 'Script Table as update: ' + ATableName);
     QWindow:= ShowQueryWindow(dbIndex, 'Script Table as update: ' + ATableName);
     GetFields(dbIndex, ATableName, nil);
     GetFields(dbIndex, ATableName, nil);
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
@@ -2248,7 +2248,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     Rec:= RegisteredDatabases[dbIndex];
     Rec:= RegisteredDatabases[dbIndex];
     SetConnection(dbIndex);
     SetConnection(dbIndex);
 
 
@@ -2275,7 +2275,7 @@ var
   Lines: string;
   Lines: string;
   s: string;
   s: string;
 begin
 begin
-  dbIndex:= tvMain.Selected.OverlayIndex;
+  dbIndex:= PtrInt(tvMain.Selected.Data);
   FireBirdServices:= TFirebirdServices.Create;
   FireBirdServices:= TFirebirdServices.Create;
   try
   try
     FireBirdServices.VerboseOutput:= True;
     FireBirdServices.VerboseOutput:= True;
@@ -2322,7 +2322,7 @@ var
 begin
 begin
   try
   try
     SelNode:= tvMain.Selected;
     SelNode:= tvMain.Selected;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
 
 
     Title:= RegisteredDatabases[dbIndex].RegRec.Title +  ': Management of : ' + SelNode.Text;
     Title:= RegisteredDatabases[dbIndex].RegRec.Title +  ': Management of : ' + SelNode.Text;
     // Fields
     // Fields
@@ -2415,7 +2415,7 @@ begin
       ATab:= ADomainForm.Parent as TTabSheet;
       ATab:= ADomainForm.Parent as TTabSheet;
     PageControl1.ActivePage:= ATab;
     PageControl1.ActivePage:= ATab;
 
 
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     dmSysTables.GetDomainInfo(dbIndex, ADomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
     dmSysTables.GetDomainInfo(dbIndex, ADomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
     ATab.Tag:= dbIndex;
     ATab.Tag:= dbIndex;
     if Pos('default', LowerCase(DefaultValue)) = 1 then
     if Pos('default', LowerCase(DefaultValue)) = 1 then
@@ -2856,7 +2856,7 @@ var
   Count: Integer;
   Count: Integer;
   ANodeText: string;
   ANodeText: string;
 begin
 begin
-  DBIndex:= Node.Parent.OverlayIndex;
+  DBIndex:= PtrInt(Node.Parent.Data);
   Rec:= RegisteredDatabases[DBIndex].RegRec;
   Rec:= RegisteredDatabases[DBIndex].RegRec;
   Screen.Cursor:= crSQLWait;
   Screen.Cursor:= crSQLWait;
   Objects:= TStringList.Create;
   Objects:= TStringList.Create;
@@ -3160,7 +3160,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     Rec:= RegisteredDatabases[dbIndex];
     Rec:= RegisteredDatabases[dbIndex];
     AViewName:= SelNode.Text;
     AViewName:= SelNode.Text;
 
 
@@ -3205,7 +3205,7 @@ var
 begin
 begin
   try
   try
     Node:= tvMain.Selected;
     Node:= tvMain.Selected;
-    dbIndex:= Node.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(Node.Parent.Parent.Data);
     Node.DeleteChildren;
     Node.DeleteChildren;
 
 
     // Primary Keys
     // Primary Keys
@@ -3242,7 +3242,7 @@ begin
           SQLQuery1.FieldByName('field_scale').AsInteger) +
           SQLQuery1.FieldByName('field_scale').AsInteger) +
           ' ' + LenStr;
           ' ' + LenStr;
         FieldNode:= tvMain.Items.AddChild(Node, FieldTitle);
         FieldNode:= tvMain.Items.AddChild(Node, FieldTitle);
-        FieldNode.OverlayIndex:= i;
+        FieldNode.Data:= Pointer(i); //store field order in node's data property
 
 
         // Visually distinguish primary keys
         // Visually distinguish primary keys
         if PKFieldsList.IndexOf(AFieldname) <> -1 then
         if PKFieldsList.IndexOf(AFieldname) <> -1 then
@@ -3284,7 +3284,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     Rec:= RegisteredDatabases[dbIndex];
     Rec:= RegisteredDatabases[dbIndex];
     SQLQuery1.Close;
     SQLQuery1.Close;
     SetConnection(dbIndex);
     SetConnection(dbIndex);
@@ -3342,7 +3342,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
     AProcName:= SelNode.Text;
     AProcName:= SelNode.Text;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     SPBody:= GetStoredProcBody(dbIndex, AProcName, SPOwner);
     SPBody:= GetStoredProcBody(dbIndex, AProcName, SPOwner);
     Title:= SelNode.Parent.Parent.Text +  ': StoredProcedure : ' + AProcName;
     Title:= SelNode.Parent.Parent.Text +  ': StoredProcedure : ' + AProcName;
     // Fill SProc Parameters
     // Fill SProc Parameters
@@ -3403,7 +3403,7 @@ begin
   begin
   begin
     ATriggerName:= SelNode.Text;
     ATriggerName:= SelNode.Text;
     Title:= SelNode.Parent.Parent.Text +  ': Trigger : ' + ATriggerName;
     Title:= SelNode.Parent.Parent.Text +  ': Trigger : ' + ATriggerName;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
     dmSysTables.GetTriggerInfo(dbIndex, ATriggerName, BeforeAfter, OnTable,
     dmSysTables.GetTriggerInfo(dbIndex, ATriggerName, BeforeAfter, OnTable,
       Event, Body, TriggerEnabled, TriggerPosition);
       Event, Body, TriggerEnabled, TriggerPosition);
 
 
@@ -3468,7 +3468,7 @@ begin
   begin
   begin
     AFuncName:= SelNode.Text;
     AFuncName:= SelNode.Text;
     Title:= SelNode.Parent.Parent.Text + ': UDF: ' + AFuncName;
     Title:= SelNode.Parent.Parent.Text + ': UDF: ' + AFuncName;
-    dbIndex:= SelNode.Parent.Parent.OverlayIndex;
+    dbIndex:= PtrInt(SelNode.Parent.Parent.Data);
 
 
     if GetUDFInfo(dbIndex, AFuncName, ModuleName, EntryPoint, Params) then
     if GetUDFInfo(dbIndex, AFuncName, ModuleName, EntryPoint, Params) then
     with fmUDFINfo do
     with fmUDFINfo do
@@ -3515,7 +3515,7 @@ begin
     // Move selection to tables above so object is not in use when deleting it
     // Move selection to tables above so object is not in use when deleting it
     SelNode.Collapse(true);
     SelNode.Collapse(true);
     SelNode.Parent.Selected:=true;
     SelNode.Parent.Selected:=true;
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Drop Table');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Drop Table');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('DROP TABLE ' + SelNode.Text + ';');
     QWindow.meQuery.Lines.Add('DROP TABLE ' + SelNode.Text + ';');
     QWindow.Show;
     QWindow.Show;
@@ -3565,9 +3565,9 @@ begin
   begin
   begin
     fmReg.NewReg:= False;
     fmReg.NewReg:= False;
     fmReg.bbReg.Caption:= 'Save';
     fmReg.bbReg.Caption:= 'Save';
-    fmreg.RecPos:= RegisteredDatabases[SelNode.OverlayIndex].Index;
+    fmreg.RecPos:= RegisteredDatabases[PtrInt(SelNode.Data)].Index;
 
 
-    Rec:= RegisteredDatabases[SelNode.OverlayIndex].OrigRegRec;
+    Rec:= RegisteredDatabases[PtrInt(SelNode.Data)].OrigRegRec;
     fmReg.edDatabaseName.Text:= Rec.DatabaseName;
     fmReg.edDatabaseName.Text:= Rec.DatabaseName;
     fmReg.edTitle.Text:= Rec.Title;
     fmReg.edTitle.Text:= Rec.Title;
     fmReg.edUserName.Text:= Rec.UserName;
     fmReg.edUserName.Text:= Rec.UserName;
@@ -3596,7 +3596,7 @@ begin
   if (SelNode <> nil) and (SelNode.Parent <> nil) and (SelNode.Parent.Parent = nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) and (SelNode.Parent.Parent = nil) then
   if MessageDlg('Are you sure you want to Unregister this database', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
   if MessageDlg('Are you sure you want to Unregister this database', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
   begin
   begin
-    DeleteRegistration(RegisteredDatabases[SelNode.OverlayIndex].Index);
+    DeleteRegistration(RegisteredDatabases[PtrInt(SelNode.Data)].Index);
     LoadRegisteredDatabases;
     LoadRegisteredDatabases;
   end;
   end;
   SelNode:= nil;
   SelNode:= nil;
@@ -3612,7 +3612,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.Parent.OverlayIndex, 'Select first 1000 from ' + SelNode.Text);
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Parent.Data), 'Select first 1000 from ' + SelNode.Text);
     QWindow.meQuery.Lines.Text:= 'select first 1000 * from "' + SelNode.Text + '"';
     QWindow.meQuery.Lines.Text:= 'select first 1000 * from "' + SelNode.Text + '"';
     QWindow.bbRunClick(nil);
     QWindow.bbRunClick(nil);
     QWindow.Show;
     QWindow.Show;
@@ -3629,7 +3629,7 @@ begin
   SelNode:= tvMain.Selected;
   SelNode:= tvMain.Selected;
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   if (SelNode <> nil) and (SelNode.Parent <> nil) then
   begin
   begin
-    QWindow:= ShowQueryWindow(SelNode.Parent.OverlayIndex, 'Create new Role');
+    QWindow:= ShowQueryWindow(PtrInt(SelNode.Parent.Data), 'Create new Role');
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Clear;
     QWindow.meQuery.Lines.Add('CREATE ROLE role_name;');
     QWindow.meQuery.Lines.Add('CREATE ROLE role_name;');
     QWindow.Show;
     QWindow.Show;
@@ -3804,13 +3804,13 @@ begin
       begin
       begin
         if tvMain.Selected.Text = 'Query Window' then
         if tvMain.Selected.Text = 'Query Window' then
         begin
         begin
-          QWindow:= ShowQueryWindow(tvMain.Selected.Parent.OverlayIndex, 'Query Window');
+          QWindow:= ShowQueryWindow(PtrInt(tvMain.Selected.Parent.Data), 'Query Window');
           QWindow.Show;
           QWindow.Show;
         end
         end
         else  // Expand object
         else  // Expand object
         begin
         begin
           tvMainExpanded(nil, Node);
           tvMainExpanded(nil, Node);
-          Rec:= RegisteredDatabases[Node.Parent.OverlayIndex].RegRec;
+          Rec:= RegisteredDatabases[PtrInt(Node.Parent.Data)].RegRec;
         end;
         end;
       end;
       end;
       3: // Object Item Level, like tables, procedures....
       3: // Object Item Level, like tables, procedures....
@@ -3863,12 +3863,12 @@ begin
   if (Node <> nil) then
   if (Node <> nil) then
   if (Node.Parent <> nil) and (Node.Parent.Parent = nil) then   // Expand database
   if (Node.Parent <> nil) and (Node.Parent.Parent = nil) then   // Expand database
   begin
   begin
-    Rec:= RegisteredDatabases[Node.OverlayIndex].RegRec;
-    RegisteredDatabases[Node.OverlayIndex].RegRec.LastOpened:= Now;
-    RegisteredDatabases[Node.OverlayIndex].OrigRegRec.LastOpened:= Now;
+    Rec:= RegisteredDatabases[PtrInt(Node.Data)].RegRec;
+    RegisteredDatabases[PtrInt(Node.Data)].RegRec.LastOpened:= Now;
+    RegisteredDatabases[PtrInt(Node.Data)].OrigRegRec.LastOpened:= Now;
     // Password form
     // Password form
     if Rec.Password = '' then
     if Rec.Password = '' then
-    if ConnectToDBAs(Node.OverlayIndex) then
+    if ConnectToDBAs(PtrInt(Node.Data)) then
       Node.Expand(False)
       Node.Expand(False)
     else
     else
       Node.Collapse(False);
       Node.Collapse(False);
@@ -3963,7 +3963,7 @@ begin
           MainNode:= tvMain.Items.AddChild(ServerNode, Rec.Title);
           MainNode:= tvMain.Items.AddChild(ServerNode, Rec.Title);
           MainNode.ImageIndex:= 0;
           MainNode.ImageIndex:= 0;
           MainNode.SelectedIndex:= 3;
           MainNode.SelectedIndex:= 3;
-          MainNode.OverlayIndex:= i;
+          MainNode.Data:= Pointer(i);
           tvMain.PopupMenu:= pmDatabase;
           tvMain.PopupMenu:= pmDatabase;
 
 
           CNode:= tvMain.Items.AddChild(MainNode, 'Query Window');
           CNode:= tvMain.Items.AddChild(MainNode, 'Query Window');