Advertisement
Guest User

Untitled

a guest
Jun 19th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 105.32 KB | None | 0 0
  1. unit uMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, Buttons, iniFiles, Grids, ComCtrls, DB, ADODB, DBGrids,
  8.   DBCtrls, FileCtrl, CheckLst, Registry, XPMan, ShellAPI, KEEncryption,
  9.   ExtCtrls, KECommon, uSplash, uPermissions, StrUtils;
  10.  
  11. type
  12.   TfrmMain = class(TForm)
  13.     Pages: TPageControl;
  14.     tabLocations: TTabSheet;
  15.     tabComputers: TTabSheet;
  16.     tabServers: TTabSheet;
  17.     tabUsers: TTabSheet;
  18.     cmdNewLocation: TBitBtn;
  19.     cmdEditLocation: TBitBtn;
  20.     cmdDeleteLocation: TBitBtn;
  21.     cmdDeleteComputer: TBitBtn;
  22.     cmdEditComputer: TBitBtn;
  23.     cmdNewComputer: TBitBtn;
  24.     cmdDeleteUser: TBitBtn;
  25.     cmdEditUser: TBitBtn;
  26.     cmdNewUser: TBitBtn;
  27.     tabDatabases: TTabSheet;
  28.     DB: TADOConnection;
  29.     QLocations: TADOQuery;
  30.     DBGrid1: TDBGrid;
  31.     DSLocations: TDataSource;
  32.     DBGrid2: TDBGrid;
  33.     DBGrid5: TDBGrid;
  34.     QComputers: TADOQuery;
  35.     DSComputers: TDataSource;
  36.     QServers: TADOQuery;
  37.     DSServers: TDataSource;
  38.     QSYSDatabases: TADOQuery;
  39.     DSSYSDatabases: TDataSource;
  40.     QUsers: TADOQuery;
  41.     DSUsers: TDataSource;
  42.     DBMaster: TADOConnection;
  43.     cboComputerLocation: TComboBox;
  44.     Label2: TLabel;
  45.     QTemp: TADOQuery;
  46.     cboCompOrder: TComboBox;
  47.     Label3: TLabel;
  48.     optComputerA: TRadioButton;
  49.     optComputerZ: TRadioButton;
  50.     optLocationZ: TRadioButton;
  51.     optLocationA: TRadioButton;
  52.     cboLocationOrder: TComboBox;
  53.     Label4: TLabel;
  54.     optUserZ: TRadioButton;
  55.     optUserA: TRadioButton;
  56.     cboUserOrder: TComboBox;
  57.     Label7: TLabel;
  58.     QDatabases: TADOQuery;
  59.     DSDatabases: TDataSource;
  60.     Label21: TLabel;
  61.     cboCompStatus: TComboBox;
  62.     lblWarning: TLabel;
  63.     lblCompTotal: TLabel;
  64.     lblLocTotal: TLabel;
  65.     lblUserTotal: TLabel;
  66.     cmdRefreshLocations: TBitBtn;
  67.     cmdRefreshComputers: TBitBtn;
  68.     cmdRefreshUsers: TBitBtn;
  69.     tabTools: TTabSheet;
  70.     ADOTest: TADOConnection;
  71.     cmdUserPriv: TBitBtn;
  72.     lstToolMenu: TListBox;
  73.     XP: TXPManifest;
  74.     cmdCompRemote: TBitBtn;
  75.     cmdNewTool: TBitBtn;
  76.     cmdEditTool: TBitBtn;
  77.     cmdDeleteTool: TBitBtn;
  78.     cmdOpenTool: TBitBtn;
  79.     Panel1: TPanel;
  80.     Label12: TLabel;
  81.     DBGrid4: TDBGrid;
  82.     lblDBTotal: TLabel;
  83.     cboDatabaseServer: TComboBox;
  84.     Label1: TLabel;
  85.     Splitter1: TSplitter;
  86.     Panel2: TPanel;
  87.     Label10: TLabel;
  88.     cboDBStatus: TComboBox;
  89.     cboDBType: TComboBox;
  90.     Label11: TLabel;
  91.     Label6: TLabel;
  92.     cboDBOrder: TComboBox;
  93.     Label8: TLabel;
  94.     optDBA: TRadioButton;
  95.     optDBZ: TRadioButton;
  96.     DBGrid6: TDBGrid;
  97.     lblRegDBTotal: TLabel;
  98.     cmdVerifyDB: TBitBtn;
  99.     cmdRefreshDatabases: TBitBtn;
  100.     cmdEditDB: TBitBtn;
  101.     cmdNewDB: TBitBtn;
  102.     cmdRemoveDB: TBitBtn;
  103.     Panel3: TPanel;
  104.     DBGrid3: TDBGrid;
  105.     lblServTotal: TLabel;
  106.     cmdVerifyServer: TBitBtn;
  107.     cmdRefreshServers: TBitBtn;
  108.     cmdDeleteServer: TBitBtn;
  109.     cmdEditServer: TBitBtn;
  110.     cmdNewServer: TBitBtn;
  111.     cboServerOrder: TComboBox;
  112.     Label5: TLabel;
  113.     optServerA: TRadioButton;
  114.     optServerZ: TRadioButton;
  115.     cboSQLServerStatus: TComboBox;
  116.     Label22: TLabel;
  117.     cboServerLocation: TComboBox;
  118.     Label9: TLabel;
  119.     Panel4: TPanel;
  120.     Label13: TLabel;
  121.     lblAvailServCount: TLabel;
  122.     Splitter2: TSplitter;
  123.     cmdAvailServ: TBitBtn;
  124.     cmdAvailDB: TBitBtn;
  125.     lstAvailServ: TStringGrid;
  126.     cmdRefreshAvailServ: TBitBtn;
  127.     tabAudit: TTabSheet;
  128.     lstAudit: TStringGrid;
  129.     cmdViewAudit: TBitBtn;
  130.     cmdRefreshAudit: TBitBtn;
  131.     Label14: TLabel;
  132.     cboAuditTable: TComboBox;
  133.     Label15: TLabel;
  134.     cboAuditType: TComboBox;
  135.     tabSettings: TTabSheet;
  136.     SettingsPages: TPageControl;
  137.     tabSettingsVariables: TTabSheet;
  138.     tabSettingsLists: TTabSheet;
  139.     tabSettingsSources: TTabSheet;
  140.     lstVariables: TListBox;
  141.     Label16: TLabel;
  142.     txtVariableName: TEdit;
  143.     Label17: TLabel;
  144.     Label18: TLabel;
  145.     txtVariableValue: TEdit;
  146.     Label19: TLabel;
  147.     Label20: TLabel;
  148.     cmdAddVariable: TBitBtn;
  149.     cmdEditVariable: TBitBtn;
  150.     cmdDeleteVariable: TBitBtn;
  151.     cmdAddDB: TBitBtn;
  152.     cmdPermissions: TBitBtn;
  153.     TabSheet1: TTabSheet;
  154.     StatusBar1: TStatusBar;
  155.     txtServiceLog: TMemo;
  156.     Splitter3: TSplitter;
  157.     pServiceSettings: TPanel;
  158.     Label23: TLabel;
  159.     chkEnableService: TCheckBox;
  160.     pService: TPanel;
  161.     chkServiceVerifyComputers: TCheckBox;
  162.     chkServiceVerifyServers: TCheckBox;
  163.     chkServiceVerifyDatabases: TCheckBox;
  164.     chkServiceVerifySources: TCheckBox;
  165.     cmdRefreshServiceLog: TBitBtn;
  166.     TabSheet2: TTabSheet;
  167.     pUpdates: TPanel;
  168.     lstUpdates: TStringGrid;
  169.     Label24: TLabel;
  170.     Splitter4: TSplitter;
  171.     pUpdateFiles: TPanel;
  172.     Label25: TLabel;
  173.     lstUpdateFiles: TStringGrid;
  174.     cmdNewUpdate: TBitBtn;
  175.     cmdEditUpdate: TBitBtn;
  176.     pUpdateDetails: TPanel;
  177.     chkUpdateActive: TCheckBox;
  178.     pUpdateFileDetails: TPanel;
  179.     Label26: TLabel;
  180.     lblUpdateID: TLabel;
  181.     dtUpdateReleaseDate: TDateTimePicker;
  182.     Label27: TLabel;
  183.     txtUpdatePriority: TEdit;
  184.     Label28: TLabel;
  185.     txtUpdateFileCaption: TEdit;
  186.     Label29: TLabel;
  187.     cmdNewUpdateFile: TBitBtn;
  188.     cmdEditUpdateFile: TBitBtn;
  189.     cmdDeleteUpdateFile: TBitBtn;
  190.     chkUpdateFileActive: TCheckBox;
  191.     txtUpdateFileSourcePath: TEdit;
  192.     Label30: TLabel;
  193.     txtUpdateFileDestPath: TEdit;
  194.     Label31: TLabel;
  195.     cmdUpdateFileBrowseSourcePath: TBitBtn;
  196.     cmdUpdateFileBrowseDestPath: TBitBtn;
  197.     txtUpdateFileFilename: TEdit;
  198.     Label32: TLabel;
  199.     cmdUpdateFileBrowseFilename: TBitBtn;
  200.     Panel5: TPanel;
  201.     cmdCancelUpdateFile: TBitBtn;
  202.     cmdSaveUpdateFile: TBitBtn;
  203.     Panel6: TPanel;
  204.     cmdSaveUpdate: TBitBtn;
  205.     cmdCancelUpdate: TBitBtn;
  206.     Label33: TLabel;
  207.     txtUpdateFilePriority: TEdit;
  208.     cmdReplicateUpdate: TBitBtn;
  209.     Panel7: TPanel;
  210.     cmdClose: TBitBtn;
  211.     procedure cmdNewComputerClick(Sender: TObject);
  212.     procedure cmdEditComputerClick(Sender: TObject);
  213.     procedure cmdCloseClick(Sender: TObject);
  214.     procedure FormCreate(Sender: TObject);
  215.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  216.     procedure cboDatabaseServerClick(Sender: TObject);
  217.     procedure cboComputerLocationClick(Sender: TObject);
  218.     procedure DBGrid2DblClick(Sender: TObject);
  219.     procedure cmdEditLocationClick(Sender: TObject);
  220.     procedure cmdNewLocationClick(Sender: TObject);
  221.     procedure DBGrid1DblClick(Sender: TObject);
  222.     procedure DBGrid2TitleClick(Column: TColumn);
  223.     procedure DBGrid4DblClick(Sender: TObject);
  224.     procedure cmdAddDBClick(Sender: TObject);
  225.     procedure DBGrid6DblClick(Sender: TObject);
  226.     procedure cboLocationOrderClick(Sender: TObject);
  227.     procedure cboServerOrderClick(Sender: TObject);
  228.     procedure cmdDeleteComputerClick(Sender: TObject);
  229.     procedure cboDBStatusClick(Sender: TObject);
  230.     procedure cmdNewDBClick(Sender: TObject);
  231.     procedure cmdDeleteDBClick(Sender: TObject);
  232.     procedure cmdDeleteServerClick(Sender: TObject);
  233.     procedure cmdNewServerClick(Sender: TObject);
  234.     procedure cmdEditServerClick(Sender: TObject);
  235.     procedure cboCompStatusChange(Sender: TObject);
  236.     procedure cboSQLServerStatusClick(Sender: TObject);
  237.     procedure cmdNewUserClick(Sender: TObject);
  238.     procedure cmdEditUserClick(Sender: TObject);
  239.     procedure cboCompStatusClick(Sender: TObject);
  240.     procedure cmdRefreshLocationsClick(Sender: TObject);
  241.     procedure cmdRefreshComputersClick(Sender: TObject);
  242.     procedure cmdRefreshServersClick(Sender: TObject);
  243.     procedure cmdRefreshDatabasesClick(Sender: TObject);
  244.     procedure cmdRefreshUsersClick(Sender: TObject);
  245.     procedure cboUserOrderClick(Sender: TObject);
  246.     procedure cmdDeleteUserClick(Sender: TObject);
  247.     procedure FormShow(Sender: TObject);
  248.     procedure cmdVerifyDBClick(Sender: TObject);
  249.     procedure cmdDeleteLocationClick(Sender: TObject);
  250.     procedure cmdUserPrivClick(Sender: TObject);
  251.     procedure PagesChange(Sender: TObject);
  252.     procedure lstToolMenuDblClick(Sender: TObject);
  253.     procedure cmdCompRemoteClick(Sender: TObject);
  254.     procedure cmdVerifyServerClick(Sender: TObject);
  255.     procedure Button1Click(Sender: TObject);
  256.     procedure cmdDeleteToolClick(Sender: TObject);
  257.     procedure cmdNewToolClick(Sender: TObject);
  258.     procedure cmdEditToolClick(Sender: TObject);
  259.     procedure cmdOpenToolClick(Sender: TObject);
  260.     procedure Panel1Resize(Sender: TObject);
  261.     procedure Panel4Resize(Sender: TObject);
  262.     procedure Panel2Resize(Sender: TObject);
  263.     procedure Panel3Resize(Sender: TObject);
  264.     procedure cmdAvailDBClick(Sender: TObject);
  265.     procedure cmdAvailServClick(Sender: TObject);
  266.     procedure cmdRefreshAvailServClick(Sender: TObject);
  267.     procedure cmdRefreshAuditClick(Sender: TObject);
  268.     procedure cmdViewAuditClick(Sender: TObject);
  269.     procedure cboAuditTableClick(Sender: TObject);
  270.     procedure cboAuditTypeClick(Sender: TObject);
  271.     procedure lstVariablesClick(Sender: TObject);
  272.     procedure cmdAddVariableClick(Sender: TObject);
  273.     procedure cmdEditVariableClick(Sender: TObject);
  274.     procedure cmdPermissionsClick(Sender: TObject);
  275.     procedure chkEnableServiceClick(Sender: TObject);
  276.     procedure cmdRefreshServiceLogClick(Sender: TObject);
  277.     procedure lstUpdatesClick(Sender: TObject);
  278.     procedure cmdNewUpdateClick(Sender: TObject);
  279.     procedure cmdEditUpdateClick(Sender: TObject);
  280.     procedure cmdCancelUpdateClick(Sender: TObject);
  281.     procedure cmdSaveUpdateClick(Sender: TObject);
  282.     procedure cmdNewUpdateFileClick(Sender: TObject);
  283.     procedure cmdCancelUpdateFileClick(Sender: TObject);
  284.     procedure lstUpdateFilesClick(Sender: TObject);
  285.     procedure cmdSaveUpdateFileClick(Sender: TObject);
  286.     procedure cmdEditUpdateFileClick(Sender: TObject);
  287.     procedure chkServiceVerifyComputersClick(Sender: TObject);
  288.     procedure chkServiceVerifyServersClick(Sender: TObject);
  289.     procedure chkServiceVerifyDatabasesClick(Sender: TObject);
  290.     procedure chkServiceVerifySourcesClick(Sender: TObject);
  291.   private
  292.     { Private declarations }
  293.     oldOrd: string;
  294.   public
  295.     { Public declarations }
  296.     SessionID: Integer;                 //Current session id
  297.     CurrentUser: Integer;               //Currently logged in user's id
  298.     DComputers: TStringList;            //Virtual list of registered computers
  299.     CurConnection: String;              //Connection string of local database
  300.     DoLoad: Bool;                       //Specifies whether or not program should load
  301.     CurCompID: Integer;                 //Current computer's ID
  302.     Spl: TfrmSplash;                    //Splash Screen
  303.     NewDBType: Bool;                    //Specifies that new db type has been created
  304.     VariableEditState: String;          //Determines state of edit for a variable
  305.     EditUpdate: Integer;                //Specifies what update id is being edited
  306.     EditUpdateState: String;            //Specifies whether update is new or edit
  307.     EditUpdateFile: Integer;            //Specifies what update file id is being edited
  308.     EditUpdateFileState: String;        //Specifies whether update file is new or edit
  309.  
  310.     procedure LoadComputers;            //Loads all registered computers into DComputers
  311.  
  312.     procedure RefreshComputerLocations;
  313.     procedure RefreshServerLocations;
  314.     procedure RefreshDatabaseServers;
  315.     procedure RefreshDatabaseStatuses;
  316.     procedure RefreshDatabaseTypes;
  317.     procedure RefreshLists;             //Performs the above 5 procedures at once
  318.  
  319.     procedure RefreshLocations;
  320.     procedure RefreshComputers;
  321.     procedure RefreshServers;
  322.     procedure RefreshDatabases;
  323.     procedure RefreshUsers;
  324.     procedure RefreshAudit;
  325.     procedure RefreshTools;
  326.     procedure RefreshVariables;
  327.  
  328.     procedure RefreshServiceLog;
  329.     procedure RefreshServiceSettings;
  330.     procedure SaveServiceSettings;
  331.  
  332.     procedure RefreshUpdates;
  333.     procedure RefreshUpdate(UpdateID: Integer);
  334.     procedure RefreshUpdateFiles(UpdateID: Integer);
  335.     procedure RefreshUpdateFile(FileID: Integer);
  336.     procedure EnableUpdateEdit;
  337.     procedure DisableUpdateEdit;
  338.     procedure EnableUpdateFileEdit;
  339.     procedure DisableUpdateFileEdit;
  340.     procedure SelectUpdate(UpdateID: Integer);
  341.     procedure SelectUpdateFile(FileID: Integer);
  342.     procedure ClearUpdateFile;
  343.  
  344.     procedure SaveOptions;
  345.     procedure LoadOptions;
  346.  
  347.     procedure ListAvailableSQLServers(Names : TStrings);
  348.     procedure GetServerList;
  349.  
  350.     procedure SetPriv;
  351.  
  352.     procedure SaveAudit(TableName: String; RecordID: Integer; State: String);
  353.   end;
  354.  
  355. var
  356.   frmMain: TfrmMain;
  357.   function PromptIP(IPAddress: TIPAddress): TIPAddress;
  358.  
  359. implementation
  360.  
  361. uses uComputer, uLocation, uDatabase, uServer, uUser, uLogin,
  362.   uUpdate, uPriv, uConnection, MainUnit, uTool, ActionUnit, RemDeskUnit,
  363.   OptionsUnit, AboutUnit, AdoInt, OleDB, ActiveX, ComObj, uAuditDetail,
  364.   uEditIP;
  365.  
  366. {$R *.dfm}
  367.  
  368.  
  369. procedure TfrmMain.cmdNewComputerClick(Sender: TObject);
  370. begin
  371.   frmComputer.EditState:= 'New';
  372.   frmComputer.ShowModal;
  373.   RefreshComputers;
  374. end;
  375.  
  376. procedure TfrmMain.cmdEditComputerClick(Sender: TObject);
  377. begin
  378.   if not QComputers.IsEmpty then begin
  379.     frmComputer.EditState:= 'Edit';
  380.     frmComputer.EditComp:= QComputers.FieldByName('ID').AsInteger;
  381.     frmComputer.ShowModal;
  382.     RefreshComputers;
  383.   end;
  384. end;
  385.  
  386. procedure TfrmMain.cmdCancelUpdateClick(Sender: TObject);
  387. begin
  388.   DisableUpdateEdit;
  389.   SelectUpdate(EditUpdate);
  390.   lstUpdatesClick(Sender);
  391. end;
  392.  
  393. procedure TfrmMain.cmdCloseClick(Sender: TObject);
  394. begin
  395.   Close;
  396. end;
  397.  
  398. procedure TfrmMain.FormCreate(Sender: TObject);
  399. var
  400.   R: TRegistry;
  401.   C: TfrmConnection;
  402.   CName: String;
  403.   IsValid: Bool;
  404.   P: String;
  405.   D: TEncType;
  406.   DidConnect: Bool;
  407.   X: Integer;
  408.   Con: TfrmConnection;
  409. begin
  410.   Spl:= TfrmSplash.Create(nil);
  411.   Self.Hide;
  412.   Spl.Show;
  413.   Spl.PostStat('Loading Program...', 10);
  414.   Application.ProcessMessages;
  415.  
  416.   DoLoad:= True;                              //Presume all is ok from beginning
  417.   lblAvailServCount.Caption:= '';             //Clear contents for number of available servers
  418.   pServiceSettings.Align:= alClient;
  419.   pUpdateFiles.Align:= alClient;
  420.   Pages.Align:= alClient;
  421.   lblUpdateID.Caption:= '';
  422.  
  423.   if DB.Connected then DB.Connected:= False;  //Disconnect if connected
  424.   CurrentConnection:= TConn.Create;           //Create local connection object
  425.   Spl.PostStat('Finding Connection Information...', 20);
  426.   R:= TRegistry.Create;                       //Open registry
  427.   try
  428.     R.RootKey:= HKEY_LOCAL_MACHINE;           //Open registry root
  429.     if R.KeyExists('software\7Lands\Rugm\Local\Connection') then begin  //Make sure registry key exists
  430.       R.Access:= KEY_READ;                    //Set registry access
  431.       R.OpenKey('software\7Lands\Rugm\Local\Connection', True);         //Open registry key
  432.         CurrentConnection.Server:=                R.ReadString('Server');         //and set connection info
  433.         CurrentConnection.Database:=              R.ReadString('Database');
  434.         CurrentConnection.Login:=                 R.ReadString('Login');
  435.         CurrentConnection.Password:=              R.ReadString('Pass');
  436.         CurrentConnection.Provider:=              R.ReadString('Provider');
  437.         CurrentConnection.PersistSecurityInfo:=   R.ReadBool('Persist');
  438.       R.CloseKey;                                                       //Close registry key
  439.     end else begin                                                      //Connection info was not found, prompt for it
  440.       //Prompt for Connection
  441.       ShowMessage('No local database connection information found.'+#13+
  442.         'Please enter the required connection details...');
  443.       C:= TfrmConnection.Create(frmMain);                               //Create connection form
  444.       try
  445.         C.ShowModal;                                                    //Open connection form and prompt for connection details
  446.         CurrentConnection.Server:=      C.txtServer.Text;
  447.         CurrentConnection.Database:=    C.txtDatabase.Text;
  448.         CurrentConnection.Login:=       C.txtLogin.Text;
  449.         CurrentConnection.Password:=    C.txtPass.Text;
  450.         if C.ModalResult = mrCancel then Close;                         //Close if canceled
  451.       finally
  452.         C.Free;
  453.       end;
  454.     end;
  455.   finally
  456.     R.Free;
  457.   end;
  458.   Spl.PostStat('Connecting to Database...', 30);
  459.   CurConnection:= CurrentConnection.ConnectionString;                    //Build local connection string
  460.   DB.ConnectionString:= CurrentConnection.ConnectionString;                //Assign connection string to database component\
  461.  
  462.   //try to connect with givin information
  463.   DidConnect:= True;
  464.   for X := 1 to 4 do begin
  465.     try
  466.       if DidConnect = False then begin
  467.         Con:= TfrmConnection.Create(nil);
  468.         try
  469.           Con.txtServer.Text:= CurrentConnection.Server;
  470.           Con.txtDatabase.Text:= CurrentConnection.Database;
  471.           Con.txtLogin.Text:= CurrentConnection.Login;
  472.           Con.txtPass.Text:= CurrentConnection.Password;
  473.           Con.ShowModal;
  474.           if Con.ModalResult <> mrCancel then begin   //Modal result doesn't seem to return as expected
  475.             CurrentConnection.Server:= Con.txtServer.Text;
  476.             CurrentConnection.Database:= Con.txtDatabase.Text;
  477.             CurrentConnection.Login:= Con.txtLogin.Text;
  478.             CurrentConnection.Password:= Con.txtPass.Text;
  479.           end else begin
  480.             DidConnect:= False;
  481.             Break;
  482.           end;
  483.         finally
  484.           Con.Free;
  485.         end;
  486.       end;
  487.       DidConnect:= True;
  488.       DB.Connected:= True;
  489.     except
  490.       on e: exception do begin
  491.         DidConnect:= False;
  492.       end;
  493.     end;
  494.   end;
  495.  
  496.   if not DidConnect then begin
  497.     DoLoad:= False;
  498.     ShowMessage('Closing application for failure to connect to database.');
  499.     Close;
  500.   end else begin
  501.     Spl.PostStat('Identifying This Computer...', 40);
  502.     //Check Computer Validity
  503.     CurCompID:= CompOnKE;                               //Get computer ID from database
  504.     if CurCompID = -1 then begin                        //Check if ID is valid
  505.       DoLoad:= False;                                   //ID is not valid, computer is not registered
  506.       Q.SQL.Text:= 'Select * from LoginHist where id = 0'; //Record the failure in database
  507.       Q.Open;
  508.         Q.Append;
  509.           Q['UserID']:=     -1;
  510.           Q['LDT']:=        Now;
  511.           Q['Login']:=      '';
  512.           Q['Pass']:=       '';
  513.           Q['Result']:=     'Computer Not Registered';
  514.           Q['CompName']:=   GetCompName;
  515.           Q['CompIP']:=     GetIPAddress;
  516.           Q['CompID']:=     -1;
  517.         Q.Post;
  518.       Q.Close;
  519.       Close;
  520.     end;
  521.  
  522.     //Code from here to the end of create procedure needs to be
  523.     //moved elsewhere for after login
  524.  
  525.     oldOrd:= '';
  526.  
  527.     if DoLoad then begin
  528.       //DLocations:= TStringList.Create;
  529.       DComputers:= TStringList.Create;  //Create virtual computer list
  530.       Spl.PostStat('Loading System Variables...', 45);
  531.       RefreshVariables;       {
  532.       Spl.PostStat('Loading Computers...', 50);
  533.       LoadComputers;          }          //Load registered computers into DComputers
  534.       Spl.PostStat('Loading Filters...', 50);
  535.       RefreshLists;                     //Refreshes all necessary virtual lists
  536.       Spl.PostStat('Loading Options...', 60);
  537.       LoadOptions;
  538.       Spl.PostStat('Refreshing Tools...', 70);
  539.       RefreshTools;
  540.       Spl.PostStat('Refreshing Service Settings...', 80);
  541.       RefreshServiceSettings;
  542.       Spl.PostStat('Starting Program...', 90);
  543.  
  544.       if Panel4.Visible = True then       //Prepare available server panel
  545.         cmdAvailServ.Caption:= '<'
  546.       else
  547.         cmdAvailServ.Caption:= '>';
  548.  
  549.       if Panel1.Visible = True then       //Prepare available database panel
  550.         cmdAvailDB.Caption:= '<'
  551.       else
  552.         cmdAvailDB.Caption:= '>';
  553.  
  554.       //Refresh list of current page
  555.       case Pages.ActivePageIndex of
  556.         0: RefreshLocations;
  557.         1: RefreshComputers;
  558.         2: RefreshServers;
  559.         3: RefreshDatabases;
  560.         4: RefreshUsers;
  561.         5: RefreshAudit;
  562.  
  563.         8: RefreshUpdates;
  564.       end;
  565.     end;
  566.   end;
  567. end;
  568.  
  569. // Loads all registered computers into DComputers list with objComp objects
  570. procedure TfrmMain.LoadComputers;
  571. var
  572.   objComp: TComputer;
  573.   X: Integer;
  574. begin
  575.   for X:= 0 to DComputers.Count - 1 do
  576.     DComputers.Objects[X].Free;
  577.   DComputers.Clear;
  578.   QTemp.SQL.Text:= 'Select * from Computers';
  579.   QTemp.SQL.Append('where Deleted <> 1');
  580.   QTemp.Open;
  581.   QTemp.First;
  582.   while not QTemp.Eof do begin
  583.     objComp:= TComputer.Create;
  584.     objComp.ID:= QTemp['ID'];
  585.     objComp.CompName:= QTemp['CompName'];
  586.     objComp.Caption:= QTemp['Caption'];
  587.     objComp.Description:= QTemp['Description'];
  588.     objComp.LocationID:= QTemp['LocationID'];
  589.     objComp.IPAddress:= QTemp['IPAddress'];
  590.     objComp.Active:= QTemp['Active'];
  591.     DComputers.AddObject(objComp.CompName, objComp);
  592.     QTemp.Next;
  593.   end;
  594.   QTemp.Close;
  595. end;
  596.  
  597. procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
  598. var
  599.   X: Integer;
  600.   R: TRegistry;
  601. begin
  602.   if DoLoad then begin
  603.     SaveOptions;
  604.  
  605.     if DB.Connected then DB.Connected:= False;
  606.  
  607.     for X := 0 to DComputers.Count - 1 do
  608.       if assigned(DComputers.Objects[X]) then DComputers.Objects[X].Free;
  609.     DComputers.Free;
  610.  
  611.     for X:= 0 to cboDatabaseServer.Items.Count - 1 do
  612.       cboDatabaseServer.Items.Objects[X].Free;
  613.  
  614.     for X:= 0 to cboComputerLocation.Items.Count - 1 do
  615.       cboComputerLocation.Items.Objects[X].Free;
  616.  
  617.     for X:= 0 to cboServerLocation.Items.Count - 1 do
  618.       cboServerLocation.Items.Objects[X].Free;
  619.  
  620.     for X:= 0 to lstToolMenu.Items.Count - 1 do
  621.       lstToolMenu.Items.Objects[X].Free;
  622.  
  623.     R:= TRegistry.Create;
  624.     try
  625.       R.RootKey:= HKEY_LOCAL_MACHINE;
  626.       R.Access:= KEY_WRITE;
  627.       R.OpenKey('software\7Lands\Rugm\Local\Connection', True);
  628.         R.WriteString('Server', CurrentConnection.Server);
  629.         R.WriteString('Database', CurrentConnection.Database);
  630.         R.WriteString('Login', CurrentConnection.Login);
  631.         R.WriteString('Pass', CurrentConnection.Password);
  632.         R.WriteString('Provider', CurrentConnection.Provider);
  633.         R.WriteBool('Persist', CurrentConnection.PersistSecurityInfo);
  634.       R.CloseKey;
  635.     finally
  636.       R.Free;
  637.     end;
  638.   end;
  639.   if assigned(Self.Spl) then Self.Spl.Free;
  640. end;
  641.  
  642. procedure TfrmMain.RefreshDatabaseStatuses;
  643. var
  644.   X: Integer;
  645.   V: TValue;
  646. begin
  647.   //cboDBStatus
  648.   for X:= 0 to cboDBStatus.Items.Count - 1 do
  649.     cboDBStatus.Items.Objects[X].Free;
  650.   V:= TValue.Create;
  651.   V.ID:= -1;
  652.   V.Flt:= 2;
  653.   V.Caption:= 'All Status';
  654.   cboDBStatus.Items.AddObject(V.Caption, V);
  655.   QTemp.SQL.Text:= 'Select * from SYS where FLT = 2';
  656.   QTemp.SQL.Append('and deleted <> 1');
  657.   QTemp.Open;
  658.     QTemp.First;
  659.     While Not QTemp.Eof do begin
  660.       V:= TValue.Create;
  661.       V.ID:= QTemp.FieldByName('ID').AsInteger;
  662.       V.Flt:= QTemp.FieldByName('FLT').AsInteger;
  663.       V.Caption:= QTemp.FieldByName('Val').AsString;
  664.       cboDBStatus.Items.AddObject(V.Caption, V);
  665.       QTemp.Next;
  666.     end;
  667.   QTemp.Close;
  668.   cboDBStatus.ItemIndex:= 0;
  669. end;
  670.  
  671. procedure TfrmMain.RefreshDatabaseTypes;
  672. var
  673.   X, C: Integer;
  674.   V: TValue;
  675. begin
  676.   //If something's already selected, temporarily save what's selected to be re-selected
  677.   C:= -1;
  678.   if cboDBType.Items.Count > 0 then begin
  679.     V:= TValue(cboDBType.Items.Objects[cboDBType.ItemIndex]);
  680.     C:= V.ID;
  681.   end;
  682.   for X:= 0 to cboDBType.Items.Count - 1 do
  683.     cboDBType.items.Objects[X].Free;
  684.   V:= TValue.Create;
  685.   V.ID:= -1;
  686.   V.Flt:= 1;
  687.   V.Caption:= 'All Types';
  688.   cboDBType.Items.AddObject(V.Caption, V);
  689.   QTemp.SQL.Text:= 'Select * from SYS where FLT = 1';
  690.   QTemp.SQL.Append('and deleted <> 1');
  691.   QTemp.Open;
  692.     QTemp.First;
  693.     While Not QTemp.Eof do begin
  694.       V:= TValue.Create;
  695.       V.ID:= QTemp.FieldByName('ID').AsInteger;
  696.       V.Flt:= QTemp.FieldByName('FLT').AsInteger;
  697.       V.Caption:= QTemp.FieldByName('Val').AsString;
  698.       cboDBType.Items.AddObject(V.Caption, V);
  699.       QTemp.Next;
  700.     end;
  701.   QTemp.Close;
  702.   //If something was previously selected, re-select it
  703.   if C = -1 then
  704.     cboDBType.ItemIndex:= 0
  705.   else begin
  706.     for X := 0 to cboDBType.Items.Count - 1 do begin
  707.       V:= TValue(cboDBType.Items.Objects[X]);
  708.       if V.ID = C then cboDBType.ItemIndex:= X;
  709.     end;
  710.   end;
  711. end;
  712.  
  713. procedure TfrmMain.RefreshLists;
  714. var
  715.   X: Integer;
  716.   V: TValue;
  717. begin
  718.   RefreshComputerLocations;
  719.   RefreshServerLocations;
  720.   RefreshDatabaseServers;
  721.   RefreshDatabaseStatuses;
  722.   RefreshDatabaseTypes;
  723. end;
  724.  
  725. procedure TfrmMain.cboDatabaseServerClick(Sender: TObject);
  726. begin
  727.   if QDatabases.Active then QDatabases.Close;
  728.   RefreshDatabases;
  729. end;
  730.  
  731. procedure TfrmMain.cboComputerLocationClick(Sender: TObject);
  732. begin
  733.   RefreshComputers;
  734. end;
  735.  
  736. procedure TfrmMain.RefreshLocations;
  737. begin
  738.   QLocations.Close;
  739.   QLocations.SQL.Text:= 'select L.ID, L.Caption as Location, '+
  740.     'C.Caption as Server , L.Description, L.Address1, L.Address2,'+
  741.     'L.City, L.State, L.Zip, L.Active '+
  742.     'from Locations L '+
  743.     'left join Computers C on L.PrimaryServerID = C.ID '+
  744.     'where L.deleted <> 1';
  745.   if cboLocationOrder.ItemIndex > 0 then begin
  746.     QLocations.SQL.Text:= QLocations.SQL.Text + ' Order By ';
  747.     Case cboLocationOrder.ItemIndex of
  748.       1: begin    //Location
  749.         QLocations.SQL.Append('L.Caption');
  750.       end;
  751.       2: begin    //Server
  752.         QLocations.SQL.Append('C.Caption');
  753.       end;
  754.       3: begin    //Description
  755.         QLocations.SQL.Append('L.Description');
  756.       end;
  757.     end;
  758.     if optLocationZ.Checked then
  759.       QLocations.SQL.Append(' Desc');
  760.   End;
  761.   QLocations.Open;
  762.   lblLocTotal.Caption:= IntToStr(QLocations.RecordCount) + ' Location';
  763.   if QLocations.RecordCount <> 1 then
  764.     lblLocTotal.Caption:= lblLocTotal.Caption + 's';
  765. end;
  766.  
  767. procedure TfrmMain.RefreshComputers;
  768. var
  769.   objLocation: TLocation;
  770.   X: Integer;
  771.   IPS: TStringList;
  772.   SameIP, SameName: Bool;
  773. begin
  774.   objLocation:= TLocation(cboComputerLocation.Items.Objects
  775.     [cboComputerLocation.ItemIndex]);
  776.   QComputers.Close;
  777.   QComputers.SQL.Text:= 'select C.ID, C.CompName,C.Caption, '+
  778.     'L.Caption as Location, C.IPAddress as IP, C.Description, '+
  779.     'C.Active, C.RMPNum '+
  780.     ' from computers C '+
  781.   'left join Locations L on C.LocationID = L.ID where c.ID > -100';
  782.   QComputers.SQL.Append('and C.deleted <> 1');
  783.     QComputers.SQL.Text:= QComputers.SQL.Text;
  784.   if cboComputerLocation.ItemIndex > 0 then begin
  785.     QComputers.SQL.Text:= QComputers.SQL.Text +
  786.       ' and C.LocationID = '+ IntToStr(objLocation.ID);
  787.   end;
  788.   case cboCompStatus.ItemIndex of
  789.     1: begin
  790.       QComputers.SQL.Text:= QComputers.SQL.Text +
  791.         ' and c.Active = ''Y'' ';
  792.     end;
  793.     2: begin
  794.       QComputers.SQL.Text:= QComputers.SQL.Text +
  795.         ' and c.Active <> ''Y'' ';
  796.     end;
  797.   end;
  798.   case cboCompOrder.ItemIndex of
  799.     1: begin //Caption
  800.       QComputers.SQL.Text:= QComputers.SQL.Text +
  801.       ' order by C.Caption';
  802.     end;
  803.     2: begin //Location
  804.       QComputers.SQL.Text:= QComputers.SQL.Text +
  805.       ' order by L.Caption';
  806.     end;
  807.     3: begin //IP Address
  808.       QComputers.SQL.Text:= QComputers.SQL.Text +
  809.       ' order by C.IPAddress';
  810.     end;
  811.     4: begin //Description
  812.       QComputers.SQL.Text:= QComputers.SQL.Text +
  813.       ' order by C.Description';
  814.     end;
  815.     5: begin //Comp Name
  816.       QComputers.SQL.Text:= QComputers.SQL.Text +
  817.       ' order by C.CompName';
  818.     end;
  819.     6: begin //Status
  820.       QComputers.SQL.Text:= QComputers.SQL.Text +
  821.       ' order by C.Active';
  822.     end;
  823.   end;
  824.   if cboCompOrder.ItemIndex > 0 then begin
  825.     if optComputerZ.Checked then
  826.       QComputers.SQL.Text:= QComputers.SQL.Text + ' Desc';
  827.   end;
  828.   QComputers.Open;
  829.   lblCompTotal.Caption:= IntToStr(QComputers.RecordCount) + ' Computer';
  830.   if QComputers.RecordCount <> 1 then
  831.     lblCompTotal.Caption:= lblCompTotal.Caption + 's';
  832.  
  833.   IPS:= TStringList.Create;
  834.   QComputers.First;
  835.   SameIP:= False;
  836.   QTemp.SQL.Text:= 'Select ID, CompName, IPAddress as IP from Computers';
  837.   QTemp.SQL.Append('where deleted <> 1');
  838.   QTemp.Open;
  839.     QTemp.First;
  840.     While Not QTemp.Eof do begin
  841.       if (QTemp.FieldByName('IP').AsString <> '') and
  842.          (QTemp.FieldByName('IP').AsString <> Null) then
  843.       begin
  844.         IPS.Append(QTemp.FieldByName('IP').AsString);
  845.         for X:= 0 to IPS.Count - 2 do begin
  846.           if IPS[X] = QTemp.FieldByName('IP').AsString then
  847.             SameIP:= True;
  848.         end;
  849.       end;
  850.       QTemp.Next;
  851.     end;
  852.     QTemp.First;
  853.     for X:= 0 to IPS.Count - 1 do
  854.       IPS.Objects[X].Free;
  855.     IPS.Clear;
  856.     SameName:= False;
  857.     While Not QTemp.Eof do begin
  858.       if (QTemp.FieldByName('CompName').AsString <> '') and
  859.          (QTemp.FieldByName('CompName').AsString <> Null) then
  860.       begin
  861.         IPS.Append(QTemp.FieldByName('CompName').AsString);
  862.         for X:= 0 to IPS.Count - 2 do begin
  863.           if IPS[X] = QTemp.FieldByName('CompName').AsString then
  864.             SameName:= True;
  865.         end;
  866.       end;
  867.       QTemp.Next;
  868.     end;
  869.   QTemp.Close;
  870.  
  871.   if SameIP or SameName then begin
  872.     lblWarning.Caption:= 'Multiple Computers with Same ';
  873.     if SameName and SameIP then
  874.       lblWarning.Caption:= lblWarning.Caption + 'Computer Name and IP Address'
  875.     else if SameIP then
  876.       lblWarning.Caption:= lblWarning.Caption + 'IP Address'
  877.     else if SameName then
  878.       lblWarning.Caption:= lblWarning.Caption + 'Computer Name';
  879.     lblWarning.Caption:= lblWarning.Caption + '.';
  880.     lblWarning.Visible:= True;
  881.   end else begin
  882.     lblWarning.Visible:= False;
  883.   end;
  884. end;
  885.  
  886. procedure TfrmMain.RefreshServers;
  887. var
  888.   L: TLocation;
  889. begin
  890.   L:= TLocation(cboServerLocation.Items.Objects[cboServerLocation.ItemIndex]);
  891.   if QServers.Active then
  892.     QServers.Close;
  893.   QServers.SQL.Text:= 'select S.ID, S.Caption, S.SQLName, C.Caption as Computer,'+
  894.     ' L.Caption as Location, C.IPAddress, C.LocationID, S.Active, S.Description,'+
  895.     ' P.Val as Provider, S.Login, S.Pass, V.Val as Version from SQLServers S '+
  896.     'left Join Computers C on S.CompID = C.ID '+
  897.     'left Join Locations L on C.LocationID = L.ID '+
  898.     'left Join SYS V on S.VersionID = V.ID '+
  899.     'left Join SYS P on S.ProviderID = P.ID '+
  900.     ' where s.id > -100 and s.deleted <> 1 ';
  901.     if cboServerLocation.ItemIndex > 0 then
  902.       QServers.SQL.Text:= QServers.SQL.Text +
  903.         ' and C.LocationID = '+ IntToStr(L.ID);
  904.     if cboSQLServerStatus.ItemIndex > 0 then begin
  905.       if cboSQLServerStatus.ItemIndex = 1 then
  906.         QServers.SQL.Text:= QServers.SQL.Text +
  907.           ' and S.active = ''Y''';
  908.       if cboSQLServerStatus.ItemIndex = 2 then
  909.         QServers.SQL.Text:= QServers.SQL.Text +
  910.           ' and S.active <> ''Y''';
  911.     end;
  912.     if cboServerOrder.ItemIndex > 0 then begin
  913.       QServers.SQL.Text:= QServers.SQL.Text +
  914.         ' Order by ';
  915.       Case cboServerOrder.ItemIndex of
  916.         1: begin
  917.           QServers.SQL.Text:= QServers.SQL.Text + 'S.Caption';
  918.         end;
  919.         2: begin
  920.           QServers.SQL.Text:= QServers.SQL.Text + 'S.SQLName';
  921.         end;
  922.         3: begin
  923.           QServers.SQL.Text:= QServers.SQL.Text + 'C.Caption';
  924.         end;
  925.         4: begin
  926.           QServers.SQL.Text:= QServers.SQL.Text + 'L.Caption';
  927.         end;
  928.         5: begin
  929.           QServers.SQL.Text:= QServers.SQL.Text + 'C.IPAddress';
  930.         end;
  931.         6: begin
  932.           QServers.SQL.Text:= QServers.SQL.Text + 'S.Provider';
  933.         end;
  934.       end;
  935.       if optServerZ.Checked then
  936.         QServers.SQL.Text:= QServers.SQL.Text + ' Desc';
  937.     end;
  938.   QServers.Open;
  939.   lblServTotal.Caption:= IntToStr(QServers.RecordCount) + ' Server';
  940.   if QServers.RecordCount <> 1 then
  941.     lblServTotal.Caption:= lblServTotal.Caption + 's';
  942.   //GetServerList;
  943. end;
  944.  
  945. procedure TfrmMain.RefreshDatabases;
  946. var
  947.   objServer: TServer;
  948.   X: Integer;
  949.   TStr: String;
  950.   Stat: TValue;
  951.   DBType: TValue;
  952. begin
  953.   lblDBTotal.Caption:= '';
  954.   objServer:= TServer.Create;
  955.   tabDatabases.Enabled:= False;
  956.     Try
  957.       objServer:= TServer(cboDatabaseServer.Items.Objects[
  958.         cboDatabaseServer.ItemIndex]);
  959.       if DBMaster.Connected then DBMaster.Connected:= False;
  960.       if objServer.ID > -1 then begin
  961.         DBMaster.ConnectionString:= BuildConnectionString(
  962.           objServer.SQLName,
  963.           'Master',
  964.           objServer.Login, objServer.Pass, objServer.Provider, False);
  965.         DBMaster.Connected:= True;
  966.       end;
  967.         QDatabases.SQL.Text:= 'Select DBName from Databases where ServerID = '+
  968.           IntToStr(objServer.ID);
  969.         QDatabases.SQL.Append('and deleted <> 1');
  970.         QDatabases.Open;
  971.           QDatabases.First;
  972.           X:= 0;
  973.           TStr:= '''';
  974.           While Not QDatabases.Eof do begin
  975.             if X > 0 then
  976.               TStr:= TStr + ''', ''';
  977.             TStr:= TStr + QDatabases.FieldByName('DBName').AsString;
  978.             X:= X + 1;
  979.             QDatabases.Next;
  980.           end;
  981.         TStr:= TStr + '''';
  982.         QDatabases.Close;
  983.         if QSysDatabases.Active then QSYSDatabases.Close;
  984.         if objServer.ID > -1 then begin
  985.           //MessageDlg(TStr, mtWarning, [mbOK], 0);
  986.           QSYSDatabases.SQL.Text:= 'select Name from sysDatabases where name not in (''master'', ''tempdb'', ''model'', ''ReportServer'', ''ReportServerTempDB'', ''msdb'', ''Northwind'', ''Pubs'') and '+
  987.             'name not in ('+ TStr +') order by Name';
  988.           //MessageDlg(QSysDatabases.SQL.Text, mtWarning, [mbOK], 0);
  989.           QSYSDatabases.Open;
  990.           lblDBTotal.Caption:= IntToStr(QSYSDatabases.RecordCount) + ' Available Database';
  991.           if QSYSDatabases.RecordCount <> 1 then
  992.             lblDBTotal.Caption:= lblDBTotal.Caption + 's';
  993.         end;
  994.       //end;
  995.     except
  996.       on e: exception do begin
  997.         MessageDlg('Failed to connect to "'+
  998.           objServer.SQLName+'"'+#13+#13+
  999.             e.Message, mtWarning, [mbOK], 0);
  1000.       end;
  1001.     end;
  1002.   //QSYSDatabases.Open;
  1003.  
  1004.   QDatabases.Close;
  1005.     Stat:= TValue(cboDBStatus.Items.Objects[cboDBStatus.ItemIndex]);
  1006.     DBType:= TValue(cboDBType.Items.Objects[cboDBType.ItemIndex]);
  1007.     QDatabases.SQL.Text:= 'Select D.ID, S.SQLName, D.DBName, '+
  1008.     'D.Caption, Y.Val as Type, SY.Val as Status, D.Active, D.DBType, '+
  1009.     'Y.IsRMP as RMPro, SS.Val as InSwitch, D.Login, D.Pass '+
  1010.     'from Databases D '+
  1011.     ' Left Join SQLServers S on S.ID = D.ServerID '+
  1012.     ' Left Join SYS Y on Y.ID = D.DBType'+
  1013.     ' Left Join SYS SY on SY.ID = D.Active'+
  1014.     ' Left Join SYS SS on SS.ID = D.InSwitch';
  1015.     QDatabases.SQL.Append('Where d.deleted <> 1');
  1016.     if cboDatabaseServer.ItemIndex > 0 then
  1017.       QDatabases.SQL.Text:= QDatabases.SQL.Text +
  1018.         ' and ServerID = '+ IntToStr(objServer.ID)
  1019.     else
  1020.       QDatabases.SQL.Text:= QDatabases.SQL.Text +
  1021.         ' and ServerID > -1 ';
  1022.     if cboDBStatus.ItemIndex > 0 then
  1023.       QDatabases.SQL.Text:= QDatabases.SQL.Text +
  1024.         ' and D.active = '+ IntToStr(Stat.ID);
  1025.     if cboDBType.ItemIndex > 0 then
  1026.       QDatabases.SQL.Text:= QDatabases.SQL.Text +
  1027.         ' and D.DBType = '+ IntToStr(DBType.ID);
  1028.     if cboDBOrder.ItemIndex > 0 then begin
  1029.       QDatabases.SQL.Text:= QDatabases.SQL.Text + ' Order By ';
  1030.       Case cboDBOrder.ItemIndex of
  1031.         1: begin
  1032.           QDatabases.SQL.Text:= QDatabases.SQL.Text + 'D.Caption';
  1033.         end;
  1034.         2: begin
  1035.           QDatabases.SQL.Text:= QDatabases.SQL.Text + 'S.SQLName';
  1036.         end;
  1037.         3: begin
  1038.           QDatabases.SQL.Text:= QDatabases.SQL.Text + 'D.DBName';
  1039.         end;
  1040.         4: begin
  1041.           QDatabases.SQL.Text:= QDatabases.SQL.Text + 'Y.Val';
  1042.         end;
  1043.         5: begin
  1044.           QDatabases.SQL.Text:= QDatabases.SQL.Text + 'SY.Val';
  1045.         end;
  1046.       end;
  1047.       if optDBZ.Checked then
  1048.         QDatabases.SQL.Text:= QDatabases.SQL.Text + ' Desc';
  1049.     end;
  1050.   QDatabases.Open;
  1051.   lblRegDBTotal.Caption:= IntToStr(QDatabases.RecordCount) + ' Registered Databases';
  1052.   tabDatabases.Enabled:= True;
  1053. end;
  1054.  
  1055. procedure TfrmMain.RefreshUsers;
  1056. begin
  1057.   if QUsers.Active then QUsers.Close;
  1058.   QUsers.SQL.Text:= 'Select * from users where deleted <> 1';
  1059.   if cboUserOrder.ItemIndex > 0 then begin
  1060.     QUsers.SQL.Append('Order By ');
  1061.     case cboUserOrder.ItemIndex of
  1062.       1: begin  //First Name
  1063.         QUsers.SQL.Append('FName');
  1064.       end;
  1065.       2: begin  //Middle Name
  1066.         QUsers.SQL.Append('MName');
  1067.       end;
  1068.       3: begin  //Last Name
  1069.         QUsers.SQL.Append('LName');
  1070.       end;
  1071.       4: begin  //Login Name
  1072.         QUsers.SQL.Append('Login');
  1073.       end;
  1074.       5: begin  //Active
  1075.         QUsers.SQL.Append('Active');
  1076.       end;
  1077.     end;
  1078.   end;
  1079.  
  1080.   QUsers.Open;
  1081.   lblUserTotal.Caption:= IntToStr(QUsers.RecordCount) + ' User';
  1082.   if QUsers.RecordCount <> 1 then
  1083.     lblUserTotal.Caption:= lblUserTotal.Caption + 's';
  1084. end;
  1085.  
  1086.  
  1087. procedure TfrmMain.DBGrid2DblClick(Sender: TObject);
  1088. begin
  1089.   if GetPriv(CurrentUser, pvComputers) = 1 then
  1090.     cmdEditComputerClick(self);
  1091. end;
  1092.  
  1093. procedure TfrmMain.cmdEditLocationClick(Sender: TObject);
  1094. begin
  1095.   if not QLocations.IsEmpty then begin
  1096.     frmLocation.EditState:= 'Edit';
  1097.     frmLocation.EditLoc:= QLocations.FieldByName('ID').AsInteger;
  1098.     frmLocation.ShowModal;
  1099.     RefreshLocations;
  1100.     RefreshComputerLocations;
  1101.     RefreshServerLocations;
  1102.   end;
  1103. end;
  1104.  
  1105. procedure TfrmMain.cmdNewLocationClick(Sender: TObject);
  1106. begin
  1107.   frmLocation.EditState:= 'New';
  1108.   frmLocation.ShowModal;
  1109.   RefreshLocations;
  1110.   RefreshComputerLocations;
  1111.   RefreshServerLocations;  
  1112. end;
  1113.  
  1114. procedure TfrmMain.DBGrid1DblClick(Sender: TObject);
  1115. begin
  1116.   if GetPriv(CurrentUser, pvLocations) = 1 then
  1117.     cmdEditLocationClick(self);
  1118. end;
  1119.  
  1120. procedure TfrmMain.DBGrid2TitleClick(Column: TColumn);
  1121. var ord, desc: string;
  1122. begin
  1123.   ord:= Column.FieldName;
  1124.   if oldOrd <> ord then desc:= ''
  1125.   else desc:= ' desc';
  1126.   //q  + ord +
  1127.   //id dbGrid2.Tag <  -1 then
  1128. end;
  1129.  
  1130. procedure TfrmMain.DBGrid4DblClick(Sender: TObject);
  1131. begin
  1132.   if GetPriv(CurrentUser, pvDatabases) = 1 then
  1133.     cmdAddDBClick(Self);
  1134. end;
  1135.  
  1136. procedure TfrmMain.cmdAddDBClick(Sender: TObject);
  1137. var
  1138.   S: TServer;
  1139. begin
  1140.   if QSysDatabases.Active then begin    
  1141.     if not QSysDatabases.IsEmpty then begin
  1142.       //Add SYS Database to Local List
  1143.       frmDatabase.EditState:= 'New';
  1144.       S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
  1145.         frmDatabase.ServerID:= S.ID;
  1146.       frmDatabase.DBName:= QSysDatabases.FieldByName('Name').AsString;
  1147.       frmDatabase.DBID:= -1;
  1148.       frmDatabase.CallState:= 'Pre';
  1149.       frmDatabase.ShowModal;
  1150.       frmMain.RefreshDatabases;
  1151.     end;
  1152.   end;
  1153. end;
  1154.  
  1155. procedure TfrmMain.cmdAddVariableClick(Sender: TObject);
  1156. var
  1157.   Q: TADOQuery;
  1158. begin
  1159.   //Enable adding new system variable
  1160.   if cmdAddVariable.Caption = 'Add' then begin
  1161.     cmdAddVariable.Caption:= 'Save';
  1162.     cmdEditVariable.Caption:= 'Cancel';
  1163.     lstVariables.Enabled:= False;
  1164.     cmdEditVariable.Enabled:= True;
  1165.     cmdAddVariable.Enabled:= True;
  1166.     cmdDeleteVariable.Enabled:= False;
  1167.     txtVariableName.Enabled:= True;
  1168.     txtVariableValue.Enabled:= True;
  1169.     txtVariableName.Clear;
  1170.     txtVariableValue.Clear;
  1171.   end else if cmdAddVariable.Caption = 'Save' then begin
  1172.     try
  1173.       if txtVariableName.Text <> '' then begin
  1174.         if txtVariableValue.Text <> '' then begin
  1175.           if Pos(' ', txtVariableName.Text) = 0 then begin
  1176.             if LeftStr(txtVariableName.Text, 1) <> '%' then
  1177.               txtVariableName.Text:= '%' + txtVariableName.Text;
  1178.             if RightStr(txtVariableName.Text, 1) <> '%' then
  1179.               txtVariableName.Text:= txtVariableName.Text + '%';
  1180.  
  1181.             Q:= TADOQuery.Create(nil);
  1182.             try
  1183.               Q.Connection:= frmMain.DB;
  1184.               Q.SQL.Text:= 'select * from variables where name = '''+txtVariableName.Text+'''';
  1185.               Q.Open;
  1186.                 if Q.IsEmpty then begin
  1187.                   Q.Append;
  1188.                   VariableEditState:= 'New';
  1189.                 end else begin
  1190.                   Q.Edit;
  1191.                   VariableEditState:= 'Edit';
  1192.                 end;
  1193.                   Q['Name']:= txtVariableName.Text;
  1194.                   Q['Value']:= txtVariableValue.Text;
  1195.                   Q['System']:= 0;
  1196.                   Q['Category']:= 0;
  1197.                 Q.Post;
  1198.                 txtVariableName.Enabled:= False;
  1199.                 txtVariableValue.Enabled:= False;
  1200.                 cmdAddVariable.Caption:= 'Add';
  1201.                 cmdEditVariable.Caption:= 'Edit';
  1202.                 cmdEditVariable.Enabled:= False;
  1203.                 lstVariables.Enabled:= True;
  1204.               Q.Close;
  1205.               RefreshVariables;
  1206.             finally
  1207.               if Q.Active then Q.Close;
  1208.               Q.Free;
  1209.             end;
  1210.           end else begin
  1211.             raise Exception.Create('Variable cannot contain spaces');
  1212.           end;
  1213.         end else begin
  1214.           raise Exception.Create('Variable must have a value.');
  1215.         end;
  1216.       end else begin
  1217.         raise Exception.Create('Variable must have a name.');
  1218.       end;
  1219.     except
  1220.       on e: exception do begin
  1221.         ShowMessage('Cannot save variable because of the following reason(s):'+#10+#10+E.Message);
  1222.       end;
  1223.     end;
  1224.   end;
  1225. end;
  1226.  
  1227. procedure TfrmMain.DBGrid6DblClick(Sender: TObject);
  1228. var
  1229.   S: TServer;
  1230. begin
  1231.   if GetPriv(CurrentUser, pvDatabases) = 1 then begin
  1232.     frmDatabase.EditState:= 'Edit';
  1233.     frmDatabase.DBID:= QDatabases.FieldByName('ID').AsInteger;
  1234.     S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
  1235.       frmDatabase.ServerID:= S.ID;
  1236.     frmDatabase.CallState:= 'Made';
  1237.     NewDBType:= False;
  1238.     frmDatabase.ShowModal;
  1239.     if NewDBType then begin
  1240.       Self.RefreshDatabaseTypes;
  1241.     end;
  1242.     RefreshDatabases;
  1243.   end;
  1244. end;
  1245.  
  1246. procedure TfrmMain.cboLocationOrderClick(Sender: TObject);
  1247. begin
  1248.   RefreshLocations;
  1249. end;
  1250.  
  1251. procedure TfrmMain.cboServerOrderClick(Sender: TObject);
  1252. begin
  1253.   RefreshServers;
  1254. end;
  1255.  
  1256. procedure TfrmMain.SaveOptions;
  1257. var
  1258.   CompLoc: TLocation;
  1259.   ServLoc: TLocation;
  1260.   DBServ: TServer;
  1261.   DBType: TValue;
  1262.   R: TRegistry;
  1263. begin
  1264.   try
  1265.     R:= TRegistry.Create;
  1266.     R.RootKey:= HKEY_LOCAL_MACHINE;
  1267.     R.Access:= KEY_WRITE;
  1268.     R.OpenKey('software\7Lands\Rugm\Local\Display', True);
  1269.     try
  1270.       R.WriteInteger('LocationsOrder', cboLocationOrder.ItemIndex);
  1271.       if optLocationZ.Checked then
  1272.         R.WriteString('LocationsAD', 'D')
  1273.       else
  1274.         R.WriteString('LocationsAD', 'A');
  1275.  
  1276.       CompLoc:= TLocation(cboComputerLocation.Items.Objects[
  1277.         cboComputerLocation.ItemIndex]);
  1278.       R.WriteInteger('ComputersOrder', cboCompOrder.ItemIndex);
  1279.       R.WriteInteger('ComputersLocation', CompLoc.ID);
  1280.       R.WriteInteger('ComputersStatus', cboCompStatus.ItemIndex);
  1281.       if optComputerZ.Checked then
  1282.         R.WriteString('ComputersAD', 'D')
  1283.       else
  1284.         R.WriteString('ComputersAD', 'A');
  1285.  
  1286.       ServLoc:= TLocation(cboServerLocation.Items.Objects[
  1287.         cboServerLocation.ItemIndex]);
  1288.       R.WriteInteger('ServersOrder', cboServerOrder.ItemIndex);
  1289.       R.WriteInteger('ServersLocation', ServLoc.ID);
  1290.       R.WriteInteger('ServersActive', cboSQLServerStatus.ItemIndex);
  1291.       if optServerZ.Checked then
  1292.         R.WriteString('ServersAD', 'D')
  1293.       else
  1294.         R.WriteString('ServersAD', 'A');
  1295.       R.WriteInteger('ServersAvailWidth', Panel4.Width);
  1296.       if Panel4.Visible = True then
  1297.         R.WriteString('ServersAvailVis', 'Y')
  1298.       else
  1299.         R.WriteString('ServersAvailVis', 'N');
  1300.  
  1301.       DBServ:= TServer(cboDatabaseServer.Items.Objects[
  1302.         cboDatabaseServer.ItemIndex]);
  1303.       DBType:= TValue(cboDBType.Items.Objects[cboDBType.ItemIndex]);
  1304.       R.WriteInteger('DatabasesOrder', cboDBOrder.ItemIndex);
  1305.       R.WriteInteger('DatabasesServer', DBServ.ID);
  1306.       R.WriteInteger('DatabasesStatus', cboDBStatus.ItemIndex);
  1307.       R.WriteInteger('DatabasesType', DBType.ID);
  1308.       if optDBZ.Checked then
  1309.         R.WriteString('DatabasesAD', 'D')
  1310.       else
  1311.         R.WriteString('DatabasesAD', 'A');
  1312.       R.WriteInteger('DatabasesAvailWidth', Panel1.Width);
  1313.       if Panel1.Visible = True then
  1314.         R.WriteString('DatabasesAvailVis', 'Y')
  1315.       else
  1316.         R.WriteString('DatabasesAvailVis', 'N');
  1317.  
  1318.       R.WriteInteger('UsersOrder', cboUserOrder.ItemIndex);
  1319.       if optUserZ.Checked then
  1320.         R.WriteString('UsersAD', 'D')
  1321.       else
  1322.         R.WriteString('UsersAD', 'A');
  1323.  
  1324.       R.WriteInteger('WindowWidth', frmMain.Width);
  1325.       R.WriteInteger('WindowHeight', frmMain.Height);
  1326.       R.WriteInteger('WindowTop', frmMain.Top);
  1327.       R.WriteInteger('WindowLeft', frmMain.Left);
  1328.       R.WriteInteger('WindowTab', Pages.TabIndex);
  1329.     finally
  1330.       R.CloseKey;
  1331.       R.Free;
  1332.     end;
  1333.   except
  1334.     on e: exception do begin
  1335.  
  1336.     end;
  1337.   end;
  1338. end;
  1339.  
  1340. procedure TfrmMain.LoadOptions;
  1341. var
  1342.   R: TRegistry;
  1343.   CompLoc: TLocation;
  1344.   ServLoc: TLocation;
  1345.   DBType: TValue;
  1346.   X: Integer;
  1347.   DoLoad: Boolean;
  1348. begin
  1349.   R:= TRegistry.Create;
  1350.   try
  1351.     R.RootKey:= HKEY_LOCAL_MACHINE;
  1352.     DoLoad:= True;
  1353.     R.Access:= KEY_READ;
  1354.     if Not R.KeyExists('software\7Lands\Rugm\Local\Display') then begin
  1355.       DoLoad:= False;
  1356.       //Set Default Values
  1357.       frmMain.Width:= 750;
  1358.       frmMain.Height:= 550;
  1359.       frmMain.Left:= Round((screen.Width / 2) - (frmMain.Width / 2));
  1360.       frmMain.Top:= Round((screen.Height / 2) - (frmMain.Height / 2));
  1361.       Pages.ActivePage:= tabLocations;
  1362.       //tabLocations.Show;
  1363.       cboLocationOrder.ItemIndex:= 1;
  1364.       optLocationA.Checked:= True;
  1365.       cboComputerLocation.ItemIndex:= 0;
  1366.       cboCompStatus.ItemIndex:= 0;
  1367.       cboCompOrder.ItemIndex:= 1;
  1368.       optComputerA.Checked:= True;
  1369.       cboServerLocation.ItemIndex:= 0;
  1370.       cboSQLServerStatus.ItemIndex:= 0;
  1371.       cboServerOrder.ItemIndex:= 1;
  1372.       optServerA.Checked:= True;
  1373.       cboDatabaseServer.ItemIndex:= 0;
  1374.       cboDBStatus.ItemIndex:= 0;
  1375.       cboDBType.ItemIndex:= 0;
  1376.       cboDBOrder.ItemIndex:= 1;
  1377.       optDBA.Checked:= True;
  1378.       cboUserOrder.ItemIndex:= 1;
  1379.       optUserA.Checked:= True;
  1380.     end;
  1381.   except
  1382.     on e: exception do begin end;
  1383.   end;
  1384.   R.Free;
  1385.   if DoLoad = True then begin
  1386.     try
  1387.       R:= TRegistry.Create;
  1388.       R.RootKey:= HKEY_LOCAL_MACHINE;
  1389.       R.Access:= KEY_READ;
  1390.       R.OpenKey('software\7Lands\Rugm\Local\Display', True);
  1391.       try
  1392.         cboLocationOrder.ItemIndex:= R.ReadInteger('LocationsOrder');
  1393.         if R.ReadString('LocationsAD') = 'A' then
  1394.           optLocationA.Checked:= True
  1395.         else
  1396.           optLocationZ.Checked:= True;
  1397.         //RefreshLocations;
  1398.  
  1399.         for X:= 0 to cboComputerLocation.Items.Count - 1 do begin
  1400.           CompLoc:= TLocation(cboComputerLocation.Items.Objects[X]);
  1401.           if CompLoc.ID = R.ReadInteger('ComputersLocation') then
  1402.             cboComputerLocation.ItemIndex:= X;
  1403.         end;
  1404.         if cboComputerLocation.ItemIndex < 0 then
  1405.           cboComputerLocation.ItemIndex:= 0;
  1406.         cboCompOrder.ItemIndex:= R.ReadInteger('ComputersOrder');
  1407.         cboCompStatus.ItemIndex:= R.ReadInteger('ComputersStatus');
  1408.         if R.ReadString('ComputersAD') = 'A' then
  1409.           optComputerA.Checked:= True
  1410.         else
  1411.           optComputerZ.Checked:= True;
  1412.         //RefreshComputers;
  1413.  
  1414.         for X:= 0 to cboServerLocation.Items.Count - 1 do begin
  1415.           ServLoc:= TLocation(cboServerLocation.Items.Objects[X]);
  1416.           if ServLoc.ID = R.ReadInteger('ServersLocation') then
  1417.             cboServerLocation.ItemIndex:= X;
  1418.         end;
  1419.         if cboServerLocation.ItemIndex < 0 then
  1420.           cboServerLocation.ItemIndex:= 0;
  1421.         cboServerOrder.ItemIndex:= R.ReadInteger('ServersOrder');
  1422.         cboSQLServerStatus.ItemIndex:= R.ReadInteger('ServersActive');
  1423.         if R.ReadString('ServersAD') = 'A' then
  1424.           optServerA.Checked:= True
  1425.         else
  1426.           optServerZ.Checked:= True;
  1427.  
  1428.  
  1429.         Panel4.Width:= R.ReadInteger('ServersAvailWidth');
  1430.         if R.ReadString('ServersAvailVis') = 'N' then
  1431.           Panel4.Visible:= False
  1432.         else
  1433.           Panel4.Visible:= True;
  1434.         //RefreshServers;
  1435.  
  1436.         {
  1437.         for X:= 0 to cboDatabaseServer.Items.Count - 1 do begin
  1438.           DBServ:= TServer(cboDatabaseServer.Items.Objects[X]);
  1439.           if DBServ.ID = R.ReadInteger('DatabasesServer') then
  1440.             cboDatabaseServer.ItemIndex:= X;
  1441.         end;
  1442.         if cboDatabaseServer.ItemIndex < 0 then   }
  1443.           cboDatabaseServer.ItemIndex:= 0;
  1444.         for X:= 0 to cboDBType.Items.Count - 1 do begin
  1445.           DBType:= TValue(cboDBType.Items.Objects[X]);
  1446.           if DBType.ID = R.ReadInteger('DatabasesType') then
  1447.             cboDBType.ItemIndex:= X;
  1448.         end;
  1449.         if cboDBType.ItemIndex < 0 then
  1450.           cboDBType.ItemIndex:= 0;
  1451.         cboDBOrder.ItemIndex:= R.ReadInteger('DatabasesOrder');
  1452.         cboDBStatus.ItemIndex:= R.ReadInteger('DatabasesStatus');
  1453.         if R.ReadString('DatabasesAD') = 'A' then
  1454.           optDBA.Checked:= True
  1455.         else
  1456.           optDBZ.Checked:= True;
  1457.         Panel1.Width:= R.ReadInteger('DatabasesAvailWidth');
  1458.         if R.ReadString('DatabasesAvailVis') = 'N' then
  1459.           Panel1.Visible:= False
  1460.         else
  1461.           Panel1.Visible:= True;
  1462.         //RefreshDatabases;
  1463.  
  1464.         cboUserOrder.ItemIndex:= R.ReadInteger('UsersOrder');
  1465.         if R.ReadString('UsersAD') = 'A' then
  1466.           optUserA.Checked:= True
  1467.         else
  1468.           optUserZ.Checked:= True;
  1469.  
  1470.         frmMain.Width:= R.ReadInteger('WindowWidth');
  1471.         frmMain.Height:= R.ReadInteger('WindowHeight');
  1472.         frmMain.Top:= R.ReadInteger('WindowTop');
  1473.         frmMain.Left:= R.ReadInteger('WindowLeft');
  1474.         Pages.TabIndex:= R.ReadInteger('WindowTab');
  1475.       finally
  1476.         R.CloseKey;
  1477.         R.Free;
  1478.       end;
  1479.     except
  1480.       on e: exception do begin
  1481.  
  1482.       end;
  1483.     end;
  1484.   end;
  1485. end;
  1486.  
  1487. procedure TfrmMain.cmdDeleteComputerClick(Sender: TObject);
  1488. var
  1489.   IsUsed: Bool;
  1490.   TID: Integer;
  1491. begin
  1492.   IsUsed:= False;
  1493.   QTemp.SQL.Text:= 'Select * from SQLServers where CompID = '+
  1494.     IntToStr(QComputers.FieldByName('ID').AsInteger);
  1495.   QTemp.SQL.Append('and deleted <> 1');
  1496.   QTemp.Open;
  1497.     if not QTemp.IsEmpty then IsUsed:= True;
  1498.   QTemp.Close;
  1499.   QTemp.SQL.Text:= 'Select * from Users where PrimaryComp = '+
  1500.     IntToStr(QComputers.FieldByName('ID').AsInteger);
  1501.   QTemp.SQL.Append('and deleted <> 1');
  1502.   QTemp.Open;
  1503.     if not QTemp.IsEmpty then IsUsed:= True;
  1504.   QTemp.Close;
  1505.   if IsUsed then
  1506.     MessageDlg('Cannot delete computer because it is being used.',
  1507.       mtError, [mbOK], 0)
  1508.   else begin
  1509.     if MessageDlg('Are you sure you wish to delete computer "'+
  1510.       QComputers.FieldByName('CompName').AsString +
  1511.       '"?', mtWarning, [mbYes, mbNo], 0) = mrYes then
  1512.     begin
  1513.       TID:= QComputers.FieldByName('ID').AsInteger;
  1514.       SaveAudit('Computers', TID, 'D');
  1515.       QTemp.SQL.Text:= 'update Computers set Deleted = 1 where ID = '+
  1516.         QComputers.FieldByName('ID').AsString;
  1517.       QTemp.ExecSQL;
  1518.       QTemp.Close;
  1519.       RefreshComputers;
  1520.     end;
  1521.   end;
  1522. end;
  1523.  
  1524. procedure TfrmMain.cboDBStatusClick(Sender: TObject);
  1525. begin
  1526.   RefreshDatabases;
  1527. end;
  1528.  
  1529. procedure TfrmMain.cmdNewDBClick(Sender: TObject);
  1530. var
  1531.   S: TServer;
  1532. begin
  1533.   frmDatabase.EditState:= 'New';
  1534.   S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
  1535.     frmDatabase.ServerID:= S.ID;
  1536.   frmDatabase.CallState:= 'New';
  1537.   frmDatabase.ShowModal;
  1538.   RefreshDatabases;
  1539. end;
  1540.  
  1541. procedure TfrmMain.cmdDeleteDBClick(Sender: TObject);
  1542. begin
  1543.   if MessageDlg('Are you sure you wish to unregister database "'+
  1544.     QDatabases.FieldByName('Caption').AsString +
  1545.       '"?', mtWarning, [mbYes, mbNo], 0) =
  1546.         mrYes then
  1547.   begin
  1548.     QTemp.SQL.Text:= 'update Databases set deleted = 1 where id = '+
  1549.       IntToStr(QDatabases.FieldByName('ID').AsInteger);
  1550.     QTemp.ExecSQL;
  1551.     QTemp.Close;
  1552.     RefreshDatabases;
  1553.   end;
  1554. end;
  1555.  
  1556. procedure TfrmMain.cmdDeleteServerClick(Sender: TObject);
  1557. var
  1558.   IsUsed: Bool;
  1559. begin
  1560.   QTemp.SQL.Text:= 'Select * from databases where serverid = '+
  1561.     IntToStr(QServers.FieldByName('ID').AsInteger);
  1562.   QTemp.SQL.Append('and deleted <> 1');
  1563.   QTemp.Open;
  1564.     if QTemp.IsEmpty then IsUsed:= False else IsUsed:= True;
  1565.   QTemp.Close;
  1566.   if not IsUsed then begin
  1567.     if MessageDlg('Are you sure you wish to remove SQL Server "'+
  1568.       QServers.FieldByName('Caption').AsString +
  1569.         '"?', mtWarning, [mbYes, mbNo], 0) =
  1570.           mrYes then
  1571.     begin
  1572.       QTemp.SQL.Text:= 'update SQLServers set deleted = 1 where id = '+
  1573.         IntToStr(QServers.FieldByName('ID').AsInteger);
  1574.       QTemp.ExecSQL;
  1575.       QTemp.Close;
  1576.       RefreshServers;
  1577.       RefreshDatabaseServers;
  1578.     end;
  1579.   end else begin
  1580.     ShowMessage('Cannot delete server because it is being used.');
  1581.   end;
  1582. end;
  1583.  
  1584. procedure TfrmMain.cmdNewServerClick(Sender: TObject);
  1585. begin
  1586.   frmServer.EditState:= 'New';
  1587.   frmServer.ShowModal;
  1588.   RefreshServers;
  1589.   RefreshDatabaseServers;
  1590. end;
  1591.  
  1592. procedure TfrmMain.cmdEditServerClick(Sender: TObject);
  1593. begin
  1594.   if GetPriv(CurrentUser, pvSQLServers) = 1 then begin
  1595.     frmServer.EditState:= 'Edit';
  1596.     frmServer.ServerID:= QServers.FieldByName('ID').AsInteger;
  1597.     frmServer.ShowModal;
  1598.     RefreshServers;
  1599.     RefreshDatabaseServers;
  1600.   end;
  1601. end;
  1602.  
  1603. procedure TfrmMain.cboCompStatusChange(Sender: TObject);
  1604. begin
  1605.   RefreshComputers;
  1606. end;
  1607.  
  1608. procedure TfrmMain.cboSQLServerStatusClick(Sender: TObject);
  1609. begin
  1610.   RefreshServers;
  1611. end;
  1612.  
  1613. procedure TfrmMain.cmdNewUpdateClick(Sender: TObject);
  1614. var
  1615.   Q: TADOQuery;
  1616. begin
  1617.   EditUpdate:= 0;
  1618.   EditUpdateState:= 'New';
  1619.   chkUpdateActive.Checked:= False;
  1620.   dtUpdateReleaseDate.DateTime:= Now;
  1621.   lblUpdateID.Caption:= 'New';
  1622.   lstUpdateFiles.RowCount:= 2;
  1623.   lstUpdateFiles.Rows[1].Clear;
  1624.   ClearUpdateFile;
  1625.   Q:= TADOQuery.Create(nil);
  1626.   try
  1627.     Q.Connection:= Self.DB;
  1628.     Q.SQL.Text:= 'select * from updates where id = 0';
  1629.     Q.Open;
  1630.     Q.Append;
  1631.       Q['ReleaseDT']:= dtUpdateReleaseDate.DateTime;
  1632.       if chkUpdateActive.Checked then
  1633.         Q['Active']:= 1
  1634.       else
  1635.         Q['Active']:= 0;
  1636.       Q['UserID']:= Self.CurrentUser;
  1637.       Q['Priority']:= StrToIntDef(txtUpdatePriority.Text, 1);
  1638.       Q['UseFTP']:= 0;
  1639.     Q.Post;
  1640.     EditUpdate:= Q.FieldByName('ID').AsInteger;
  1641.   finally
  1642.     Q.Free;
  1643.   end;
  1644.  
  1645.  
  1646.   EnableUpdateEdit;
  1647.   cmdCancelUpdate.Enabled:= False;
  1648. end;
  1649.  
  1650. procedure TfrmMain.cmdNewUpdateFileClick(Sender: TObject);
  1651. begin
  1652.   EditUpdateFile:= 0;
  1653.   EditUpdateFileState:= 'New';
  1654.   ClearUpdateFile;
  1655.   EnableUpdateFileEdit;
  1656. end;
  1657.  
  1658. procedure TfrmMain.cmdNewUserClick(Sender: TObject);
  1659. begin
  1660.   frmUser.EditState:= 'New';
  1661.   frmUser.ShowModal;
  1662.   RefreshUsers;
  1663. end;
  1664.  
  1665. procedure TfrmMain.cmdEditUpdateClick(Sender: TObject);
  1666. begin
  1667.   EditUpdate:= StrToIntDef(lstUpdates.Cells[0,lstUpdates.Row],0);
  1668.   if EditUpdate > 0 then begin
  1669.     EnableUpdateEdit;
  1670.     EditUpdateState:= 'Edit';
  1671.   end;
  1672. end;
  1673.  
  1674. procedure TfrmMain.cmdEditUpdateFileClick(Sender: TObject);
  1675. begin
  1676.   EditUpdateFile:= StrToIntDef(lstUpdateFiles.Cells[0,lstUpdateFiles.Row],0);
  1677.   if EditUpdateFile > 0 then begin
  1678.     EnableUpdateFileEdit;
  1679.     EditUpdateFileState:= 'Edit';
  1680.   end;
  1681. end;
  1682.  
  1683. procedure TfrmMain.cmdEditUserClick(Sender: TObject);
  1684. begin
  1685.   if GetPriv(CurrentUser, pvUsers) = 1 then begin
  1686.     frmUser.EditState:= 'Edit';
  1687.     frmUser.CurUser:= QUsers.FieldByName('ID').AsInteger;
  1688.     frmUser.ShowModal;
  1689.     RefreshUsers;
  1690.   end;
  1691. end;
  1692.  
  1693. procedure TfrmMain.cmdEditVariableClick(Sender: TObject);
  1694. begin
  1695.   if cmdEditVariable.Caption = 'Edit' then begin
  1696.     if lstVariables.ItemIndex >= 0 then begin
  1697.       txtVariableName.Enabled:= True;
  1698.       txtVariableValue.Enabled:= True;
  1699.       lstVariables.Enabled:= False;
  1700.       cmdAddVariable.Caption:= 'Save';
  1701.       cmdEditVariable.Caption:= 'Cancel';
  1702.       cmdEditVariable.Enabled:= True;
  1703.       cmdDeleteVariable.Enabled:= False;
  1704.       VariableEditState:= 'Edit';
  1705.     end;
  1706.   end else if cmdEditVariable.Caption = 'Cancel' then begin
  1707.     lstVariables.Enabled:= True;
  1708.     txtVariableName.Enabled:= False;
  1709.     txtVariableValue.Enabled:= False;
  1710.     cmdAddVariable.Caption:= 'Add';
  1711.     cmdEditVariable.Caption:= 'Edit';
  1712.     cmdEditVariable.Enabled:= False;
  1713.     RefreshVariables;
  1714.   end;
  1715. end;
  1716.  
  1717. procedure TfrmMain.cboCompStatusClick(Sender: TObject);
  1718. begin
  1719.   RefreshComputers;
  1720. end;
  1721.  
  1722. procedure TfrmMain.cmdRefreshLocationsClick(Sender: TObject);
  1723. begin
  1724.   RefreshLocations;
  1725. end;
  1726.  
  1727. procedure TfrmMain.cmdRefreshComputersClick(Sender: TObject);
  1728. begin
  1729.   RefreshComputers;
  1730. end;
  1731.  
  1732. procedure TfrmMain.cmdRefreshServersClick(Sender: TObject);
  1733. begin
  1734.   RefreshServers;
  1735. end;
  1736.  
  1737. procedure TfrmMain.cmdRefreshServiceLogClick(Sender: TObject);
  1738. begin
  1739.   if MessageDlg('This process may be extremely long. Continue?', mtWarning, [mbYes, mbNo], 0) = mrYes then
  1740.     Self.RefreshServiceLog;
  1741. end;
  1742.  
  1743. procedure TfrmMain.cmdRefreshDatabasesClick(Sender: TObject);
  1744. begin
  1745.   RefreshDatabases;
  1746. end;
  1747.  
  1748. procedure TfrmMain.cmdRefreshUsersClick(Sender: TObject);
  1749. begin
  1750.   RefreshUsers;
  1751. end;
  1752.  
  1753. procedure TfrmMain.cmdSaveUpdateClick(Sender: TObject);
  1754. var
  1755.   Q: TADOQuery;
  1756. begin
  1757.   try
  1758.     //Check Validity
  1759.     if StrToIntDef(txtUpdatePriority.Text, -1) < 0 then
  1760.       txtUpdatePriority.Text:= '1';
  1761.  
  1762.     Q:= TADOQuery.Create(nil);
  1763.     try
  1764.       Q.Connection:= Self.DB;
  1765.       Q.SQL.Text:= 'select * from updates where id = '+IntToStr(EditUpdate);
  1766.       Q.Open;
  1767.         if Q.IsEmpty then Q.Append else Q.Edit;
  1768.           Q['ReleaseDT']:= dtUpdateReleaseDate.DateTime;
  1769.           if chkUpdateActive.Checked then
  1770.             Q['Active']:= 1
  1771.           else
  1772.             Q['Active']:= 0;
  1773.           Q['UserID']:= Self.CurrentUser;
  1774.           Q['Priority']:= StrToIntDef(txtUpdatePriority.Text, 1);
  1775.           Q['UseFTP']:= 0;
  1776.  
  1777.         Q.Post;
  1778.       Q.Close;
  1779.     finally
  1780.       Q.Free;
  1781.     end;
  1782.     RefreshUpdates;
  1783.     SelectUpdate(EditUpdate);
  1784.     DisableUpdateEdit;
  1785.   except
  1786.     on e: exception do begin
  1787.       ShowMessage('Cannot save update: '+E.Message);
  1788.       if assigned(Q) then Q.Free;
  1789.  
  1790.     end;
  1791.   end;
  1792.  
  1793. end;
  1794.  
  1795. procedure TfrmMain.cboUserOrderClick(Sender: TObject);
  1796. begin
  1797.   RefreshUsers;
  1798. end;
  1799.  
  1800. procedure TfrmMain.chkEnableServiceClick(Sender: TObject);
  1801. begin
  1802.   if chkEnableService.Checked then
  1803.     pService.Visible:= True
  1804.   else
  1805.     pService.Visible:= False;
  1806.   SaveServiceSettings;
  1807.   RefreshServiceSettings;
  1808. end;
  1809.  
  1810. procedure TfrmMain.chkServiceVerifyComputersClick(Sender: TObject);
  1811. begin
  1812.   SaveServiceSettings;
  1813.   RefreshServiceSettings;
  1814. end;
  1815.  
  1816. procedure TfrmMain.chkServiceVerifyDatabasesClick(Sender: TObject);
  1817. begin
  1818.   SaveServiceSettings;
  1819.   RefreshServiceSettings;
  1820. end;
  1821.  
  1822. procedure TfrmMain.chkServiceVerifyServersClick(Sender: TObject);
  1823. begin
  1824.   SaveServiceSettings;
  1825.   RefreshServiceSettings;
  1826. end;
  1827.  
  1828. procedure TfrmMain.chkServiceVerifySourcesClick(Sender: TObject);
  1829. begin
  1830.   SaveServiceSettings;
  1831.   RefreshServiceSettings;
  1832. end;
  1833.  
  1834. procedure TfrmMain.cmdDeleteUserClick(Sender: TObject);
  1835. begin
  1836.   if MessageDlg('Are you sure you wish to delete user "'+
  1837.     QUsers.FieldByName('FName').AsString + ' ' +
  1838.     QUsers.FieldByName('LName').AsString + '"?', mtWarning, [mbYes, mbNo], 0)=
  1839.     mrYes then
  1840.   begin
  1841.     QTemp.SQL.Text:= 'update Users set deleted = 1 where id = '+
  1842.       IntToStr(QUsers.FieldByName('ID').AsInteger);
  1843.     QTemp.ExecSQL;
  1844.     QTemp.Close;
  1845.     RefreshUsers;
  1846.   end;
  1847. end;
  1848.  
  1849. procedure TfrmMain.FormShow(Sender: TObject);
  1850. begin
  1851.   //Hide;
  1852.   if frmLogin.ModalResult = mrCancel then
  1853.     Close;
  1854.   SetPriv;
  1855. end;
  1856.  
  1857. procedure TfrmMain.cmdVerifyDBClick(Sender: TObject);
  1858. var
  1859.   S: TServer;
  1860. begin
  1861.   //Verify Selected Database
  1862.   S:= TServer(cboDatabaseServer.Items.Objects[
  1863.     cboDatabaseServer.ItemIndex]);
  1864.   ADOTest.ConnectionString:= BuildConnectionString(
  1865.     QDatabases.FieldByName('SQLName').AsString,
  1866.     QDatabases.FieldByName('DBName').AsString,
  1867.     QDatabases.FieldByName('Login').AsString,
  1868.     QDatabases.FieldByName('Pass').AsString,
  1869.     s.Provider, False);
  1870.   try
  1871.     ADOTest.Connected:= True;
  1872.     ADOTest.Connected:= False;    
  1873.   except
  1874.     on e: exception do begin
  1875.       ShowMessage('Failed to connect to Database "'+
  1876.         QDatabases.FieldByName('SQLName').AsString + '\'+
  1877.         QDatabases.FieldByName('DBName').AsString + '"');
  1878.       exit;
  1879.     end;
  1880.   end;
  1881.   ShowMessage('Successfully connected to Database "'+
  1882.     QDatabases.FieldByName('SQLName').AsString + '\'+
  1883.     QDatabases.FieldByName('DBName').AsString + '"');
  1884. end;
  1885.  
  1886. procedure TfrmMain.cmdDeleteLocationClick(Sender: TObject);
  1887. var
  1888.   IsUsed: Bool;
  1889. begin
  1890.   if MessageDlg('Are you sure you wish to delete selected location '+ #10 +
  1891.     '"' + QLocations.FieldByName('Location').AsString + '"?', mtWarning, [mbYes, mbNo], 0)
  1892.     = mrYes then
  1893.   begin
  1894.     IsUsed:= False;
  1895.     QTemp.ConnectionString:= CurConnection;
  1896.     QTemp.SQL.Text:= 'Select id from computers where locationid = '+
  1897.       IntToStr(QLocations.FieldByName('ID').AsInteger);
  1898.     QTemp.SQL.Append('and deleted <> 1');
  1899.     QTemp.Open;
  1900.       if not QTemp.IsEmpty then IsUsed:= True;
  1901.     QTemp.Close;
  1902.     if IsUsed then
  1903.       MessageDlg('Cannot delete location because it is being used.',
  1904.         mtError, [mbOK], 0)
  1905.     else begin
  1906.       QTemp.SQL.Text:= 'update locations set deleted = 1 where id = '+
  1907.         IntToStr(QLocations.FieldByName('ID').AsInteger);
  1908.       QTemp.ExecSQL;
  1909.       QTemp.Close;
  1910.     end;
  1911.     RefreshLocations;
  1912.     RefreshComputerLocations;
  1913.     RefreshServerLocations;
  1914.   end;
  1915. end;
  1916.  
  1917. procedure TfrmMain.cmdUserPrivClick(Sender: TObject);
  1918. begin
  1919.   if GetPriv(CurrentUser,pvUserPriv) <= 2 then begin
  1920.     frmUserPriv.CurUser:= QUsers.FieldByName('ID').AsInteger;
  1921.     frmUserPriv.ShowModal;
  1922.   end else begin
  1923.     ShowMessage('You do not have privileges to this feature.');
  1924.   end;
  1925. end;
  1926.  
  1927. procedure TfrmMain.SetPriv;
  1928. begin
  1929.   case GetPriv(CurrentUser, pvLocations) of
  1930.     1: begin
  1931.       TabLocations.Visible:= True;        //All privileges for locations
  1932.       cmdDeleteLocation.Visible:= True;
  1933.       cmdEditLocation.Visible:= True;
  1934.       cmdNewLocation.Visible:= True;
  1935.     end;
  1936.     2: begin
  1937.       TabLocations.Visible:= True;        //View only privileges for locations
  1938.       cmdDeleteLocation.Visible:= False;
  1939.       cmdEditLocation.Visible:= False;
  1940.       cmdNewLocation.Visible:= False;
  1941.     end;
  1942.     3: begin
  1943.       TabLocations.Visible:= False;       //No privileges for locations
  1944.     end;
  1945.   end;
  1946.  
  1947.   if GetPriv(CurrentUser, pvComputers) = 3 then
  1948.     TabComputers.Visible:= False
  1949.   else if GetPriv(CurrentUser, pvComputers) = 2 then begin
  1950.     TabComputers.Visible:= True;
  1951.     cmdNewComputer.Visible:= False;
  1952.     cmdEditComputer.Visible:= False;
  1953.     cmdDeleteComputer.Visible:= False;
  1954.   end else if GetPriv(CurrentUser, pvComputers) = 1 then begin
  1955.     TabComputers.Visible:= True;
  1956.     cmdNewComputer.Visible:= True;
  1957.     cmdEditComputer.Visible:= True;
  1958.     cmdDeleteComputer.Visible:= True;
  1959.   end;
  1960.  
  1961.   if GetPriv(CurrentUser, pvSQLServers) = 3 then
  1962.     TabServers.Visible:= False else TabServers.Visible:= True;
  1963.  
  1964.   if GetPriv(CurrentUser, pvDatabases) = 3 then
  1965.     TabDatabases.Visible:= False else TabDatabases.Visible:= True;
  1966.  
  1967.   if GetPriv(CurrentUser, pvUsers) = 3 then
  1968.     TabUsers.Visible:= False else TabUsers.Visible:= True;
  1969.   if GetPriv(CurrentUser, pvUsers) = 2 then begin
  1970.     cmdEditUser.Visible:= False;
  1971.     cmdNewUser.Visible:= False;
  1972.     cmdDeleteUser.Visible:= False;
  1973.   end else begin
  1974.     cmdEditUser.Visible:= True;
  1975.     cmdNewUser.Visible:= True;
  1976.     cmdDeleteUser.Visible:= True;
  1977.   end;
  1978.  
  1979.   if GetPriv(CurrentUser, pvUserPriv) = 3 then
  1980.     cmdUserPriv.Visible:= False else cmdUserPriv.Visible:= True;
  1981. end;
  1982.  
  1983. procedure TfrmMain.PagesChange(Sender: TObject);
  1984. begin
  1985.   case Pages.ActivePageIndex of
  1986.     0: begin  //Locations
  1987.       case GetPriv(CurrentUser, pvLocations) of
  1988.         1: begin
  1989.           TabLocations.Visible:= True;        //All privileges for locations
  1990.           cmdDeleteLocation.Visible:= True;
  1991.           cmdEditLocation.Visible:= True;
  1992.           cmdNewLocation.Visible:= True;
  1993.           RefreshLocations;
  1994.         end;
  1995.         2: begin
  1996.           TabLocations.Visible:= True;        //View only privileges for locations
  1997.           cmdDeleteLocation.Visible:= False;
  1998.           cmdEditLocation.Visible:= False;
  1999.           cmdNewLocation.Visible:= False;
  2000.           RefreshLocations;
  2001.           ShowMessage('You have view only privileges for locations');
  2002.         end;
  2003.         3: begin
  2004.           TabLocations.Visible:= False;       //No privileges for locations
  2005.           ShowMessage('You do not have privileges for locations');
  2006.         end;
  2007.       end;
  2008.     end;
  2009.     1: begin  //Computers
  2010.       case GetPriv(CurrentUser, pvComputers) of
  2011.         1: begin
  2012.           TabComputers.Visible:= True;
  2013.           cmdNewComputer.Visible:= True;
  2014.           cmdEditComputer.Visible:= True;
  2015.           cmdDeleteComputer.Visible:= True;
  2016.           RefreshComputers;
  2017.         end;
  2018.         2: begin
  2019.           TabComputers.Visible:= True;
  2020.           cmdNewComputer.Visible:= False;
  2021.           cmdEditComputer.Visible:= False;
  2022.           cmdDeleteComputer.Visible:= False;
  2023.           RefreshComputers;
  2024.           ShowMessage('You have view only privileges for computers');
  2025.         end;
  2026.         3: begin
  2027.           TabComputers.Visible:= False;
  2028.           ShowMessage('You do not have privileges for computers');
  2029.         end;
  2030.       end;
  2031.     end;
  2032.     2: begin  //SQL Servers
  2033.       case GetPriv(CurrentUser, pvSQLServers) of
  2034.         1: begin
  2035.           TabServers.Visible:= True;
  2036.           cmdNewServer.Visible:= True;
  2037.           cmdEditServer.Visible:= True;
  2038.           cmdDeleteServer.Visible:= True;
  2039.           cmdRefreshAvailServ.Visible:= True;
  2040.           lstAvailServ.Visible:= True;
  2041.           DBGrid3.Visible:= True;
  2042.           RefreshServers;
  2043.         end;
  2044.         2: begin
  2045.           TabServers.Visible:= True;
  2046.           cmdNewServer.Visible:= False;
  2047.           cmdEditServer.Visible:= False;
  2048.           cmdDeleteServer.Visible:= False;
  2049.           cmdRefreshAvailServ.Visible:= True;
  2050.           lstAvailServ.Visible:= True;
  2051.           DBGrid3.Visible:= True;
  2052.           RefreshServers;
  2053.           ShowMessage('You have view only privileges for servers');
  2054.         end;
  2055.         3: begin
  2056.           TabServers.Visible:= False;
  2057.           ShowMessage('You do not have privileges for servers');
  2058.         end;
  2059.       end;
  2060.     end;
  2061.     3: begin  //Databases
  2062.       case GetPriv(CurrentUser, pvDatabases) of
  2063.         1: begin
  2064.           TabDatabases.Visible:= True;
  2065.           cmdNewDB.Visible:= True;
  2066.           cmdEditDB.Visible:= True;
  2067.           cmdRefreshDatabases.Visible:= True;
  2068.           cmdVerifyDB.Visible:= True;
  2069.           cmdRemoveDB.Visible:= True;
  2070.           cmdAddDB.Visible:= True;
  2071.           DBGrid6.Visible:= True;
  2072.           DBGrid4.Visible:= True;
  2073.           RefreshDatabases;
  2074.         end;
  2075.         2: begin
  2076.           TabDatabases.Visible:= True;
  2077.           cmdNewDB.Visible:= False;
  2078.           cmdEditDB.Visible:= False;
  2079.           cmdRefreshDatabases.Visible:= True;
  2080.           cmdVerifyDB.Visible:= True;
  2081.           cmdRemoveDB.Visible:= False;
  2082.           cmdAddDB.Visible:= False;
  2083.           DBGrid6.Visible:= True;
  2084.           DBGrid4.Visible:= True;
  2085.           RefreshDatabases;
  2086.           ShowMessage('You have read only privileges for databases');
  2087.         end;
  2088.         3: begin
  2089.           TabDatabases.Visible:= False;
  2090.           ShowMessage('You do not have privileges for databases');
  2091.         end;
  2092.       end;
  2093.     end;
  2094.     4: begin  //Users
  2095.       case GetPriv(CurrentUser, pvUsers) of
  2096.         1: begin
  2097.           TabUsers.Visible:= True;
  2098.           cmdNewUser.Visible:= True;
  2099.           cmdEditUser.Visible:= True;
  2100.           cmdDeleteUser.Visible:= True;
  2101.           cmdRefreshUsers.Visible:= True;
  2102.           DBGrid5.Visible:= True;
  2103.           RefreshUsers;
  2104.         end;
  2105.         2: begin
  2106.           TabUsers.Visible:= True;
  2107.           cmdNewUser.Visible:= False;
  2108.           cmdEditUser.Visible:= False;
  2109.           cmdDeleteUser.Visible:= False;
  2110.           cmdRefreshUsers.Visible:= True;
  2111.           DBGrid5.Visible:= True;
  2112.           RefreshUsers;
  2113.           ShowMessage('You have view only privileges for users');
  2114.         end;
  2115.         3: begin
  2116.           TabUsers.Visible:= False;
  2117.           ShowMessage('You do not have privileges for users');
  2118.         end;
  2119.       end;
  2120.     end;
  2121.     5: begin  //Audit
  2122.       case GetPriv(CurrentUser, pvAudit) of
  2123.         1: begin //Full Access
  2124.           TabAudit.Visible:= True;
  2125.           lstAudit.Visible:= True;
  2126.           RefreshAudit;
  2127.         end;
  2128.         2: begin //View Only Access
  2129.           TabAudit.Visible:= True;
  2130.           lstAudit.Visible:= True;
  2131.           RefreshAudit;
  2132.           ShowMessage('You have view only privileges for audit');
  2133.         end;
  2134.         3: begin //No Access
  2135.           TabAudit.Visible:= False;
  2136.           lstAudit.Visible:= False;
  2137.           ShowMessage('You do not have privileges for audit');
  2138.         end;
  2139.       end;
  2140.     end;
  2141.     6: begin  //Tools
  2142.  
  2143.     end;
  2144.     7: begin  //Settings
  2145.  
  2146.     end;
  2147.     8: begin  //Updates
  2148.       RefreshUpdates;
  2149.     end;
  2150.   end;
  2151.  
  2152.  
  2153.   SetPriv;
  2154. end;
  2155.  
  2156. procedure TfrmMain.RefreshComputerLocations;
  2157. var
  2158.   X: Integer;
  2159.   objLoc: TLocation;
  2160.   SetLoc: Integer;
  2161. begin
  2162.   if cboComputerLocation.Items.Count > 0 then begin
  2163.     objLoc:= TLocation(cboComputerLocation.Items.Objects[cboComputerLocation.ItemIndex]);
  2164.     SetLoc:= objLoc.ID;
  2165.   end;
  2166.   for X:= 0 to cboComputerLocation.Items.Count - 1 do
  2167.     cboComputerLocation.Items.Objects[X].Free;
  2168.   cboComputerLocation.Clear;
  2169.   objLoc:= TLocation.Create;
  2170.     objLoc.ID:= -1;
  2171.     objLoc.Caption:= 'All Locations';
  2172.   cboComputerLocation.Items.AddObject('All Locations', objLoc);
  2173.   QTemp.SQL.Text:= 'Select * from Locations where deleted <> 1';
  2174.   QTemp.Open;
  2175.     QTemp.First;
  2176.     While Not QTemp.Eof do begin
  2177.       objLoc:= TLocation.Create;
  2178.         objLoc.ID:= QTemp.FieldByName('ID').AsInteger;
  2179.         objLoc.Caption:= QTemp.FieldByName('Caption').AsString;
  2180.         objLoc.Server:= QTemp.FieldByName('PrimaryServerID').AsInteger;
  2181.         objLoc.Description:= QTemp.FieldByName('Description').AsString;
  2182.       cboComputerLocation.Items.AddObject(objLoc.Caption, objLoc);
  2183.       QTemp.Next;
  2184.     end;
  2185.   QTemp.Close;
  2186.   cboComputerLocation.ItemIndex:= 0;
  2187.   for X:= 0 to cboComputerLocation.Items.Count - 1 do begin
  2188.     objLoc:= TLocation(cboComputerLocation.Items.Objects[X]);
  2189.     if objLoc.ID = SetLoc then cboComputerLocation.ItemIndex:= X;
  2190.   end;
  2191. end;
  2192.  
  2193. procedure TfrmMain.RefreshServerLocations;
  2194. var
  2195.   X: Integer;
  2196.   objLoc: TLocation;
  2197.   SetLoc: Integer;
  2198. begin
  2199.   if cboServerLocation.Items.Count > 0 then begin
  2200.     objLoc:= TLocation(cboServerLocation.Items.Objects[cboServerLocation.ItemIndex]);
  2201.     SetLoc:= objLoc.ID;
  2202.   end;
  2203.   for X:= 0 to cboServerLocation.Items.Count - 1 do
  2204.     cboServerLocation.Items.Objects[X].Free;
  2205.   cboServerLocation.Clear;
  2206.   objLoc:= TLocation.Create;
  2207.   objLoc.ID:= -1;
  2208.   cboServerLocation.Items.AddObject('All Locations', objLoc);
  2209.   QTemp.SQL.Text:= 'Select * from Locations where deleted <> 1';
  2210.   QTemp.Open;
  2211.     QTemp.First;
  2212.     While Not QTemp.Eof do begin
  2213.       objLoc:= TLocation.Create;
  2214.         objLoc.ID:= QTemp.FieldByName('ID').AsInteger;
  2215.         objLoc.Caption:= QTemp.FieldByName('Caption').AsString;
  2216.         objLoc.Server:= QTemp.FieldByName('PrimaryServerID').AsInteger;
  2217.         objLoc.Description:= QTemp.FieldByName('Description').AsString;
  2218.       cboServerLocation.Items.AddObject(objLoc.Caption, objLoc);
  2219.       QTemp.Next;
  2220.     end;
  2221.   QTemp.Close;
  2222.   cboServerLocation.ItemIndex:= 0;
  2223.   for X:= 0 to cboServerLocation.Items.Count - 1 do begin
  2224.     objLoc:= TLocation(cboServerLocation.Items.Objects[X]);
  2225.     if objLoc.ID = SetLoc then cboServerLocation.ItemIndex:= X;
  2226.   end;
  2227.   //RefreshServers;
  2228. end;
  2229.  
  2230. procedure TfrmMain.RefreshDatabaseServers;
  2231. var
  2232.   X: Integer;
  2233.   S: TServer;
  2234.   SetSvr: Integer;
  2235. begin
  2236.   if cboDatabaseServer.Items.Count > 0 then begin
  2237.     S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
  2238.     SetSvr:= S.ID;
  2239.   end;
  2240.   for X:= 0 to cboDatabaseServer.Items.Count - 1 do
  2241.     cboDatabaseServer.Items.Objects[X].Free;
  2242.   cboDatabaseServer.Clear;
  2243.   S:= TServer.Create;
  2244.     S.ID:= -1;
  2245.     S.Caption:= '(All Servers)';
  2246.   cboDatabaseServer.Items.AddObject(S.Caption, S);
  2247.   QTemp.SQL.Text:= 'Select * from SQLServers where deleted <> 1';
  2248.   QTemp.Open;
  2249.     QTemp.First;
  2250.     While Not QTemp.Eof do begin
  2251.       S:= TServer.Create;
  2252.         S.ID:=          QTemp.FieldByName('ID').AsInteger;
  2253.         S.Caption:=     QTemp.FieldByName('Caption').AsString;
  2254.         S.Description:= QTemp.FieldByName('Description').AsString;
  2255.         S.CompID:=      QTemp.FieldByName('CompID').AsInteger;
  2256.         S.SQLName:=     QTemp.FieldByName('SQLName').AsString;
  2257.         S.Login:=       QTemp.FieldByName('Login').AsString;
  2258.         S.Pass:=        QTemp.FieldByName('Pass').AsString;
  2259.         S.Provider:=    QTemp.FieldByName('Provider').AsString;
  2260.       cboDatabaseServer.Items.AddObject(S.Caption, S);
  2261.       QTemp.Next;
  2262.     end;
  2263.   QTemp.Close;
  2264.   cboDatabaseServer.ItemIndex:= 0;
  2265.   for X:= 0 to cboDatabaseServer.Items.Count - 1 do begin
  2266.     S:= TServer(cboDatabaseServer.Items.Objects[X]);
  2267.     if S.ID = SetSvr then cboDatabaseServer.ItemIndex:= X;
  2268.   end;
  2269. end;
  2270.  
  2271. procedure TfrmMain.lstToolMenuDblClick(Sender: TObject);
  2272. var
  2273.   fUpdate: TfrmUpdate;
  2274.   P: String;
  2275.   R: TRegistry;
  2276.   T: TTool;
  2277. begin
  2278.   R:= TRegistry.Create;
  2279.   try
  2280.     R.RootKey:= HKEY_LOCAL_MACHINE;
  2281.     R.Access:= KEY_WRITE;
  2282.     R.OpenKey('Software\7Lands\Rugm\Setup', False);
  2283.       if not R.ValueExists('AppPath') then
  2284.         R.WriteString('AppPath', 'C:\RugManagerPro');
  2285.       P:= R.ReadString('AppPath');
  2286.     R.CloseKey;
  2287.   finally
  2288.     R.Free;
  2289.   end;
  2290.   if lstToolMenu.ItemIndex > -1 then begin
  2291.     T:= TTool(lstToolMenu.Items.Objects[lstToolMenu.ItemIndex]);
  2292.     if T.Target = 'T_UPDATE' then begin
  2293.       //RMPro Update
  2294.       if GetPriv(CurrentUser, pvLoginUpdate) = 1 then begin
  2295.         fUpdate:= TfrmUpdate.Create(self);
  2296.         try
  2297.           fUpdate.ShowModal;
  2298.         finally
  2299.           fUpdate.Free;
  2300.         end;
  2301.       end else begin
  2302.         ShowMessage('You are not allowed to access RMPro Update.');
  2303.       end;
  2304.     end else begin
  2305.       //Regular Exe
  2306.       if FileExists(T.Target) then
  2307.         shellExecute(Handle,'open',PChar(T.Target),
  2308.           nil,nil,SW_SHOWNORMAL)
  2309.       else
  2310.         ShowMessage('Could not find '+ T.Caption + '.');  
  2311.     end;
  2312.   end;
  2313. end;
  2314.  
  2315. procedure TfrmMain.lstUpdateFilesClick(Sender: TObject);
  2316. begin
  2317.   ClearUpdateFile;
  2318.   EditUpdateFile:= StrToIntDef(lstUpdateFiles.Cells[0,lstUpdateFiles.Row], 0);
  2319.   RefreshUpdateFile(EditUpdateFile);
  2320. end;
  2321.  
  2322. procedure TfrmMain.lstUpdatesClick(Sender: TObject);
  2323. begin
  2324.   EditUpdate:= StrToIntDef(lstUpdates.Cells[0,lstUpdates.Row], 0);
  2325.   RefreshUpdate(EditUpdate);
  2326. end;
  2327.  
  2328. procedure TfrmMain.lstVariablesClick(Sender: TObject);
  2329. var
  2330.   V: TValue;
  2331. begin
  2332.   if lstVariables.Items.Count > 0 then begin
  2333.     if lstVariables.ItemIndex >= 0 then begin
  2334.       cmdAddVariable.Enabled:= True;
  2335.       cmdEditVariable.Enabled:= True;
  2336.       cmdDeleteVariable.Enabled:= True;
  2337.       V:= TValue(lstVariables.Items.Objects[lstVariables.ItemIndex]);
  2338.       txtVariableName.Text:= V.Caption;
  2339.       txtVariableValue.Text:= V.Abbr;
  2340.     end else begin
  2341.       cmdAddVariable.Enabled:= True;
  2342.       cmdEditVariable.Enabled:= False;
  2343.       cmdDeleteVariable.Enabled:= False;
  2344.     end;
  2345.   end else begin
  2346.     cmdAddVariable.Enabled:= True;
  2347.     cmdEditVariable.Enabled:= False;
  2348.     cmdDeleteVariable.Enabled:= False;
  2349.   end;
  2350. end;
  2351.  
  2352. procedure TfrmMain.cmdCompRemoteClick(Sender: TObject);
  2353. begin
  2354.   if GetPriv(CurrentUser, pvLoginRemote) = 1 then begin
  2355.     if not QComputers.IsEmpty then begin
  2356.       frmAction:= TfrmAction.Create(self);
  2357.       frmRemDesk:= TfrmRemDesk.Create(self);
  2358.       frmOptions:= TfrmOptions.Create(self);
  2359.       frmAbout:= TfrmAbout.Create(self);
  2360.       frmRemote:= TfrmRemote.Create(self);
  2361.         frmRemote.CurServer:= QComputers.FieldByName('IP').AsString;
  2362.         frmRemote.ShowModal;
  2363.       frmRemote.Free;
  2364.       frmAction.Free;
  2365.       frmRemDesk.Free;
  2366.       frmOptions.Free;
  2367.       frmAbout.Free;
  2368.     end;
  2369.   end else begin
  2370.     ShowMessage('You are now allowed to view computers remotely.');
  2371.   end;
  2372. end;
  2373.  
  2374. procedure TfrmMain.cmdVerifyServerClick(Sender: TObject);
  2375. var
  2376.   C: TConn;
  2377. begin
  2378.   if not QServers.IsEmpty then begin
  2379.     C:= TConn.Create;
  2380.     try
  2381.       C.Server:= QServers.FieldByName('SQLName').AsString;
  2382.       C.Database:= 'Master';
  2383.       C.Login:= QServers.FieldByName('Login').AsString;
  2384.       C.Password:= QServers.FieldByName('Pass').AsString;
  2385.       C.Provider:= QServers.FieldByName('Provider').AsString;
  2386.       ADOTest.ConnectionString:= BuildConnectionString(C);
  2387.       try
  2388.         ADOTest.Connected:= True;
  2389.         ADOTest.Connected:= False;
  2390.       except
  2391.         on e: exception do begin
  2392.           ShowMessage('Failed to connect to Server '+C.Server);
  2393.           exit;
  2394.         end;
  2395.       end;
  2396.       ShowMessage('Successfully connected to Server '+C.Server);
  2397.     finally
  2398.       C.Free;
  2399.     end;
  2400.   end;
  2401. end;
  2402.  
  2403. procedure TfrmMain.RefreshTools;
  2404. var
  2405.   T: TTool;
  2406.   X: Integer;
  2407.   DoAdd: Bool;
  2408. begin
  2409.   for X:= 0 to lstToolMenu.Items.Count - 1 do
  2410.     lstToolMenu.Items.Objects[X].Free;
  2411.   lstToolMenu.Clear;
  2412.   QTemp.SQL.Text:= 'Select * from Tools where Active = 16 '+
  2413.     ' and CompID = '+ IntToStr(CurCompID) + ' and deleted <> 1 order by sort';
  2414.   QTemp.Open;
  2415.     QTemp.First;
  2416.     While Not QTemp.Eof do begin
  2417.       DoAdd:= True;
  2418.       if QTemp.FieldByName('Target').AsString <> 'T_UPDATE' then begin
  2419.         if not FileExists(QTemp.FieldByName('Target').AsString) then
  2420.           DoAdd:= False;
  2421.       end;
  2422.           //DoAdd:= True;   //TEMP
  2423.       if DoAdd then begin
  2424.         T:= TTool.Create;
  2425.           T.ID:= QTemp.FieldByName('ID').AsInteger;
  2426.           T.Caption:= QTemp.FieldByName('Caption').AsString;
  2427.           T.Target:= QTemp.FieldByName('Target').AsString;
  2428.         lstToolMenu.Items.AddObject(T.Caption, T);
  2429.       end;
  2430.       QTemp.Next;
  2431.     end;
  2432.   QTemp.Close;
  2433. end;
  2434.  
  2435. procedure TfrmMain.cmdPermissionsClick(Sender: TObject);
  2436. var
  2437.   F: TfrmPermissions;
  2438. begin
  2439.   F:= TfrmPermissions.Create(Self);
  2440.   try
  2441.     F.ADOConnection:= DB;
  2442.     F.RefreshPermissions(DB);
  2443.     F.ShowModal;
  2444.  
  2445.   finally
  2446.     F.Free;
  2447.   end;
  2448. end;
  2449.  
  2450. procedure TfrmMain.cmdSaveUpdateFileClick(Sender: TObject);
  2451. var
  2452.   Q: TADOQuery;
  2453. begin
  2454.   try
  2455.     //Check Validity
  2456.     if StrToIntDef(txtUpdateFilePriority.Text, -1) < 0 then
  2457.       txtUpdateFilePriority.Text:= '1';
  2458.     Q:= TADOQuery.Create(nil);
  2459.     try
  2460.       Q.Connection:= Self.DB;
  2461.       Q.SQL.Text:= 'select * from updatefiles where id = '+IntToStr(EditUpdateFile);
  2462.       Q.Open;
  2463.         if Q.IsEmpty then Q.Append else Q.Edit;
  2464.           if chkUpdateFileActive.Checked then
  2465.             Q['Active']:= 1
  2466.           else
  2467.             Q['Active']:= 0;
  2468.           Q['Caption']:= txtUpdateFileCaption.Text;
  2469.           Q['SourcePath']:= txtUpdateFileSourcePath.Text;
  2470.           Q['DestPath']:= txtUpdateFileDestPath.Text;
  2471.           Q['Filename']:= txtUpdateFileFilename.Text;
  2472.           Q['Priority']:= StrToIntDef(txtUpdateFilePriority.Text, 1);
  2473.         Q.Post;
  2474.       Q.Close;
  2475.     finally
  2476.       Q.Free;
  2477.     end;
  2478.     RefreshUpdateFiles(EditUpdate);
  2479.     SelectUpdateFile(EditUpdateFile);
  2480.   except
  2481.     on e: exception do begin
  2482.       ShowMessage('Cannot save update file: '+E.Message);
  2483.       if assigned(Q) then Q.Free;
  2484.     end;
  2485.   end;
  2486. end;
  2487.  
  2488. procedure TfrmMain.cmdCancelUpdateFileClick(Sender: TObject);
  2489. begin
  2490.   DisableUpdateFileEdit;
  2491.   SelectUpdateFile(EditUpdateFile);
  2492.   lstUpdateFilesClick(Sender);
  2493. end;
  2494.  
  2495. procedure TfrmMain.Button1Click(Sender: TObject);  {
  2496. var
  2497.   L, R: TStringList;
  2498.   T: TTool;
  2499.   X, Y: Integer;    }
  2500. begin   {
  2501.   L:= TStringList.Create;
  2502.   R:= TStringList.Create;
  2503.   QTemp.SQL.Text:= 'Select ID from computers';
  2504.   QTemp.Open;
  2505.     QTemp.First;
  2506.     while not QTemp.Eof do begin
  2507.       L.Append(IntToStr(QTemp.FieldByName('ID').AsInteger));
  2508.       QTemp.Next;
  2509.     end;
  2510.   QTemp.Close;
  2511.  
  2512.   QTemp.SQL.Text:= 'Select * from tools where compid = 13 order by sort';
  2513.   QTemp.Open;
  2514.     QTemp.First;
  2515.     while not QTemp.Eof do begin
  2516.       T:= TTool.Create;
  2517.         T.ID:= QTemp.FieldByName('ID').AsInteger;
  2518.         T.Caption:= QTemp.FieldByName('Caption').AsString;
  2519.         T.Target:= QTemp.FieldByName('Target').AsString;
  2520.         T.Sort:= QTemp.FieldByName('Sort').AsInteger;
  2521.       R.AddObject(T.Caption, T);
  2522.       QTemp.Next;
  2523.     end;
  2524.   QTemp.Close;
  2525.  
  2526.   for X:= 0 to L.Count - 1 do begin
  2527.     for Y:= 0 to R.Count - 1 do begin
  2528.       T:= TTool(R.Objects[Y]);
  2529.       QTemp.SQL.Text:= 'Select * from Tools';
  2530.       QTemp.Open;
  2531.         QTemp.Insert;
  2532.           QTemp['Caption']:= T.Caption;
  2533.           QTemp['Target']:= T.Target;
  2534.           QTemp['Sort']:= T.Sort;
  2535.           QTemp['Active']:= 16;
  2536.           QTemp['CompID']:= StrToInt(L[X]);
  2537.         QTemp.Post;
  2538.       QTemp.Close;
  2539.     end;
  2540.   end; }
  2541. end;
  2542.  
  2543. procedure TfrmMain.cmdDeleteToolClick(Sender: TObject);
  2544. var
  2545.   T: TTool;
  2546. begin
  2547.   if lstToolMenu.ItemIndex > -1 then begin
  2548.     if MessageDlg('Are you sure you wish to delete the selected tool '+
  2549.       '"' + lstToolMenu.Items[lstToolMenu.ItemIndex] + '"?', mtWarning,
  2550.       [mbYes, mbNo], 0) = mrYes then
  2551.     begin
  2552.       T:= TTool(lstToolMenu.Items.Objects[lstToolMenu.ItemIndex]);
  2553.       QTemp.SQL.Text:= 'update tools set deleted = 1 where id = '+ IntToStr(T.ID);
  2554.       QTemp.ExecSQL;
  2555.       if QTemp.Active then QTemp.Close;
  2556.     end;
  2557.   end;
  2558.   RefreshTools;
  2559. end;
  2560.  
  2561. procedure TfrmMain.cmdNewToolClick(Sender: TObject);
  2562. begin
  2563.   frmTool.EditState:= 'New';
  2564.   frmTool.ShowModal;
  2565.   RefreshTools;
  2566. end;
  2567.  
  2568. procedure TfrmMain.cmdEditToolClick(Sender: TObject);
  2569. var
  2570.   T: TTool;
  2571. begin
  2572.   T:= TTool(lstToolMenu.Items.Objects[lstToolMenu.ItemIndex]);
  2573.   frmTool.EditState:= 'Edit';
  2574.   frmTool.ToolID:= T.ID;
  2575.   frmTool.ShowModal;
  2576.   RefreshTools;
  2577. end;
  2578.  
  2579. procedure TfrmMain.cmdOpenToolClick(Sender: TObject);
  2580. begin
  2581.   lstToolMenuDblClick(self);
  2582. end;
  2583.  
  2584. procedure TfrmMain.SaveAudit
  2585.   (TableName: String; RecordID: Integer; State: String);
  2586. var
  2587.   QAudit: TADOQuery;
  2588.   QLog: TADOQuery;
  2589.   QTemp: TADOQuery;
  2590. begin
  2591.   QAudit:= TADOQuery.Create(self);
  2592.   QLog:= TADOQuery.Create(self);
  2593.   QTemp:= TADOQuery.Create(self);
  2594.   QAudit.ConnectionString:= BuildConnectionString(CurrentConnection);
  2595.   QLog.ConnectionString:= BuildConnectionString(CurrentConnection);
  2596.   QTemp.ConnectionString:= BuildConnectionString(CurrentConnection);
  2597.   QAudit.SQL.Text:= 'Select * from '+ TableName + '_Audit';
  2598.   QAudit.Open;
  2599.     QAudit.Insert;
  2600.       if State = 'A' then begin
  2601.         QLog.SQL.Text:= 'select id from audit_log';
  2602.         QLog.SQL.Append('where sessionid = '+ IntToStr(SessionID));
  2603.         QLog.SQL.Append('order by id desc');
  2604.         QLog.Open;
  2605.           QLog.First;
  2606.           QAudit['LogID']:= QLog.FieldByName('ID').AsInteger;
  2607.         QLog.Close;
  2608.       end else begin
  2609.         QLog.SQL.Text:= 'select * from audit_log';
  2610.         QLog.Open;
  2611.           QLog.Insert;
  2612.             QLog['RecordID']:= RecordID;
  2613.             QLog['LogDT']:= Now;
  2614.             //QLog['UserID']:= CurrentUser;
  2615.             QLog['SessionID']:= SessionID;
  2616.             QLog['TableName']:= TableName;
  2617.             if State = 'D' then
  2618.               QLog['Action']:= 'Deleted';
  2619.             if State = 'I' then
  2620.               QLog['Action']:= 'Inserted';
  2621.             if State = 'B' then
  2622.               QLog['Action']:= 'Modified';
  2623.           QLog.Post;
  2624.         QLog.Close;
  2625.         QLog.SQL.Text:= 'select id from audit_log order by id desc';
  2626.         QLog.Open;
  2627.           QLog.First;
  2628.           QAudit['LogID']:= QLog.FieldByName('ID').AsInteger;
  2629.         QLog.Close;
  2630.       end;    
  2631.       QAudit['LogState']:= State;
  2632.       QAudit['Deleted']:= 0;
  2633.       QTemp.SQL.Text:= 'select * from '+ TableName + ' where ID = '+
  2634.         IntToStr(RecordID);
  2635.       QTemp.Open;
  2636.         QTemp.First;
  2637.         if TableName = 'Computers' then begin
  2638.           QAudit['CompName']:= QTemp.FieldByName('CompName').AsString;
  2639.           QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
  2640.           QAudit['Description']:= QTemp.FieldByName('Description').AsString;
  2641.           QAudit['LocationID']:= QTemp.FieldByName('LocationID').AsInteger;
  2642.           QAudit['IPAddress']:= QTemp.FieldByName('IPAddress').AsString;
  2643.           QAudit['Active']:= QTemp.FieldByName('Active').AsString;
  2644.           QAudit['RMPNum']:= QTemp.FieldByName('RMPNum').AsString;
  2645.         end;
  2646.         if TableName = 'Databases' then begin
  2647.           QAudit['ServerID']:= QTemp.FieldByName('ServerID').AsInteger;
  2648.           QAudit['DBName']:= QTemp.FieldByName('DBName').AsString;
  2649.           QAudit['Login']:= QTemp.FieldByName('Login').AsString;
  2650.           QAudit['Pass']:= QTemp.FieldByName('Pass').AsString;
  2651.           QAudit['DBType']:= QTemp.FieldByName('DBType').AsInteger;
  2652.           QAudit['Active']:= QTemp.FieldByName('Active').AsInteger;
  2653.           QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
  2654.           QAudit['Description']:= QTemp.FieldByName('Description').AsString;
  2655.           QAudit['InSwitch']:= QTemp.FieldByName('InSwitch').AsInteger;
  2656.         end;
  2657.         if TableName = 'Locations' then begin
  2658.           QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
  2659.           QAudit['Description']:= QTemp.FieldByName('Description').AsString;
  2660.           QAudit['PrimaryServerID']:= QTemp.FieldByName('PrimaryServerID').AsInteger;
  2661.           QAudit['Active']:= QTemp.FieldByName('Active').AsString;
  2662.           QAudit['Address1']:= QTemp.FieldByName('Address1').AsString;
  2663.           QAudit['Address2']:= QTemp.FieldByName('Address2').AsString;
  2664.           QAudit['City']:= QTemp.FieldByName('City').AsString;
  2665.           QAudit['State']:= QTemp.FieldByName('State').AsString;
  2666.           QAudit['Zip']:= QTemp.FieldByName('Zip').AsString;
  2667.           QAudit['Country']:= QTemp.FieldByName('Country').AsString;
  2668.         end;
  2669.         if TableName = 'Notes' then begin
  2670.  
  2671.         end;
  2672.         if TableName = 'PrivSet' then begin
  2673.  
  2674.         end;
  2675.         if TableName = 'SQLLogins' then begin
  2676.           //QAudit['']:= QTemp.FieldByName('')
  2677.         end;
  2678.         if TableName = 'SQLServers' then begin
  2679.           QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
  2680.           QAudit['Description']:= QTemp.FieldByName('Description').AsString;
  2681.           QAudit['CompID']:= QTemp.FieldByName('CompID').AsInteger;
  2682.           QAudit['SQLName']:= QTemp.FieldByName('SQLName').AsString;
  2683.           QAudit['Login']:= QTemp.FieldByName('Login').AsString;
  2684.           QAudit['Pass']:= QTemp.FieldByName('Pass').AsString;
  2685.           QAudit['Active']:= QTemp.FieldByName('Active').AsString;
  2686.           QAudit['Provider']:= QTemp.FieldByName('Provider').AsString;
  2687.           QAudit['VersionID']:= QTemp.FieldByName('VersionID').AsInteger;
  2688.           QAudit['ProviderID']:= QTemp.FieldByName('ProviderID').AsInteger;
  2689.         end;
  2690.         if TableName = 'Users' then begin
  2691.  
  2692.         end;
  2693.       QTemp.Close;
  2694.     QAudit.Post;
  2695.   QAudit.Close;
  2696.   QAudit.Free;
  2697.   QLog.Free;
  2698.   QTemp.Free;
  2699. end;
  2700.  
  2701. procedure TfrmMain.Panel1Resize(Sender: TObject);
  2702. begin
  2703.   DBGrid4.Columns[0].Width:= DBGrid4.Width - 30;
  2704. end;
  2705.  
  2706. procedure TfrmMain.Panel4Resize(Sender: TObject);
  2707. begin
  2708.   lstAvailServ.ColWidths[0]:= lstAvailServ.Width - 30;
  2709. end;
  2710.  
  2711. procedure TfrmMain.Panel2Resize(Sender: TObject);
  2712. begin
  2713.   cmdAvailDB.Top:= Round((Panel2.Height / 2) - (cmdAvailDB.Height / 2));
  2714. end;
  2715.  
  2716. procedure TfrmMain.Panel3Resize(Sender: TObject);
  2717. begin
  2718.   cmdAvailServ.Top:= Round((Panel3.Height / 2) - (cmdAvailServ.Height / 2));
  2719. end;
  2720.  
  2721. procedure TfrmMain.cmdAvailDBClick(Sender: TObject);
  2722. begin
  2723.   if Panel1.Visible = True then begin
  2724.     Panel1.Visible:= False;
  2725.     cmdAvailDB.Caption:= '>';
  2726.   end else begin
  2727.     Panel1.Visible:= True;
  2728.     cmdAvailDB.Caption:= '<';
  2729.   end;
  2730. end;
  2731.  
  2732. procedure TfrmMain.cmdAvailServClick(Sender: TObject);
  2733. begin
  2734.   if Panel4.Visible = True then begin
  2735.     Panel4.Visible:= False;
  2736.     cmdAvailServ.Caption:= '>';
  2737.   end else begin
  2738.     Panel4.Visible:= True;
  2739.     cmdAvailServ.Caption:= '<';
  2740.   end;
  2741. end;
  2742.  
  2743. procedure TfrmMain.ListAvailableSQLServers(Names : TStrings);
  2744. var
  2745.   RSCon: ADORecordsetConstruction;
  2746.   Rowset: IRowset;
  2747.   SourcesRowset: ISourcesRowset;
  2748.   SourcesRecordset: _Recordset;
  2749.   SourcesName, SourcesType: TField;
  2750.     function PtCreateADOObject(const ClassID: TGUID): IUnknown;
  2751.     var
  2752.       Status: HResult;
  2753.       FPUControlWord: Word;
  2754.     begin
  2755.       asm
  2756.         FNSTCW FPUControlWord
  2757.       end;
  2758.       Status := CoCreateInstance(
  2759.         CLASS_Recordset,
  2760.         nil,
  2761.         CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,
  2762.         IUnknown,
  2763.         Result);
  2764.       asm
  2765.         FNCLEX
  2766.         FLDCW FPUControlWord
  2767.       end;
  2768.       OleCheck(Status);
  2769.     end;
  2770. begin
  2771.   SourcesRecordset := PtCreateADOObject(CLASS_Recordset) as _Recordset;
  2772.   RSCon := SourcesRecordset as ADORecordsetConstruction;
  2773.   SourcesRowset := CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator')) as ISourcesRowset;
  2774.   OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset)));
  2775.   RSCon.Rowset := RowSet;
  2776.   with TADODataSet.Create(nil) do
  2777.   try
  2778.     Recordset := SourcesRecordset;
  2779.     SourcesName := FieldByName('SOURCES_NAME'); { do not localize }
  2780.     SourcesType := FieldByName('SOURCES_TYPE'); { do not localize }
  2781.     Names.BeginUpdate;
  2782.     try
  2783.       while not EOF do
  2784.       begin
  2785.         if (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE) and (SourcesName.AsString <> '') then
  2786.           Names.Add(SourcesName.AsString);
  2787.         Next;
  2788.       end;
  2789.     finally
  2790.       Names.EndUpdate;
  2791.     end;
  2792.   finally
  2793.     Free;
  2794.   end;
  2795. end;
  2796.  
  2797. procedure TfrmMain.cmdRefreshAvailServClick(Sender: TObject);
  2798. begin
  2799.   GetServerList;
  2800. end;
  2801.  
  2802. //Identifies available servers not registered in database
  2803. //Lists unregistered servers in lstAvailServ in SQL Servers tab
  2804. procedure TfrmMain.GetServerList;
  2805. var
  2806.   X, Y: Integer;
  2807.   AT: TADOQuery;
  2808.   Exists: Bool;
  2809.   C: Integer;
  2810.   L: TStringList;
  2811. begin
  2812.   C:= 0;
  2813.   AT:= TADOQuery.Create(self);
  2814.   L:= TStringList.Create;
  2815.   try
  2816.     AT.Connection:= DB;
  2817.     AT.SQL.Text:= 'select SQLName from sqlservers where deleted <> 1';
  2818.     AT.Open;
  2819.       lstAvailServ.RowCount:= 2;
  2820.       lstAvailServ.Rows[1].Clear;
  2821.       ListAvailableSQLServers(L);
  2822.       for X:= 0 to L.Count - 1 do begin
  2823.         Exists:= False;
  2824.         AT.First;
  2825.         While not AT.Eof do begin
  2826.           if UpperCase(L[X]) =
  2827.             UpperCase(AT.FieldByName('SQLName').AsString)
  2828.           then Exists:= True;
  2829.           AT.Next;
  2830.         end;
  2831.         if Exists = False then begin
  2832.           if C > 0 then
  2833.             lstAvailServ.RowCount:= lstAvailServ.RowCount + 1;
  2834.           lstAvailServ.Cells[0,C+1]:= L[X];
  2835.           C:= C + 1;
  2836.         end;
  2837.       end;
  2838.     AT.Close;
  2839.   finally
  2840.     if assigned(AT) then AT.Free;
  2841.     if assigned(L) then L.Free;
  2842.   end;
  2843. end;
  2844.  
  2845. procedure TfrmMain.RefreshAudit;
  2846. var
  2847.   F: TGridFieldList;
  2848.   X, R, RID: Integer;
  2849.   T: String;
  2850. begin
  2851.  
  2852.   QTemp.SQL.Text:= 'select L.ID, L.LogDT, L.TableName, L.Action, U.NName, L.RecordID';
  2853.     QTemp.SQL.Append('from Audit_Log L');
  2854.     QTemp.SQL.Append('join LoginHist H on H.id = l.sessionid');
  2855.     QTemp.SQL.Append('join users u on u.id = h.UserID');
  2856.     QTemp.SQL.Append('where (RolledBack is null or RolledBack = '''') ');
  2857.     if cboAuditTable.ItemIndex > 0 then begin
  2858.       case cboAuditTable.ItemIndex of
  2859.         1: QTemp.SQL.Append('and L.TableName = ''Computers''');
  2860.         2: QTemp.SQL.Append('and L.TableName = ''Databases''');
  2861.         3: QTemp.SQL.Append('and L.TableName = ''Locations''');
  2862.         4: QTemp.SQL.Append('and L.TableName = ''Notes''');
  2863.         5: QTemp.SQL.Append('and L.TableName = ''SQLLogins''');
  2864.         6: QTemp.SQL.Append('and L.TableName = ''SQLServers''');
  2865.         7: QTemp.SQL.Append('and L.TableName = ''Tools''');
  2866.         8: QTemp.SQL.Append('and L.TableName = ''Users''');
  2867.       end;
  2868.     end;
  2869.     if cboAuditType.ItemIndex > 0 then begin
  2870.       case cboAuditType.ItemIndex of
  2871.         1: QTemp.SQL.Append('and L.Action = ''Inserted''');
  2872.         2: QTemp.SQL.Append('and L.Action = ''Modified''');
  2873.         3: QTemp.SQL.Append('and L.Action = ''Deleted''');
  2874.       end;
  2875.     end;
  2876.   QTemp.Open;
  2877.     F:= TGridFieldList.Create;
  2878.       F.AddField('ID',        'ID',         '', ffText,       0     ); //0
  2879.       F.AddField('RecordID',  'Record ID',  '', ffText,       0     ); //1
  2880.       F.AddField('LogDT',     'Log Time',   '', ffDateTime,   120   ); //2
  2881.       F.AddField('NName',     'User',       '', ffText,       100   ); //3
  2882.       F.AddField('Action',    'Action',     '', ffText,       65    ); //4
  2883.       F.AddField('TableName', 'Changed',    '', ffText,       100   ); //5
  2884.                                                //Added Column          //6
  2885.       QueryToStringGrid(QTemp, F, lstAudit, True);
  2886.     F.Free;
  2887.   QTemp.Close;
  2888.   lstAudit.ColCount:= 7;
  2889.   lstAudit.ColWidths[lstAudit.ColCount - 1]:= 200;
  2890.   lstAudit.Cells[lstAudit.ColCount - 1, 0]:= 'Record';
  2891.   for X:= 1 to lstAudit.RowCount do begin
  2892.     R:= StrToIntDef(lstAudit.Cells[0,X], -1);
  2893.     T:= lstAudit.Cells[5,X];
  2894.     RID:= StrToIntDef(lstAudit.Cells[1,X], -1);
  2895.     if (RID > 0) and (T <> '') then begin
  2896.       QTemp.SQL.Text:= 'select Caption from '+T+'_Audit where LogID = '+IntToStr(R);
  2897.       QTemp.SQL.Append('and LogState <> ''B''');
  2898.       QTemp.Open;
  2899.         lstAudit.Cells[6,X]:= QTemp.FieldByName('Caption').AsString;
  2900.       QTemp.Close;
  2901.     end;
  2902.   end;
  2903.  
  2904. end;
  2905.  
  2906. procedure TfrmMain.cmdRefreshAuditClick(Sender: TObject);
  2907. begin
  2908.   RefreshAudit;
  2909. end;
  2910.  
  2911. procedure TfrmMain.cmdViewAuditClick(Sender: TObject);
  2912. var
  2913.   AD: TfrmAuditDetail;
  2914. begin
  2915.   AD:= TfrmAuditDetail.Create(self);
  2916.     AD.AuditID:= StrToIntDef(lstAudit.Cells[0,lstAudit.Row], -1);
  2917.     if AD.AuditID > 0 then begin
  2918.       AD.Clear;
  2919.       AD.RefreshDetail;
  2920.       AD.ShowModal;
  2921.       RefreshAudit;
  2922.     end;
  2923.   AD.Free;
  2924. end;
  2925.  
  2926. procedure TfrmMain.cboAuditTableClick(Sender: TObject);
  2927. begin
  2928.   RefreshAudit;
  2929. end;
  2930.  
  2931. procedure TfrmMain.cboAuditTypeClick(Sender: TObject);
  2932. begin
  2933.   RefreshAudit;
  2934. end;
  2935.  
  2936. function PromptIP(IPAddress: TIPAddress): TIPAddress;
  2937. var
  2938.   F: TfrmEditIP;
  2939. begin
  2940.   F:= TfrmEditIP.Create(frmMain);
  2941.     Result:= TIPAddress(IPAddress);
  2942.     F.ShowModal;
  2943.     if F.ModalResult = mrOK then begin
  2944.       Result:= F.IP;
  2945.     end else begin
  2946.       Result:= TIPAddress(IPAddress);
  2947.     end;
  2948.   F.Free;
  2949. end;
  2950.  
  2951. procedure TfrmMain.RefreshVariables;
  2952. var
  2953.   Q: TADOQuery;
  2954.   X: Integer;
  2955.   V: TValue;
  2956. begin
  2957.   for X := 0 to lstVariables.Items.Count - 1 do
  2958.     lstVariables.Items.Objects[X].Free;
  2959.   lstVariables.Clear;
  2960.   Q:= TADOQuery.Create(nil);
  2961.   try
  2962.     Q.Connection:= DB;
  2963.     Q.SQL.Text:= 'select * from variables order by name';
  2964.     Q.Open;
  2965.       if not Q.IsEmpty then begin
  2966.         Q.First;
  2967.         while not Q.Eof do begin
  2968.           V:= TValue.Create;
  2969.             V.ID:= Q.FieldByName('ID').AsInteger;
  2970.             V.Caption:= Q.FieldByName('Name').AsString;
  2971.             V.Abbr:= Q.FieldByName('Value').AsString;
  2972.             V.Flt:= Q.FieldByName('Category').AsInteger;
  2973.           lstVariables.Items.AddObject(V.Caption+': '+V.Abbr, V);
  2974.           Q.Next;
  2975.         end;
  2976.       end;
  2977.     Q.Close;
  2978.   finally
  2979.     if Q.Active then Q.Close;
  2980.     Q.Free;
  2981.   end;
  2982.   txtVariableName.Enabled:= False;
  2983.   txtVariableValue.Enabled:= False;
  2984.   cmdAddVariable.Caption:= 'Add';
  2985.   cmdEditVariable.Caption:= 'Edit';
  2986.   cmdAddVariable.Enabled:= True;
  2987.  
  2988.   if lstVariables.Items.Count > 0 then begin
  2989.     cmdEditVariable.Enabled:= True;
  2990.     cmdDeleteVariable.Enabled:= True;
  2991.   end else begin
  2992.     cmdEditVariable.Enabled:= False;
  2993.     cmdDeleteVariable.Enabled:= False;
  2994.   end;
  2995. end;
  2996.  
  2997. procedure TfrmMain.RefreshServiceLog;
  2998. var
  2999.   Q: TADOQuery;
  3000. begin
  3001.   txtServiceLog.Clear;
  3002.   Q:= TADOQuery.Create(nil);
  3003.   try
  3004.     Q.Connection:= DB;
  3005.     Q.SQL.Text:= 'select * from servicelog where deleted <> 1 order by dt desc';
  3006.     Q.Open;
  3007.       if not Q.IsEmpty then begin
  3008.         Q.First;
  3009.         while not Q.Eof do begin
  3010.           txtServiceLog.Lines.Append(FormatDateTime('m/d/yy h:n:s.zzz ampm',Q.FieldByName('DT').AsDateTime)+' - '+
  3011.             Q.FieldByName('CompName').AsString+' - '+Q.FieldByName('Category').AsString+' : ');
  3012.           txtServiceLog.Lines.Append('   '+Q.FieldByName('Description').AsString);
  3013.           txtServiceLog.SelStart:= Length(txtServiceLog.Text) - 1;
  3014.           txtServiceLog.SelLength:= 1;
  3015.           txtServiceLog.SelStart:= Length(txtServiceLog.Text);
  3016.           Q.Next;
  3017.         end;
  3018.       end;
  3019.     Q.Close;
  3020.   finally
  3021.     Q.Free;
  3022.   end;
  3023. end;
  3024.  
  3025. procedure TfrmMain.RefreshServiceSettings;
  3026. var
  3027.   Q: TADOQuery;
  3028.   X: Integer;
  3029. begin
  3030.   txtServiceLog.Clear;
  3031.   Q:= TADOQuery.Create(nil);
  3032.   try
  3033.     Q.Connection:= DB;
  3034.     Q.SQL.Text:= 'select * from settings where setting in '+
  3035.       '(''DoRunService'',''DoCheckSources'',''DoCheckDatabases'',''DoCheckServers'',''DoCheckComputers'')';
  3036.     Q.Open;
  3037.       Q.First;
  3038.       while not Q.Eof do begin
  3039.         if Q.FieldByName('Setting').AsString = 'DoRunService' then begin
  3040.           if Q.FieldByName('Value').AsString = 'Y' then
  3041.             chkEnableService.Checked:= True
  3042.           else
  3043.             chkEnableService.Checked:= False;
  3044.         end;
  3045.         if Q.FieldByName('Setting').AsString = 'DoCheckSources' then begin
  3046.           if Q.FieldByName('Value').AsString = 'Y' then
  3047.             chkServiceVerifySources.Checked:= True
  3048.           else
  3049.             chkServiceVerifySources.Checked:= False;
  3050.         end;
  3051.         if Q.FieldByName('Setting').AsString = 'DoCheckDatabases' then begin
  3052.           if Q.FieldByName('Value').AsString = 'Y' then
  3053.             chkServiceVerifyDatabases.Checked:= True
  3054.           else
  3055.             chkServiceVerifyDatabases.Checked:= False;
  3056.         end;
  3057.         if Q.FieldByName('Setting').AsString = 'DoCheckServers' then begin
  3058.           if Q.FieldByName('Value').AsString = 'Y' then
  3059.             chkServiceVerifyServers.Checked:= True
  3060.           else
  3061.             chkServiceVerifyServers.Checked:= False;
  3062.         end;
  3063.         if Q.FieldByName('Setting').AsString = 'DoCheckComputers' then begin
  3064.           if Q.FieldByName('Value').AsString = 'Y' then
  3065.             chkServiceVerifyComputers.Checked:= True
  3066.           else
  3067.             chkServiceVerifyComputers.Checked:= False;
  3068.         end;
  3069.         Q.Next;
  3070.       end;
  3071.     Q.Close;
  3072.   finally
  3073.     Q.Free;
  3074.   end;
  3075. end;
  3076.  
  3077. procedure TfrmMain.SaveServiceSettings;
  3078. var
  3079.   Q: TADOQuery;
  3080. begin
  3081.   Q:= TADOQuery.Create(nil);
  3082.   try
  3083.     Q.Connection:= Self.DB;
  3084.     Q.SQL.Text:= 'select * from settings where setting in '+
  3085.       '(''DoRunService'',''DoCheckSources'',''DoCheckDatabases'',''DoCheckServers'',''DoCheckComputers'')';
  3086.     Q.Open;
  3087.       Q.First;
  3088.       while not Q.Eof do begin
  3089.         if Q.FieldByName('Setting').AsString = 'DoRunService' then begin
  3090.           Q.Edit;
  3091.             if Self.chkEnableService.Checked then
  3092.               Q['Value']:= 'Y'
  3093.             else
  3094.               Q['Value']:= 'N';
  3095.           Q.Post;
  3096.         end;
  3097.         if Q.FieldByName('Setting').AsString = 'DoCheckSources' then begin
  3098.           Q.Edit;
  3099.             if Self.chkServiceVerifySources.Checked then
  3100.               Q['Value']:= 'Y'
  3101.             else
  3102.               Q['Value']:= 'N';
  3103.           Q.Post;
  3104.         end;
  3105.         if Q.FieldByName('Setting').AsString = 'DoCheckDatabases' then begin
  3106.           Q.Edit;
  3107.             if Self.chkServiceVerifyDatabases.Checked then
  3108.               Q['Value']:= 'Y'
  3109.             else
  3110.               Q['Value']:= 'N';
  3111.           Q.Post;
  3112.         end;
  3113.         if Q.FieldByName('Setting').AsString = 'DoCheckServers' then begin
  3114.           Q.Edit;
  3115.             if Self.chkServiceVerifyServers.Checked then
  3116.               Q['Value']:= 'Y'
  3117.             else
  3118.               Q['Value']:= 'N';
  3119.           Q.Post;
  3120.         end;
  3121.         if Q.FieldByName('Setting').AsString = 'DoCheckComputers' then begin
  3122.           Q.Edit;
  3123.             if Self.chkServiceVerifyComputers.Checked then
  3124.               Q['Value']:= 'Y'
  3125.             else
  3126.               Q['Value']:= 'N';
  3127.           Q.Post;
  3128.         end;
  3129.         Q.Next;
  3130.       end;
  3131.     Q.Close;
  3132.   finally
  3133.     if Q.Active then
  3134.       Q.Close;
  3135.     Q.Free;
  3136.   end;
  3137. end;
  3138.  
  3139. procedure TfrmMain.RefreshUpdates;
  3140. var
  3141.   Q: TADOQuery;
  3142.   F: TGridFieldList;
  3143.   X: Integer;
  3144. begin
  3145.   Q:= TADOQuery.Create(nil);
  3146.   try
  3147.     Q.Connection:= Self.DB;
  3148.     Q.SQL.Text:= 'select u.*, s.NName as UN, ''Yes'' as Enabled from updates u';
  3149.     Q.SQL.Append('left join users s on s.id = u.UserID');
  3150.     Q.SQL.Append('where u.active = 1');
  3151.     Q.SQL.Append('Union All');
  3152.     Q.SQL.Append('select u.*, s.NName as UN, ''No'' as Enabled from updates u');
  3153.     Q.SQL.Append('left join users s on s.id = u.userid');
  3154.     Q.SQL.Append('where u.active = 0');
  3155.     Q.Open;
  3156.       Q.First;
  3157.       F:= TGridFieldList.Create;
  3158.       try
  3159.         F.AddField('ID',        'ID',     '', ffText,   40);
  3160.         F.AddField('ReleaseDT', 'Date',   '', ffDate,   70);
  3161.         F.AddField('UN',        'User',   '', ffText,   120);
  3162.         F.AddField('Enabled',   'Active', '', ffText,   50);
  3163.  
  3164.         QueryToStringGrid(Q, F, lstUpdates, True);
  3165.  
  3166.       finally
  3167.         F.Free;
  3168.       end;
  3169.     Q.Close;
  3170.  
  3171.   finally
  3172.     Q.Free;
  3173.   end;
  3174.   SelectUpdate(EditUpdate);
  3175.   lstUpdatesClick(Self);
  3176. end;
  3177.  
  3178. procedure TfrmMain.RefreshUpdate(UpdateID: Integer);
  3179. var
  3180.   Q: TADOQuery;
  3181. begin
  3182.   Q:= TADOQuery.Create(nil);
  3183.   try
  3184.     Q.Connection:= Self.DB;
  3185.     Q.SQL.Text:= 'select * from updates where ID = '+IntToStr(UpdateID);
  3186.     Q.Open;
  3187.       if not Q.IsEmpty then begin
  3188.         Q.First;
  3189.         if Q.FieldByName('Active').AsInteger = 1 then
  3190.           chkUpdateActive.Checked:= True
  3191.         else
  3192.           chkUpdateActive.Checked:= False;
  3193.         dtUpdateReleaseDate.DateTime:= Q.FieldByName('ReleaseDT').AsDateTime;
  3194.         lblUpdateID.Caption:= Q.FieldByName('ID').AsString;
  3195.  
  3196.         RefreshUpdateFiles(UpdateID);
  3197.       end else begin
  3198.         //None exists
  3199.  
  3200.       end;
  3201.     Q.Close;
  3202.  
  3203.   finally
  3204.     Q.Free;
  3205.   end;
  3206.  
  3207. end;
  3208.  
  3209. procedure TfrmMain.RefreshUpdateFiles(UpdateID: Integer);
  3210. var
  3211.   Q: TADOQuery;
  3212.   F: TGridFieldList;
  3213. begin
  3214.   Q:= TADOQuery.Create(nil);
  3215.   try
  3216.     Q.Connection:= Self.DB;
  3217.     Q.SQL.Text:= 'select * from UpdateFiles where UpdateID = '+IntToStr(UpdateID);
  3218.     Q.Open;
  3219.       F:= TGridFieldList.Create;
  3220.       try
  3221.         F.AddField('ID',          'ID',               '',   ffText,   40);
  3222.         F.AddField('Caption',     'Caption',          '',   ffText,   100);
  3223.         F.AddField('Filename',    'File Name',        '',   ffText,   100);
  3224.         F.AddField('SourcePath',  'Source Path',      '',   ffText,   200);
  3225.         F.AddField('DestPath',    'Destination Path', '',   ffText,   200);
  3226.  
  3227.         QueryToStringGrid(Q, F, lstUpdateFiles, True);
  3228.  
  3229.       finally
  3230.         F.Free;
  3231.       end;
  3232.     Q.Close;
  3233.   finally
  3234.     Q.Free;
  3235.   end;
  3236.   SelectUpdateFile(EditUpdateFile);
  3237.   lstUpdateFilesClick(Self);
  3238. end;
  3239.  
  3240. procedure TfrmMain.RefreshUpdateFile(FileID: Integer);
  3241. var
  3242.   Q: TADOQuery;
  3243. begin
  3244.   Q:= TADOQuery.Create(nil);
  3245.   try
  3246.     txtUpdateFileCaption.Clear;
  3247.     txtUpdateFileSourcePath.Clear;
  3248.     txtUpdateFileDestPath.Clear;
  3249.     txtUpdateFileFilename.Clear;
  3250.     txtUpdateFilePriority.Clear;
  3251.     Q.Connection:= Self.DB;
  3252.     Q.SQL.Text:= 'select * from UpdateFiles where ID = '+IntToStr(FileID);
  3253.     Q.Open;
  3254.       if not Q.IsEmpty then begin
  3255.         if Q.FieldByName('Active').AsInteger = 1 then
  3256.           chkUpdateFileActive.Checked:= True
  3257.         else
  3258.           chkUpdateFileActive.Checked:= False;
  3259.         txtUpdateFileCaption.Text:= Q.FieldByName('Caption').AsString;
  3260.         txtUpdateFileSourcePath.Text:= Q.FieldByName('SourcePath').AsString;
  3261.         txtUpdateFileDestPath.Text:= Q.FieldByName('DestPath').AsString;
  3262.         txtUpdateFileFilename.Text:= Q.FieldByName('Filename').AsString;
  3263.         txtUpdateFilePriority.Text:= IntToStr(Q.FieldByName('Priority').AsInteger);
  3264.       end;
  3265.     Q.Close;
  3266.   finally
  3267.     Q.Free;
  3268.   end;
  3269. end;
  3270.  
  3271. procedure TfrmMain.EnableUpdateEdit;
  3272. begin
  3273.   pUpdateDetails.Enabled:= True;
  3274.   lstUpdates.Enabled:= False;
  3275.   cmdNewUpdate.Enabled:= False;
  3276.   cmdEditUpdate.Enabled:= False;
  3277.   cmdReplicateUpdate.Enabled:= False;
  3278.   cmdNewUpdateFile.Enabled:= True;
  3279.   cmdEditUpdateFile.Enabled:= True;
  3280.   cmdDeleteUpdateFile.Enabled:= True;
  3281. end;
  3282.  
  3283. procedure TfrmMain.DisableUpdateEdit;
  3284. begin
  3285.   pUpdateDetails.Enabled:= False;
  3286.   lstUpdates.Enabled:= True;
  3287.   cmdNewUpdate.Enabled:= True;
  3288.   cmdEditUpdate.Enabled:= True;
  3289.   cmdReplicateUpdate.Enabled:= True;
  3290.   cmdNewUpdateFile.Enabled:= False;
  3291.   cmdEditUpdateFile.Enabled:= False;
  3292.   cmdDeleteUpdateFile.Enabled:= False;
  3293. end;
  3294.  
  3295. procedure TfrmMain.EnableUpdateFileEdit;
  3296. begin
  3297.   pUpdates.Enabled:= False;
  3298.   cmdNewUpdateFile.Enabled:= False;
  3299.   cmdEditUpdateFile.Enabled:= False;
  3300.   cmdDeleteUpdateFile.Enabled:= False;
  3301.   lstUpdateFiles.Enabled:= False;
  3302.   pUpdateFileDetails.Enabled:= True;
  3303. end;
  3304.  
  3305. procedure TfrmMain.DisableUpdateFileEdit;
  3306. begin
  3307.   pUpdates.Enabled:= True;
  3308.   cmdNewUpdateFile.Enabled:= True;
  3309.   cmdEditUpdateFile.Enabled:= True;
  3310.   cmdDeleteUpdateFile.Enabled:= True;
  3311.   lstUpdateFiles.Enabled:= True;
  3312.   pUpdateFileDetails.Enabled:= False;
  3313. end;
  3314.  
  3315. procedure TfrmMain.SelectUpdate(UpdateID: Integer);
  3316. var
  3317.   X: Integer;
  3318. begin
  3319.   if UpdateID = 0 then
  3320.     lstUpdates.Row:= 1
  3321.   else begin
  3322.     for X := 1 to lstUpdates.RowCount do begin
  3323.       if lstUpdates.Cells[0,X] = IntToStr(UpdateID) then begin
  3324.         lstUpdates.Row:= X;
  3325.         break;
  3326.       end;
  3327.     end;
  3328.   end;
  3329. end;
  3330.  
  3331. procedure TfrmMain.SelectUpdateFile(FileID: Integer);
  3332. begin
  3333.  
  3334. end;
  3335.  
  3336. procedure TfrmMain.ClearUpdateFile;
  3337. begin
  3338.   txtUpdateFileCaption.Clear;
  3339.   txtUpdateFileSourcePath.Clear;
  3340.   txtUpdateFileDestPath.Clear;
  3341.   txtUpdateFileFilename.Clear;
  3342.   txtUpdateFilePriority.Clear;
  3343.   chkUpdateFileActive.Checked:= True;
  3344. end;
  3345.  
  3346.  
  3347. //Finding size of taskbar
  3348.  
  3349. function FindTaskbarHeight: Integer;
  3350. var
  3351.   TBHandle: HWND;
  3352.   TBRect: TRect;
  3353. begin
  3354.   TBHandle := FindWindow('Shell_TrayWnd', '');
  3355.   if TBHandle = 0 then Result := 0 else
  3356.   begin
  3357.     GetWindowRect(TBHandle, TBRect);
  3358.     Result := TBRect.Bottom - TBRect.Top;
  3359.   end;
  3360. end;
  3361.  
  3362. //Width of clock area
  3363. //TBRect.Left
  3364. //not width
  3365. //Screen.Width - TBRect.Left
  3366. //x,y TBRect.Top TBRect.Left
  3367.  
  3368.  
  3369. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement