//Advanced Delphi Systems Code: ads_wbServer
{Copyright(c)2000 Advanced Delphi Systems

 Richard Maley
 Advanced Delphi Systems
 12613 Maidens Bower Drive
 Potomac, MD 20854 USA
 phone 301-840-1554
 maley@advdelphisys.com

 The code herein can be used or modified by anyone.  Please retain references
 to Richard Maley at Advanced Delphi Systems.  If you make improvements to the
 code please send your improvements to maley@advdelphisys.com so that the
 entire Delphi community can benefit.  All comments are welcome.

 Please note if you are viewing this Delphi unit as a web page all you have to
 do to turn it into a Delphi unit is save it with a ".pas" extension.  The
 html in the unit should not affect its performance.
}
unit ads_wbServer;

(*
UnitIndex Master Index Implementation Section Download Units
Description: ads_wbServer.pas
This unit contains the following routines.

AdvDelphiSysComment   CheckLoginDatabase   CleanUnEncryptedField   Counter   DeEncryptAndCleanField   DeEncryptString   DeEncryptValidate   DeleteItemsFromList   EncryptString   ER   FieldList   FieldsInit   FieldsUpdate   FieldTypeToStr   FieldValuesStrToLst   FileToStr   GetDBImageByRecno   GetEncryptedLoginID   GetEncryptedPwd   GetLoginID   GetPwd   GetRequestInfo   MakeAccessDenied   MakeBrowserPage   MakeDBNamesPage   MakeFieldNamesPage   MakeFormatPage   MakeLogin   MakeOptionsPage   MakePageFooter   MakePageHeader   MakeSaveAsServerFinishedPage  MakeSaveAsServerPage   MakeSearchPage   MakeTableNamesPage   MinMaxStrFieldTypes   PageHeader   PublishDebugData   RaiseError   ReplaceStringInString   SaveErrorLog   ShouldIGenList   StrToFieldType   SyncConfigParams   TWebServerDB.Database1Login   WriteDBImageToFile   WriteErrors  

*)
interface
uses
  Windows, Messages, SysUtils, Classes, HTTPApp, Graphics, DBTables, DB,
  FieldClass, ads_wbserver_util, dbctrls;

Type

TWebServerDB = Class(TDatabase)
  procedure Database1Login(Database: TDatabase; LoginParams: TStrings);
End;
  Procedure RaiseError(UnitName,ProcName:String;E : Exception);
  Procedure SaveErrorLog;
  procedure WriteDBImageToFile(
    Var DataSet  : TDataSet;
    FieldName    : String;
    FileName     : String);

  Function MakeSaveAsServerFinishedPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    Role        : String;
    LoadBalance : String;
    BufferSize  : String;
    FieldValues : String;
    SourceServer: String;
    ServerName  : String;
    lst         : TStrings
    ): String;

  Function MakeSaveAsServerPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    Role        : String;
    LoadBalance : String;
    BufferSize  : String;
    FieldValues : String;
    SourceServer: String;
    lst         : TStrings
    ): String;

  Function PublishDebugData(PageStr: String;Values: TWebRequest): String;

  Function Counter: String;

  Function FieldList(
    Request     : TWebRequest;
    FieldPrefix : String
    ): String;
  Function FieldValuesStrToLst(
    Var lst     : TStringList;
    FieldValues : String;
    ListName    : String): Boolean;
  Function MakeOptionsPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Button      : String;
    Values      : String;
    FieldValues : String
    ): String;

  Function MakeSearchPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Button      : String;
    Values      : String;
    FieldValues : String
    ): String;

  Function MakeFormatPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Button      : String;
    Values      : String;
    FieldValues : String
    ): String;



  Function StrToFieldType(FieldType : String): TFieldType;
  Function FieldTypeToStr(FieldType : TFieldType): String;
  Function MinMaxStrFieldTypes(FieldType : String): Boolean;

  Function FieldsUpdate(
    FieldDisplay : TStringList;
    FieldMax     : TStringList;
    FieldMin     : TStringList;
    FieldNames   : TStringList;
    FieldNumber  : TStringList;
    FieldOrder   : TStringList;
    FieldSize    : TStringList;
    FieldType    : TStringList;
    FieldVisible : TStringList;
    TableData    : TStringList;
    SaveToFile   : Boolean
    ): String;
  Function FieldsInit(
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Role        : String
    ): String;

  Function CheckLoginDatabase(
    DatabaseName : String;
    TableName    : String;
    LoadBalance  : String;
    BufferSize   : String
    ): Boolean;

  Function DeEncryptAndCleanField(
    Request: TWebRequest;
    Field  : String
    ): String;

  Function CleanUnEncryptedField(
    Request: TWebRequest;
    Field  : String
    ): String;

  Function MakeFieldNamesPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Button      : String;
    Values      : String;
    FieldValues : String
    ): String;

  Function MakeBrowserPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Role        : String;
    RecNo       : String;
    RecMax      : String;
    FieldList   : String;
    NavButton   : String;
    lst         : TStrings
    ): String;

  Function ShouldIGenList(var lst : TStringList): Boolean;

  Function DeleteItemsFromList(InputList : String): String;

  Function MakeLogin: String;
  
  Function PageHeader: String;

  Function AdvDelphiSysComment: String;

  Procedure FileToStr(
    Var Str  : String;
    FileName : String);

  Function GetRequestInfo(
    Request: TWebRequest;
    AsTable: Boolean): String;

  procedure GetDBImageByRecno(
    Sender       : TObject;
    Request      : TWebRequest;
    Response     : TWebResponse;
    var Handled  : Boolean);

  Function MakeTableNamesPage(
    ActionURL   : String;
    DatabaseName: String;
    LoadBalance : String;
    BufferSize  : String;
    lst         : TStrings
    ): String;

  Function MakeDBNamesPage(
    ActionURL   : String;
    LoadBalance : String;
    BufferSize  : String;
    lst         : TStrings
    ): String;

  Function GetLoginID(Request : TWebRequest): String;

  Function GetPwd(Request : TWebRequest): String;
  Function GetEncryptedLoginID(Request : TWebRequest): String;
  Function GetEncryptedPwd(Request : TWebRequest): String;

  Function EncryptString(sg : String): String;
  Function DeEncryptString(sg : String): String;
  Function MakePageHeader(
    HTMLMetaDataTitle    : String;
    HTMLMetaDataAuthor   : String;
    HTMLMetaDataKeywords : String;
    HTMLMetaDataDesc     : String;
    MainTitle            : String;
    SubTitle             : String;
    BackGround           : String;
    DebugData            : Boolean
    ): String;

  Function MakePageFooter: String;
  Function ReplaceStringInString(
    SourceString : String;
    OldString    : String;
    NewString    : String
    ): String;

  Procedure MakeAccessDenied;
  Procedure SyncConfigParams(
    var ConfigParam : String;
    sgConfigParam   : String);
  Function ER(
    ProcName : String;
    Group    : String;
    Var E    : Exception): String;

  Var
    ConfigParams              : TStringList;
    ConfigParamsWas           : String;
    ButtonShowDB              : String;
    ButtonShowSaveAsServer    : String;
    ButtonShowTable           : String;
    ButtonShowFields          : String;
    ButtonShowFilter          : String;
    DBLoadDatabaseName        : String;
    DBLoadFieldValues         : String;
    DBLoadRole                : String;
    DBLoadTableName           : String;
    DBSaveDatabaseName        : String;
    DBSaveFieldValues         : String;
    DBSaveRole                : String;
    DBSaveTableName           : String;
    DBValueDatabaseName       : String;
    DBValueFieldValues        : String;
    DBValueRole               : String;
    DBValueTableName          : String;
    DebugDataPublish          : String;
    Errors                    : TStringList;
    ErrorsSaveToFile          : String;
    ExecutableName            : String;
    ExecutablePath            : String;
    FileConfiguration         : String;
    FileHTMLPageFooter        : String;
    FileHTMLPageHeader        : String;
    FileListDelete            : String;
    FileListOfOnlyItems       : String;
    FileMetaDataDescription   : String;
    FileMetaDataKeywords      : String;
    HTMLHideSource            : String;
    HTMLHideString            : String;
    HTMLMetaDataAuthor        : String;
    HTMLMetaDataDesc          : String;
    HTMLMetaDataKeywords      : String;
    HTMLMetaDataTitle         : String;
    HTMLPageFooter            : String;
    HTMLPageHeader            : String;
    HTMLTable2CellPadding     : String;
    HTMLTable2CellSpacing     : String;
    HTMLTable2ColorBackGrd    : String;
    HTMLTable2ColorBorder     : String;
    HTMLTable2ColorFont       : String;
    HTMLTable2FontSize        : String;
    HTMLTable3CellPadding     : String;
    HTMLTable3CellSpacing     : String;
    HTMLTable3ColorBackGrd    : String;
    HTMLTable3ColorBorder     : String;
    HTMLTable3ColorFont       : String;
    HTMLTable3FontSize        : String;
    HTMLTableCellPadding      : String;
    HTMLTableCellSpacing      : String;
    HTMLTableColorBackGrd     : String;
    HTMLTableColorBorder      : String;
    HTMLTableColorFont        : String;
    HTMLTableFontSize         : String;
    HTMLTitleMain             : String;
    HTMLTitleMainColor        : String;
    HTMLTitleMainSize         : String;
    HTMLTitleSub              : String;
    HTMLTitleSubColor         : String;
    HTMLTitleSubSize          : String;
    ListOfItemsToDelete       : String;
    ListOfOnlyDisplayItems    : String;
    MeterCounterBold          : String;
    MeterCounterColorBackGrd  : String;
    MeterCounterColorBorder   : String;
    MeterCounterColorFont     : String;
    MeterCounterFontSize      : String;
    MeterCounterItalics       : String;
    MeterCounterShow          : String;
    MeterDateBold             : String;
    MeterDateColorBackGrd     : String;
    MeterDateColorBorder      : String;
    MeterDateColorFont        : String;
    MeterDateFontSize         : String;
    MeterDateItalics          : String;
    MeterDateShow             : String;
    MeterTimeBold             : String;
    MeterTimeColorBackGrd     : String;
    MeterTimeColorBorder      : String;
    MeterTimeColorFont        : String;
    MeterTimeFontSize         : String;
    MeterTimeItalics          : String;
    MeterTimeShow             : String;
    sgBoolean                 : String;
    URLAction                 : String;
    URLAction2                : String;
    URLAction3                : String;
    URLAction4                : String;
    URLBackground             : String;
    URLImageTop               : String;
    URLScriptDir              : String;
    GlobalLogErrors           : Boolean;
    GlobalErrorLog            : TStringList;
    RaiseErrors               : Boolean;

implementation


uses JPeg;
const UnitName = 'ads_wbServer';

//
Unit Description UnitIndex Master Index
Procedure RaiseError(UnitName,ProcName:String;E : Exception);
Begin
  If GlobalLogErrors Then
    GlobalErrorLog.Add(FormatDateTime('yyddmmhhnnss',now())+' '+UnitName+'.'+Procname+' error: '+E.Message);
  If RaiseErrors     Then Raise Exception.Create(UnitName+'.'+Procname+' error: '+E.Message);
End;

//
Unit Description UnitIndex Master Index
Procedure SaveErrorLog;
Var
  lst       : TStringList;
  inCounter : Integer;
  ErrorFile : String;
  ProcName  : String;
begin
  ProcName := 'SaveErrorLog'; Try
  lst := TStringList.create();
  Try
    lst.Clear;
    ErrorFile := ExecutablePath+Copy(ExecutableName,1,Length(ExecutableName)-3)+'err';
    If FileExists(ErrorFile) Then
      lst.LoadFromFile(ErrorFile);
    GlobalErrorLog.SetText(PChar(GlobalErrorLog.Text+lst.Text));
    GlobalErrorLog.Sorted := True;
    GlobalErrorLog.Sorted := False;
    lst.Clear;
    For inCounter := 0 To GlobalErrorLog.Count - 1 Do
    Begin
      lst.Add(GlobalErrorLog[inCounter]);
    End;
    If lst.Count > 0 Then lst.SaveToFile(ErrorFile);
  Finally
    lst.Free;
  End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
procedure TWebServerDB.Database1Login(Database: TDatabase;
  LoginParams: TStrings);
Var
  ProcName : String;
begin
  ProcName := 'TWebServerDB.Database1Login'; Try
  LoginParams.Clear;
  LoginParams.Add('USER NAME='+Params.Values['USER NAME']);
  LoginParams.Add('PASSWORD=' +Params.Values['PASSWORD']);
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
end;

//
Unit Description UnitIndex Master Index
Function DeEncryptValidate(InputString: ShortString): String;
Var
  NewString: String;
  L        : Integer;
  i        : Integer;
  C        : Char;
  ProcName : String;
Begin
  Result    := InputString;
  ProcName := 'DeEncryptValidate'; Try
  NewString := '';
  L         := Length(InputString);
  For i:= 1 To L Do
  Begin
    C := InputString[i];
    Case C of
    '0' : NewString := NewString + C;
    '1' : NewString := NewString + C;
    '2' : NewString := NewString + C;
    '3' : NewString := NewString + C;
    '4' : NewString := NewString + C;
    '5' : NewString := NewString + C;
    '6' : NewString := NewString + C;
    '7' : NewString := NewString + C;
    '8' : NewString := NewString + C;
    '9' : NewString := NewString + C;
    End;
  End;
  Result    := NewString;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function ER(
  ProcName : String;
  Group    : String;
  Var E    : Exception): String;
Var
  sgRec : String;
  dt    : TDateTime;
  Filler: String;
Begin
  Filler := '                                                                 ';
  dt := now();
  sgRec := FormatDateTime('yymmdd',dt);
  sgRec := sgRec + FormatFloat('.0000000000',dt)+' ';
  ProcName := ProcName + Filler;
  Group    := Group + Filler;
  sgRec := sgRec + Copy(ProcName, 1, 35) + ' ';
  sgRec := sgRec + Copy(Group,1,25) + ' ';
  sgRec := sgRec + E.Message;
  Result :=
    ''+
    ''+
    '
'+ '

'+ '

ERROR MESSAGE

'+ '
'+ sgRec+ ''+ ''; If ErrorsSaveToFile = 'TRUE' Then Errors.Add(sgRec); End; //
Unit Description UnitIndex Master Index
Procedure WriteErrors;
Var
  lst      : TStringList;
  FileName : String;
  ProcName : String;
Begin
  ProcName := 'WriteErrors'; Try
  If ErrorsSaveToFile <> 'TRUE' Then Exit;
  FileName := ExecutablePath+'Errors.txt';
  If FileExists(FileName) Then
  Begin
    lst := TStringList.Create();
    Try
      lst.LoadFromFile(FileName);
      lst.SetText(PChar(lst.Text+Errors.Text));
      lst.Sorted := True;
      lst.SaveToFile(FileName);
    Finally
      lst.Free;
    End;
  End
  Else
  Begin
    Errors.SaveToFile(FileName);
  End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function GetRequestInfo(
  Request: TWebRequest;
  AsTable: Boolean): String;
Var
  lst          : TStringList;
  CommentStart : String;
  CommentEnd   : String;
  TableStart   : String;
  TableEnd     : String;
  RowStart     : String;
  RowEnd       : String;
  CellStart    : String;
  CellEnd      : String;
  inCounter    : Integer;
  inPos        : Integer;
  ProcName     : String;
Begin
  ProcName := 'GetRequestInfo'; Try
  If AsTable Then
  Begin
    CommentStart := '';
    CommentEnd   := '';
    TableStart   := '';
    TableEnd     := '
'; RowStart := ''; RowEnd := ''; CellStart := ''; CellEnd := ''; End Else Begin CommentStart := ''; TableStart := ''; TableEnd := ''; RowStart := ''; RowEnd := ''; CellStart := ''; CellEnd := ''; End; lst := TStringList.Create; Try With lst Do Begin Clear; Add(CommentStart+'

'+CommentEnd); Add(CommentStart+'Requestor Data'+CommentEnd); Add(CommentStart+'
'+CommentEnd); Add(CommentStart+TableStart+CommentEnd); Add(CommentStart+RowStart+CellStart+'Property' +CellEnd+CellStart + 'Value'+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Method' +CellEnd+CellStart + Request.Method+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ProtocolVersion'+CellEnd+CellStart + Request.ProtocolVersion+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'URL' +CellEnd+CellStart + Request.URL+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Query' +CellEnd+CellStart + Request.Query+CellEnd+RowEnd+CommentEnd); If Request.Query <> '' Then Begin For inCounter := 0 To Request.QueryFields.Count - 1 Do Begin Add( CommentStart+RowStart+CellStart+'QueryFields['+ IntToStr(inCounter)+']' +CellEnd+CellStart + Request.QueryFields[inCounter]+CellEnd+RowEnd+CommentEnd); inPos := Pos('LoadBalance',Request.QueryFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.QueryFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'QueryFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'LoadBalance='+ DeEncryptString(Copy(Request.QueryFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; inPos := Pos('BufferSize',Request.QueryFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.QueryFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'QueryFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'BufferSize='+ DeEncryptString(Copy(Request.QueryFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; End; End; Add(CommentStart+RowStart+CellStart+'PathInfo' +CellEnd+CellStart + Request.PathInfo+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'PathTranslated' +CellEnd+CellStart + Request.PathTranslated+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Authorization' +CellEnd+CellStart + Request.Authorization+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'CacheControl' +CellEnd+CellStart + Request.CacheControl+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Cookie' +CellEnd+CellStart + Request.Cookie+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Date' +CellEnd+CellStart + FormatDateTime ('mmm dd, yyyy hh:mm', Request.Date)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Accept' +CellEnd+CellStart + Request.Accept+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'From' +CellEnd+CellStart + Request.From+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Host' +CellEnd+CellStart + Request.Host+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'IfModifiedSince'+CellEnd+CellStart + FormatDateTime ('mmm dd, yyyy hh:mm', Request.IfModifiedSince)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Referer' +CellEnd+CellStart + Request.Referer+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'UserAgent' +CellEnd+CellStart + Request.UserAgent+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentEncoding'+CellEnd+CellStart + Request.ContentEncoding+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentType' +CellEnd+CellStart + Request.ContentType+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentLength' +CellEnd+CellStart + IntToStr(Request.ContentLength)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentVersion' +CellEnd+CellStart + Request.ContentVersion+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Content' +CellEnd+CellStart + Request.Content+CellEnd+RowEnd+CommentEnd); If Request.Content <> '' Then Begin For inCounter := 0 To Request.ContentFields.Count - 1 Do Begin Add( CommentStart+RowStart+CellStart+'ContentFields['+ IntToStr(inCounter)+']' +CellEnd+CellStart + Request.ContentFields[inCounter]+CellEnd+RowEnd+CommentEnd); inPos := Pos('LoadBalance',Request.ContentFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.ContentFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'ContentFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'LoadBalance='+ DeEncryptString(Copy(Request.ContentFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; inPos := Pos('BufferSize',Request.ContentFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.ContentFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'ContentFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'BufferSize='+ DeEncryptString(Copy(Request.ContentFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; End; End; Add(CommentStart+RowStart+CellStart+'Connection' +CellEnd+CellStart + Request.Connection+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'DerivedFrom' +CellEnd+CellStart + Request.DerivedFrom+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Expires' +CellEnd+CellStart + FormatDateTime ('mmm dd, yyyy hh:mm', Request.Expires)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Title' +CellEnd+CellStart + Request.Title+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'RemoteAddr' +CellEnd+CellStart + Request.RemoteAddr+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'RemoteHost' +CellEnd+CellStart + Request.RemoteHost+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ScriptName' +CellEnd+CellStart + Request.ScriptName+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ServerPort' +CellEnd+CellStart + IntToStr(Request.ServerPort)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+TableEnd+CommentEnd); End; lst.Add(CommentStart+'Start Configuration file Entries'+CommentEnd); For inCounter := 0 To ConfigParams.Count - 1 Do Begin lst.Add(CommentStart+ConfigParams[inCounter]+CommentEnd); End; lst.Add(CommentStart+'End Configuration file Entries'+CommentEnd); Result := lst.text; Finally lst.Free; End; Except On E : Exception Do RaiseError(UnitName,ProcName,E); End; End; //

Unit Description UnitIndex Master Index
procedure GetDBImageByRecno(
  Sender       : TObject;
  Request      : TWebRequest;
  Response     : TWebResponse;
  var Handled  : Boolean);
var
  Jpeg         : TJpegImage;
  MemoryStream : TMemoryStream;
  Picture      : TPicture;
  DatabaseName : String;
  TableName    : String;
  FieldName    : String;
  RecNo        : String;
  RecNum       : Integer;
  inCounter    : Integer;
  qry          : TQuery;
  Graphic      : TGraphicField;
  ProcName     : String;
begin
  ProcName := 'GetDBImageByRecno';
  Try
    qry     := TQuery.Create(nil);
    DatabaseName := Request.QueryFields.Values['DatabaseName'];
    TableName    := Request.QueryFields.Values['TableName'];
    FieldName    := Request.QueryFields.Values['FieldName'];
    RecNo        := Request.QueryFields.Values['RecNo'];
    Try
      RecNum       := StrToInt(RecNo);
    Except
      RecNum := 1;
    End;
    Graphic := TGraphicField.Create(nil);
    Jpeg    := TJpegImage.Create;
    Try
      qry.Active := False;
      qry.DatabaseName := DatabaseName;
      qry.RequestLive  := False;
      qry.Sql.Clear;
      qry.Sql.Add('Select');
      qry.Sql.Add(FieldName);
      qry.Sql.Add('From');
      If Pos('.DB',UpperCase(TableName)) > 0 Then
      Begin
        qry.Sql.Add('"'+TableName+'"');
      End
      Else
      Begin
        qry.Sql.Add(TableName);
      End;

      Graphic.FieldName := FieldName;
      Graphic.BlobType  := ftGraphic;

      //qry.sql.add('/* '+'RecNo='       +RecNo           +' */');
      //qry.sql.add('/* '+'RecNum='      +IntToStr(RecNum)+' */');
      //qry.sql.add('/* '+'DatabaseName='+Databasename    +' */');
      //qry.sql.add('/* '+'TableName='   +Tablename       +' */');
      //qry.sql.add('/* '+'FieldName='   +FieldName       +' */');
      Graphic.DataSet   := qry;
      qry.Active := True;
      qry.First;
      For inCounter := 1 To RecNum Do
      Begin
        If inCounter = RecNum Then
        Begin
          Break;
        End
        Else
        Begin
          qry.Next;
        End;
      End;
      Picture           := TPicture.Create;
      Picture.Assign(Graphic);
      qry.Active := False;
      Jpeg.Assign(Picture.Graphic);
      MemoryStream := TMemoryStream.Create;
      Try
        Jpeg.SaveToStream(MemoryStream);
        MemoryStream.Position  := 0;
        Response.ContentType   := 'image/jpeg';
        Response.ContentStream := MemoryStream;
        Response.SendResponse;
      Finally
        Picture.Free;
        MemoryStream.Free;
      End;
      Handled := True;
    Finally
      Jpeg.Free;
      qry.Free;
      Graphic.Free;
    End;
  Except
    On E : Exception Do
    Begin
      RaiseError(UnitName,ProcName,E);
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function EncryptString(sg : String): String;
Var
  inCounter : Integer;
  inDOY     : Integer;
  flDOY     : Double;
  dtToday   : TDateTime;
  dtFirst   : TDateTime;
  Str       : String;
  sgChar    : String;
  pcChar    : PChar;
  chChar    : Char;
  inChar    : Integer;
  sgInChar  : String;
  insgLen   : Integer;
  inCharLen : Integer;
  ProcName  : String;
Begin
  ProcName  := 'EncryptString';
  Try
    dtToday   := now();
    dtFirst   := StrToDateTime(FormatDateTime('1/1/yyyy',dtToday));
    flDOY     := dtToday - dtFirst + 1;
    inDOY     := StrToInt(FormatFloat('#0',flDOY));
    sgChar    := '';
    sgInChar  := '';
    Str       := '';
    insgLen   := Length(sg);
    For inCounter := 1 To insgLen Do
    Begin
      sgChar   := Copy(sg,inCounter,1);
      pcChar   := PChar(sgChar);
      chChar   := pcChar[0];
      inChar   := Ord(chChar);
      If inChar = 10 Then Continue;
      If inChar = 13 Then Continue;
      If inChar =  9 Then Continue;
      inChar   := inChar + inDOY;
      If Odd(inCounter) Then
      Begin
        inChar := inChar - inCounter;
      End
      Else
      Begin
        inChar := inChar + inCounter;
      End;
      sgInChar := IntToStr(inChar);
      inCharLen:= Length(sgInChar);
      Case inCharLen Of
      0 : sgInChar := '000'+sgInChar;
      1 : sgInChar :=  '00'+sgInChar;
      2 : sgInChar :=   '0'+sgInChar;
      3 : sgInChar :=    ''+sgInChar;
      End;
      Str := Str + sgInChar;
    End;
    Str := Str + '677968';

    Str := Str + IntToStr(inDOY + 486772);
    Str := Str + IntToStr(inDOY + 967465);
    Str := Str + IntToStr(inDOY + 601754);
    Str := Str + IntToStr(inDOY + 629573);
    Str := Str + IntToStr(inDOY + 566285);
    Str := Str + IntToStr(inDOY + 835649);
    Str := Str + IntToStr(inDOY + 907835);
    Str := Str + IntToStr(inDOY + 541653);
    Str := Str + IntToStr(inDOY + 905906);
    Str := Str + IntToStr(inDOY + 756907);
    Str := Str + IntToStr(inDOY + 835665);
   
    Str := Copy(Str,1,66);
    Result := Str;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function DeEncryptString(sg : String): String;
Var
  inCounter : Integer;
  inDOY     : Integer;
  flDOY     : Double;
  dtToday   : TDateTime;
  dtFirst   : TDateTime;
  Str       : String;
  sgChar    : String;
  inChar    : Integer;
  sgInChar  : String;
  ProcName  : String;
  inPos     : Integer;
  inMax     : Integer;
Begin
  ProcName  := 'DeEncryptString';
  Try
    sg := DeEncryptValidate(sg);
    inChar    := 0;
    inPos     := Pos('677968',sg);
    If inPos < 4 Then
    Begin
      Result := '';
      Exit;
    End;
    sg := Copy(sg,1,inPos-1);
    dtToday   := now();
    dtFirst   := StrToDateTime(FormatDateTime('1/1/yyyy',dtToday));
    flDOY     := dtToday - dtFirst + 1;
    inDOY     := StrToInt(FormatFloat('#0',flDOY));
    sgChar    := '';
    sgInChar  := '';
    Str       := '';
    inMax     := Length(sg) div 3;
    For inCounter := 1 To inMax Do
    Begin
      sgInChar := Copy(sg,1,3);
      sg       := Copy(sg,4,60);
      Try
        inChar   := StrToInt(sgInChar)-inDOY;
      Except
        Continue;
      End;
      If Odd(inCounter) Then
      Begin
        inChar := inChar + inCounter;
      End
      Else
      Begin
        inChar := inChar - inCounter;
      End;
      Str      := Str + Chr(inChar);
      If Length(sg) = 0 Then Break;
    End;
    Result := Str;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;  
End;

//
Unit Description UnitIndex Master Index
Function MakeTableNamesPage(
  ActionURL   : String;
  DatabaseName: String;
  LoadBalance : String;
  BufferSize  : String;
  lst         : TStrings
  ): String;
var
  TableNames: TStringList;
  i         : Integer;
  ProcName  : String;
  Page      : TStringList;
  DBName    : TWebServerDB;
  TableName : String;
begin
  ProcName  := 'MakeTableNamesPage';
  Try
    DatabaseName := DeEncryptString(EncryptString(Trim(DatabaseName)));
    ActionURL    := DeEncryptString(EncryptString(Trim(ActionURL)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    Page         := TStringList.Create();
    TableNames   := TStringList.Create;
    DBName       := TWebServerDB.Create(nil);
    TableName    := lst.Values['Table'];
    Try
      If ShouldIGenList(TableNames) Then
      Begin
        DBName.LoginPrompt    := False;
        DBName.DatabaseName   := 'DBName';
        DBName.AliasName      := DatabaseName;
        DBName.KeepConnection := True;
        DBName.Params.Clear;
        DBName.Params.Add('USER NAME='+DeEncryptString(LoadBalance));
        DBName.Params.Add('PASSWORD='+DeEncryptString(BufferSize));
        Try
          DBName.Connected := True;
        Except
          On E : Exception Do
          Begin
            Result := ER(ProcName,'Connection',E);
            Exit;
          End;
        End;

        TableNames.Sorted := True;

        DBname.Session.GetTableNames(
            'DBName',
            '',
            True,
            False,
            TableNames);
        TableNames.SetText(PChar(DeleteItemsFromList(TableNames.Text)));
      End;
      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      //Page.Add('');
      //Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');


      Page.Add('
'); Page.Add(''); Page.Add(DatabaseName+' Database'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Please select a database table.'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); //Page.Add(''); //Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally Page .Free; TableNames.Free; DBName .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function MakePageHeader(
  HTMLMetaDataTitle    : String;
  HTMLMetaDataAuthor   : String;
  HTMLMetaDataKeywords : String;
  HTMLMetaDataDesc     : String;
  MainTitle            : String;
  SubTitle             : String;
  BackGround           : String;
  DebugData            : Boolean
  ): String;
Var
  Page     : TStringList;
  ProcName : String;
  inCounter: Integer;
Begin
  ProcName := 'MakePageHeader';
  Try
    Page   := TStringList.Create();
    Try
      Page.Clear;
      Page.Add('');
      Page.Add('');
      sgBoolean :=  HTMLHideSource;
      If (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
      Begin
        //sgBoolean :=  DebugDataPublish;
        //If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
        //Begin
          //sgBoolean := '';
          Page.Add('');
        //End;
      End;
      Page.Add('');
      Page.Add('');
      Page.Add(''+HTMLMetaDataTitle+'');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add(' '' Then Page.Add(' BACKGROUND="'+Background+'"');
      Page.Add('>');
      If URLImageTop <> '' Then Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
        Page.Add('');
        Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); If ExecutableName = 'LOGIN.EXE' Then Begin Page.Add(''); Page.Add(''); Page.Add('
'); End Else Begin Page.Add(''); End; Page.Add('
'); If (Trim(MainTitle) <> '') Or (Trim(SubTitle) <> '') Then Begin Page.Add(''); If Trim(MainTitle) <> '' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; If Trim(SubTitle) <> '' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(MainTitle); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(SubTitle); Page.Add(''); Page.Add('
'); End; Result := Page.Text; Finally Page.Free; End; Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //Unit Description UnitIndex Master Index
Function MakePageFooter: String;
Var
  Page     : TStringList;
  ProcName : String;
Begin
  ProcName := 'MakePageFooter';
  Try
    If Trim(HTMLPageFooter) = '' Then
    Begin
      Page   := TStringList.Create();
      Try
        Page.Clear;
        Page.Add('');

        If (Copy(UpperCase(MeterCounterShow),1,1) = 'T') Or
           (Copy(UpperCase(MeterDateShow)   ,1,1) = 'T') Or
           (Copy(UpperCase(MeterTimeShow)   ,1,1) = 'T')
        Then
        Begin
          Page.Add('');
          Page.Add('');
          If Copy(UpperCase(MeterCounterShow),1,1) = 'T' Then
          Begin
            Page.Add('');
          End;
          If Copy(UpperCase(MeterDateShow),1,1) = 'T' Then
          Begin
            Page.Add('');
          End;
          If Copy(UpperCase(MeterTimeShow),1,1) = 'T' Then
          Begin
            Page.Add('');
          End;
          Page.Add('');
          Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); If Copy(UpperCase(MeterCounterBold),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterCounterItalics),1,1) = 'T' Then Page.Add(''); Page.Add(''); Page.Add(Counter); Page.Add(''); If Copy(UpperCase(MeterCounterItalics),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterCounterBold),1,1) = 'T' Then Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); If Copy(UpperCase(MeterDateBold),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterDateItalics),1,1) = 'T' Then Page.Add(''); Page.Add(''); Page.Add(FormatDateTime('mm/dd/yyyy',Now())); Page.Add(''); If Copy(UpperCase(MeterDateItalics),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterDateBold),1,1) = 'T' Then Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); If Copy(UpperCase(MeterTimeBold),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterTimeItalics),1,1) = 'T' Then Page.Add(''); Page.Add(''); Page.Add(FormatDateTime('hh:nn:ss',Now())); Page.Add(''); If Copy(UpperCase(MeterTimeItalics),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterTimeBold),1,1) = 'T' Then Page.Add(''); Page.Add('
'); Page.Add('
'); End; Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); If Copy(UpperCase(DebugDataPublish),1,1) = 'T' Then Begin Page.Add(''); End; Result := Page.Text; Finally Page.Free; End; End Else Begin Result := HTMLPageFooter; End; Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function ReplaceStringInString(
  SourceString : String;
  OldString    : String;
  NewString    : String
  ): String;
Var
  inPos    : Integer;
  ProcName : String;
Begin
  ProcName := 'ReplaceStringInString';
  Try
    inPos := Pos(OldString,SourceString);
    If inPos < 1 Then
    Begin
      Result := SourceString;
      Exit;
    End;
    Result :=
      Copy(SourceString,1,inPos-1)+
      NewString+
      Copy(
        SourceString,
        (inPos+Length(OldString)),
        (Length(SourceString)-inPos-Length(OldString)+1));
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeDBNamesPage(
  ActionURL   : String;
  LoadBalance : String;
  BufferSize  : String;
  lst         : TStrings
  ): String;
var
  AliasNames: TStringList;
  inCounter : Integer;
  ProcName  : String;
  Page      : TStringList;
  Session   : TSession;
  Alias     : String;
begin
  ProcName  := 'MakeDBNamesPage';
  Try
    ActionURL    := DeEncryptString(EncryptString(Trim(ActionURL)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    AliasNames   := TStringList.Create();
    Page         := TStringList.Create();
    Session      := TSession.Create(nil);
    Alias        := lst.Values['Alias'];
    AliasNames.Sorted := True;
    Try
      Session.SessionName := 'Session';
      Page.SetText(PChar(PageHeader));
      If ShouldIGenList(AliasNames) Then
      Begin
        With Session Do
        Begin
          Active := True;
          GetAliasNames(AliasNames);
          Active := False
        End;
        AliasNames.SetText(PChar(DeleteItemsFromList(AliasNames.Text)));
      End;
      Page.Add('
'); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); If (DBLoadDatabaseName = 'TRUE') And (DBValueDatabaseName <> '') Then Begin Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Database Selection'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Please select a database.'); Page.Add(''); Page.Add('
'); End Else Begin Page.Add('
'); End; Page.Add(''); Page.Add('
' ); Page.Add('
' ); Page.SetText(PChar(Page.Text+MakePageFooter)); Result := Page.Text; Finally AliasNames.Free; Page .Free; Session .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function GetLoginID(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetLoginID';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := DeEncryptString(Request.QueryFields.Values['LoadBalance']);
    End
    Else
    Begin
      Result   := DeEncryptString(Request.ContentFields.Values['LoadBalance']);
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function GetEncryptedLoginID(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetEncryptedLoginID';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := Request.QueryFields.Values['LoadBalance'];
    End
    Else
    Begin
      Result   := Request.ContentFields.Values['LoadBalance'];
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function GetEncryptedPwd(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetEncryptedPwd';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := Request.QueryFields.Values['BufferSize'];
    End
    Else
    Begin
      Result   := Request.ContentFields.Values['BufferSize'];
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;



//
Unit Description UnitIndex Master Index
Function GetPwd(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetPwd';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := DeEncryptString(Request.QueryFields.Values['BufferSize']);
    End
    Else
    Begin
      Result   := DeEncryptString(Request.ContentFields.Values['BufferSize']);
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Procedure MakeAccessDenied;
Var
  lst      : TStringList;
  ProcName : String;
Begin
  ProcName := 'MakeAccessDenied';
  Try
    If FileExists(ExecutablePath+'index.htm')
       And
       FileExists(ExecutablePath+'index.htm')
    Then Exit;
    lst := TStringList.Create();
    Try
      lst.Clear;
      lst.Add('');
      lst.Add('');
      lst.Add('
'); lst.Add('

'); lst.Add('ACCESS DENIED'); lst.Add('

'); lst.Add('
'); lst.Add(''); lst.Add(''); lst.SaveToFile(ExecutablePath+'index.htm'); lst.SaveToFile(ExecutablePath+'index.html'); Finally lst.Free; End; Except On E : Exception Do Begin ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Procedure SyncConfigParams(
  var ConfigParam : String;
  sgConfigParam   : String);
Var
  ProcName  : String;
  inPos     : Integer;
  inCounter : Integer;
  Found     : Boolean;
Begin
  ProcName := 'SyncConfigParams';
  Try
    If FileExists(FileConfiguration) Then
    Begin
      If ConfigParams.Values[sgConfigParam]
         <>                    ConfigParam       Then
                               ConfigParam :=
         ConfigParams.Values[sgConfigParam];
    End;
    Found := False;
    For inCounter := 0 To ConfigParams.Count - 1 Do
    Begin
      inPos := Pos(UpperCase(sgConfigParam)+'=',UpperCase(ConfigParams[inCounter]));
      If inPos > 0 Then
      Begin
        Found := True;
        Break;
      End;
    End;
    If Not Found Then ConfigParams.Add(sgConfigParam+'='+ConfigParam);
  Except
    On E : Exception Do
    Begin
      RaiseError(UnitName,ProcName,E);
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Procedure FileToStr(
  Var Str  : String;
  FileName : String);
Var
  lst      : TStringList;
  ProcName : String;
Begin
  ProcName := 'FillStringFromFile';
  Try
    If FileName = '' Then Exit;
    lst := TStringList.Create();
    Try
      lst.Clear;
      If FileExists(FileName) Then
      Begin
        lst.LoadFromFile(FileName);
      End
      Else
      Begin
        Exit;
      End;
      Str := lst.Text;
    Finally
      lst.Free;
    End;
  Except
    On E : Exception Do
    Begin
      RaiseError(UnitName,ProcName,E);
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function PageHeader: String;
Var
  ProcName : String;
Begin
  ProcName := 'PageHeader';
  Try
    If Trim(HTMLPageHeader) = '' Then
    Begin
      Result :=
        MakePageHeader(
          HTMLMetaDataTitle,       //HTMLMetaDataTitle    : String;
          HTMLMetaDataAuthor,      //HTMLMetaDataAuthor  : String;
          FileMetaDataKeywords,    //FileMetaDataKeywords : String;
          HTMLMetaDataDesc,        //HTMLMetaDataDesc : String;
          HTMLTitleMain,           //MainTitle        : String;
          HTMLTitleSub,            //SubTitle         : String;
          URLBackground,           //BackGround       : String;
          (DebugDataPublish='TRUE')//DebugData        : Boolean;
          );                       //): String;
    End
    Else
    Begin
      Result := AdvDelphiSysComment+HTMLPageHeader;
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeLogin: String;
Var
  lst      : TStringList;
  ProcName : String;
begin
  ProcName := 'MakeLogin';
  Try
    lst := TStringList.Create();
    Try
      lst.Clear;
      lst.SetText(PChar(PageHeader));
      lst.Add('');
      lst.Add('');
      lst.Add('');
      lst.Add('');
      lst.Add('
'); lst.Add('
'); lst.Add('
'); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('
'); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('
Security Login
'); lst.Add('
 
Please enter your Login ID and Password
 
 
 Login ID  
 
 Password '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('  '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('  
 
'); lst.Add('
'); lst.Add('
'); lst.Add('
'); lst.SetText(PChar(lst.Text+MakePageFooter)); Result := lst.Text; Finally lst.Free; End; Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; end; //
Unit Description UnitIndex Master Index
Function DeleteItemsFromList(InputList : String): String;
Var
  ProcName  : String;
  lstSource : TStringList;
  lstDelete : TStringList;
  lstOut    : TStringList;
  inCounter : Integer;
Begin
  ProcName := 'DeleteItemsFromList';
  If Trim(ListOfItemsToDelete) = '' Then
  Begin
    Result := InputList;
    Exit;
  End;
  If Trim(ListOfOnlyDisplayItems) <> '' Then
  Begin
    Result := InputList;
    Exit;
  End;
  Try
    lstSource := TStringList.Create();
    lstDelete := TStringList.Create();
    lstOut    := TStringList.Create();
    Try
      lstSource.SetText(PChar(InputList));
      lstDelete.SetText(PChar(ListOfItemsToDelete));
      lstOut.Clear;
      For inCounter := 0 To lstSource.Count -1 Do
      Begin
        If lstDelete.IndexOf(lstSource[inCounter]) < 0 Then
        Begin
          lstOut.Add(lstSource[inCounter]);
        End;
      End;
      Result := lstOut.Text;
    Finally
      lstSource.Free;
      lstDelete.Free;
      lstOut   .Free;
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function ShouldIGenList(var lst : TStringList): Boolean;
Var
  ProcName  : String;
Begin
  ProcName := 'ShouldIGenList';
  Try
    lst.Clear;
    If Trim(ListOfOnlyDisplayItems) <> '' Then
    Begin
      lst.SetText(PChar(ListOfOnlyDisplayItems));
      Result := False;
    End
    Else
    Begin
      Result := True;
    End;
  Except
    On E : Exception Do
    Begin
      Result := True;
      ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function AdvDelphiSysComment: String;
Var
  Page      : TStringList;
  ProcName : String;
Begin
  ProcName := 'AdvDelphiSysComment';
  Try
    Page := TStringList.Create();
    Try
      Page.Clear;
      Page.Add('');
      Result := Page.Text;
    Finally
      Page.Free;
    End;
  Except
    On E : Exception Do
    Begin
      Result := '';
      ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeFieldNamesPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Button      : String;
  Values      : String;
  FieldValues : String
  ): String;
var
  ChangeVisibility : Boolean;
  DBName           : TWebServerDB;
  inCounter        : Integer;
  inVisNum         : Integer;
  inOrder          : Integer;
  lstValues        : TStringList;
  Page             : TStringList;
  ProcName         : String;
  sgVisValue       : String;
  sgCallingApp     : String;
  sgEndTag         : String;
  sgLineFeedTag    : String;
  sgReturnTag      : String;
  sgStartTag       : String;
  Table            : TTable;
  FC               : TFieldClass;
begin
  ProcName  := 'MakeFieldNamesPage';
  Try
    sgEndTag         := #201;
    sgLineFeedTag    := #203;
    sgReturnTag      := #202;
    sgStartTag       := #200;
    BufferSize       := EncryptString(DeEncryptString(Trim(BufferSize)));
    ChangeVisibility := False;
    DatabaseName     := DeEncryptString(EncryptString(Trim(DatabaseName)));
    DBName           := TWebServerDB.Create(nil);
    FC               := TFieldClass.Create(nil);
    inVisNum         := -1;
    LoadBalance      := EncryptString(DeEncryptString(Trim(LoadBalance)));
    lstValues        := TStringList.Create();
    Page             := TStringList.Create();
    Table            := TTable.Create(nil);
    TableName        := DeEncryptString(EncryptString(Trim(TableName)));
    Try
      lstValues.SetText(PChar(Values));
      sgCallingApp := lstValues.Values['CallingApp'];

      If sgCallingApp = ExecutableName Then
      Begin
        ChangeVisibility := True;
        Try
          inVisNum := StrToInt(Button);
        Except
          ChangeVisibility := False;
          inVisNum := -1;
        End;
      End;
      FC.FieldValues := FieldValues;
      If Not FC.Populated Then
      Begin
        FC.DatabaseName := DatabaseName;
        FC.TableName    := TableName;
      End;

      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); For inCounter := 0 To FC.FieldNames.Count - 1 Do Begin inOrder := FC.FieldOrder.IndexOf(IntToStr(inCounter)); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); End; FieldValues := FC.FieldValues; Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Field Visibility'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Field Name'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('Visible'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('Change'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(FC.FieldNames[inOrder]); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); sgVisValue := FC.FieldVisible[inOrder]; If sgVisValue = '' Then sgVisValue := 'Y'; If ChangeVisibility = True Then Begin If inVisNum = (inCounter + 1) Then Begin If sgVisValue = 'Y' Then sgVisValue := 'N' Else sgVisValue := 'Y'; FC.FieldVisible[inOrder] := sgVisValue; End; End; Page.Add(sgVisValue); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally DBName .Free; lstValues .Free; Page .Free; Table .Free; FC .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //Unit Description UnitIndex Master Index
Function MakeOptionsPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Button      : String;
  Values      : String;
  FieldValues : String
  ): String;
var
  lstValues        : TStringList;
  Page             : TStringList;
  ProcName         : String;
  sgCallingApp     : String;
  FC               : TFieldClass;
begin
  ProcName  := 'MakeOptionsPage';
  Try
    BufferSize       := EncryptString(DeEncryptString(Trim(BufferSize)));
    DatabaseName     := DeEncryptString(EncryptString(Trim(DatabaseName)));
    LoadBalance      := EncryptString(DeEncryptString(Trim(LoadBalance)));
    lstValues        := TStringList.Create();
    Page             := TStringList.Create();
    FC               := TFieldClass.Create(nil);
    TableName        := DeEncryptString(EncryptString(Trim(TableName)));
    Try
      lstValues.SetText(PChar(Values));
      sgCallingApp := lstValues.Values['CallingApp'];

      If FieldValues = '' Then
      Begin
        FieldValues :=
          FieldsInit(
            DatabaseName,//DatabaseName: String;
            TableName   ,//TableName   : String;
            LoadBalance ,//LoadBalance : String;
            BufferSize  ,//BufferSize  : String;
            ''           //Role        : String;
            );           //): String;
      End;

      FC.FieldValues := FieldValues;
      If Not FC.Populated Then
      Begin
        FC.Role         := '';
        FC.LoadBalance  := LoadBalance;
        FC.BufferSize   := BufferSize;
        FC.DatabaseName := DatabaseName;
        FC.TableName    := TableName;
      End;

      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Options'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Finished'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally FC .Free; lstValues .Free; Page .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function MakeSearchPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Button      : String;
  Values      : String;
  FieldValues : String
  ): String;
var
  lstValues        : TStringList;
  Page             : TStringList;
  ProcName         : String;
  sgCallingApp     : String;
  FC               : TFieldClass;
begin
  ProcName  := 'MakeSearchPage';
  Try
    BufferSize       := EncryptString(DeEncryptString(Trim(BufferSize)));
    DatabaseName     := DeEncryptString(EncryptString(Trim(DatabaseName)));
    LoadBalance      := EncryptString(DeEncryptString(Trim(LoadBalance)));
    lstValues        := TStringList.Create();
    Page             := TStringList.Create();
    FC               := TFieldClass.Create(nil);
    TableName        := DeEncryptString(EncryptString(Trim(TableName)));
    Try
      lstValues.SetText(PChar(Values));
      sgCallingApp := lstValues.Values['CallingApp'];

      If FieldValues = '' Then
      Begin
        FieldValues :=
          FieldsInit(
            DatabaseName,//DatabaseName: String;
            TableName   ,//TableName   : String;
            LoadBalance ,//LoadBalance : String;
            BufferSize  ,//BufferSize  : String;
            ''           //Role        : String;
            );           //): String;
      End;

      FC.FieldValues := FieldValues;
      If Not FC.Populated Then
      Begin
        FC.Role         := '';
        FC.LoadBalance  := LoadBalance;
        FC.BufferSize   := BufferSize;
        FC.DatabaseName := DatabaseName;
        FC.TableName    := TableName;
      End;

      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Search'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('Options'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally FC .Free; lstValues .Free; Page .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function CleanUnEncryptedField(
  Request: TWebRequest;
  Field  : String
  ): String;
Var
  ProcName : String;
  sg       : String;
Begin
  ProcName := 'CleanField';
  Try
    Field := Trim(Field);
    If Field = '' Then
    Begin
      Result := '';
      Exit;
    End;
    If Request.MethodType = mtPost Then
    Begin
      sg := Request.ContentFields.Values[Field];
    End
    Else
    Begin
      sg := Request.QueryFields.Values[Field];
    End;
    sg := Trim(sg);
    If sg = '' Then
    Begin
      Result := '';
      Exit;
    End;
    sg := EncryptString(sg);
    sg := DeEncryptString(sg);
    Result := Trim(sg);
  Except
    On E : Exception Do
    Begin
      Result := '';
      ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function DeEncryptAndCleanField(
  Request: TWebRequest;
  Field  : String
  ): String;
Var
  ProcName : String;
  sg       : String;
Begin
  ProcName := 'DeEncryptAndCleanField';
  Try
    Field := Trim(Field);
    If Field = '' Then
    Begin
      Result := '';
      Exit;
    End;
    If Request.MethodType = mtPost Then
    Begin
      sg := Request.ContentFields.Values[Field];
    End
    Else
    Begin
      sg := Request.QueryFields.Values[Field];
    End;
    sg := Trim(sg);
    If sg = '' Then
    Begin
      Result := '';
      Exit;
    End;
    sg := DeEncryptString(sg);
    Result := Trim(sg);
  Except
    On E : Exception Do
    Begin
      Result := '';
      ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function CheckLoginDatabase(
  DatabaseName : String;
  TableName    : String;
  LoadBalance  : String;
  BufferSize   : String
  ): Boolean;
Begin
  Result := True;
End;

//
Unit Description UnitIndex Master Index
Function FieldList(
  Request     : TWebRequest;
  FieldPrefix : String
  ): String;
Var
  lst          : TStringList;
  inCounter    : Integer;
  LFieldPrefix : Integer;
  UFieldPrefix : String;
  //sgOn         : String;
  inPos        : Integer;
  FieldName    : String;
  FieldValue   : String;
  ContentField : String;
  ProcName     : String;
Begin
  ProcName := 'FieldList'; Try
  lst := TStringList.Create();
  Try
    lst.Clear;
    LFieldPrefix := Length(FieldPrefix);
    UFieldPrefix := UpperCase(FieldPrefix);
    For inCounter := 0 To Request.ContentFields.Count - 1 Do
    Begin
      ContentField := Request.ContentFields[inCounter];
      If UpperCase(Copy(ContentField,1,LFieldPrefix)) = UFieldPrefix Then
      Begin
        inPos := Pos('=',ContentField);
        If inPos > 0 Then
        Begin
          FieldName  := Copy(ContentField,LFieldPrefix+1,inPos-1-LFieldPrefix);
          FieldValue := UpperCase(Trim(Copy(ContentField,inPos+1,255)));
          If FieldValue = 'ON' Then lst.Add(FieldName);
        End;
      End;
    End;
    Result := lst.Text;
  Finally
    lst.Free;
  End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function MakeBrowserPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Role        : String;
  RecNo       : String;
  RecMax      : String;
  FieldList   : String;
  NavButton   : String;
  lst         : TStrings
  ): String;
var
  FieldNames  : TStringList;
  inCounter   : Integer;
  inCount     : Integer;
  ProcName    : String;
  Page        : TStringList;
  DBName      : TWebServerDB;
  Table       : TTable;
  inRecNo     : Integer;
  inRecMax    : Integer;
  FieldHtml   : TStringList;
  sgCounter   : String;
  sgFldText   : String;
  sgFieldLabel: String;
  boVisible   : Boolean;
  sgFieldName : String;
  BlobField   : TBlobField;
  lstFldValues: TStringList;
  lstArrays   : TStringList;
  inCol       : Integer;
  FieldValues : Array of Array of String;
  sgFieldValues: String;
  inFldCount  : Integer;
  sgArray     : String;
begin
  ProcName  := 'MakeBrowserPage';
  Try
    If (DBLoadDatabaseName = 'TRUE') And (DBValueDatabaseName <> '') Then
    Begin
      DatabaseName := DBValueDatabaseName;
    End
    Else
    Begin
      DatabaseName := DeEncryptString(EncryptString(Trim(DatabaseName)));
    End;
    If DBSaveDatabaseName = 'TRUE' Then DBValueDatabaseName := DatabaseName;
    If (DBLoadTableName = 'TRUE') And (DBValueTableName <> '') Then
    Begin
      TableName := DBValueTableName;
    End
    Else
    Begin
      TableName    := DeEncryptString(EncryptString(Trim(TableName)));
    End;
    If DBSaveTableName = 'TRUE' Then DBValueTableName := TableName;
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    //RecNo        := lst.Values['RecNo'];
    Page         := TStringList.Create();
    FieldNames   := TStringList.Create();
    FieldHtml    := TStringList.Create();
    lstFldValues := TStringList.Create();
    lstArrays    := TStringList.Create();
    DBName       := TWebServerDB.Create(nil);
    Table        := TTable.Create(nil);
    BlobField    := TBlobField.Create(nil);
    Try

(*
FIELDDISPLAY
FIELDMAX
FIELDMIN
FIELDNAMES
FIELDNUMBER
FIELDORDER
FIELDSIZE
FIELDTYPE
FIELDVISIBLE
*)
      lstArrays.Clear;
      lstArrays.Add('FIELDDISPLAY');
      lstArrays.Add('FIELDMAX');
      lstArrays.Add('FIELDMIN');
      lstArrays.Add('FIELDNAMES');
      lstArrays.Add('FIELDNUMBER');
      lstArrays.Add('FIELDORDER');
      lstArrays.Add('FIELDSIZE');
      lstArrays.Add('FIELDTYPE');
      lstArrays.Add('FIELDVISIBLE');

      If (DBLoadFieldValues = 'TRUE') And (DBValueFieldValues <> '') Then
      Begin
        sgFieldValues := DBValueFieldValues;
      End
      Else
      Begin
        sgFieldValues := lst.Values['FieldValues'];
      End;
      If sgFieldValues = '' Then
      Begin
        sgFieldValues :=
          FieldsInit(
            DatabaseName,//DatabaseName: String;
            TableName   ,//TableName   : String;
            LoadBalance ,//LoadBalance : String;
            BufferSize  ,//BufferSize  : String;
            ''           //Role        : String;
            );           //): String;
      End;
      If (DBSaveFieldValues = 'TRUE') Then DBValueFieldValues := sgFieldValues;
      lstFldValues.Clear;
      sgArray := lstArrays[0];
      FieldValuesStrToLst(
        lstFldValues             ,//Var lst     : TStringList;
        sgFieldValues            ,//FieldValues : String;
        sgArray                  );//ListName    : String): Boolean;
      inFldCount := lstFldValues.Count;
      SetLength(FieldValues,9,inFldCount);

      For inCount := 0 To lstArrays.Count - 1 Do
      Begin
        lstFldValues.Clear;
        sgArray := lstArrays[inCount];
        FieldValuesStrToLst(
          lstFldValues             ,//Var lst     : TStringList;
          sgFieldValues            ,//FieldValues : String;
          sgArray                  );//ListName    : String): Boolean;
        For inCounter := 0 To inFldCount - 1 Do
        Begin
          FieldValues[inCount,inCounter] := lstFldValues[inCounter];
        End;
      End;

      FieldNames.SetText(PChar(FieldList));

      FieldHtml.Clear;
      For inCounter := 0 To FieldNames.Count - 1 Do
      Begin
        FieldHtml.Add('');
      End;

      If ShouldIGenList(FieldNames) Then
      Begin
        DBName.Connected      := False;
        DBName.LoginPrompt    := False;
        DBName.DatabaseName   := 'DBName';
        DBName.AliasName      := DatabaseName;
        DBName.KeepConnection := True;
        DBName.Params.Clear;
        DBName.Params.Add('USER NAME='+DeEncryptString(LoadBalance));
        DBName.Params.Add('PASSWORD='+DeEncryptString(BufferSize));
        Table.Active          := False;
        Table.DatabaseName    := 'DBName';
        Table.TableName       := TableName;
        Try
          DBName.Connected := True;
        Except
          On E : Exception Do
          Begin
            Result :=
            //  ''+#13+
            //  ''+#13+
            //  ''+#13+
            //  ''+#13+
            //  ''+#13+
            ER(ProcName,'all',E);
            Exit;
          End;
        End;

        FieldNames.Sorted := False;
        With Table Do
        Begin
          Active := False;
          FieldDefs.Update;
          FieldNames.Clear;
          For inCounter := 0 To FieldDefs.Count - 1 Do
          Begin
            FieldNames.Add(FieldDefs[inCounter].DisplayName);
          End;
        end;
        FieldNames.SetText(PChar(DeleteItemsFromList(FieldNames.Text)));
      End;
      Page.SetText(PChar(PageHeader));

      Page.Add('');

      Page.Add('
'); Try If RecMax = '' Then Begin If Not Table.Active Then Table.Active := True; RecMax := IntToStr(Table.RecordCount); End; Except End; Try inRecNo := StrToInt(RecNo); Except inRecNo := 1; End; Try inRecMax := StrToInt(RecMax); Except inRecMax := 1; End; If NavButton = 'First' Then Begin inRecNo := 1; End Else Begin If NavButton = 'Prior' Then Begin inRecNo := inRecNo - 1; If inRecNo < 1 Then inRecNo := 1; End Else Begin If NavButton = 'Next' Then Begin inRecNo := inRecNo + 1; If inRecNo > inRecMax Then inRecNo := inRecMax; End Else Begin If NavButton = 'Last' Then Begin inRecNo := inRecMax; End Else Begin inRecNo := 1; End; End; End; End; RecNo := IntToStr(inRecNo); RecMax:= IntToStr(inRecMax); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); If ButtonShowDB = 'TRUE' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; If ButtonShowTable = 'TRUE' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; If ButtonShowFields = 'TRUE' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; If ButtonShowFilter = 'TRUE' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; If ButtonShowSaveAsServer = 'TRUE' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Move to the '+'first'+' record.'); Page.Add(''); Page.Add('Move to the '+'prior'+' record.'); Page.Add(''); Page.Add('Move to the '+'next'+' record.'); Page.Add(''); Page.Add('Move to the '+'last'+' record.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('Go to bottom of this page.'); Page.Add('
'); Page.Add(''); Page.Add('Change the database to which you are connected.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Change the table to which you are connected.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Customize field layout.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Set filters to control display of records.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Create a new server to deliver this data to the web.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); If RecMax <> '' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End Else Begin Page.Add(''); Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add(''); Page.Add(''); inRecNo := StrToInt(RecNo); If Not Table.Active Then Table.Active := True; Table.First; For inCounter := 1 To inRecNo-1 Do Begin Table.Next; End; (* For inCount := 0 To 8 Do Begin Page.Add('

'+lstArrays[inCount]+'

'); For inCounter := 0 To inFldCount - 1 Do Begin Page.Add('

'+FieldValues[inCount,inCounter]+'

'); End End; *) For inCounter := 0 To inFldCount - 1 Do Begin sgFieldName := ''; sgFieldLabel := ''; boVisible := False; inCol := lstArrays.Indexof('FIELDORDER'); sgCounter := IntToStr(inCounter); For inCount := 0 To inFldCount - 1 Do Begin If FieldValues[inCol,inCount] = sgCounter Then Begin sgFieldName := FieldValues[lstArrays.Indexof('FIELDNAMES'),inCount]; sgFieldLabel := FieldValues[lstArrays.Indexof('FIELDDISPLAY'),inCount]; boVisible := (FieldValues[lstArrays.Indexof('FIELDVISIBLE'),inCount]='Y'); Break; End; End; If Not boVisible Then Continue; If sgFieldName = '' Then Continue; If sgFieldLabel = '' Then Continue; Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); End; Table.Active := False; Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('REC #: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'+RecNo+' of '+' '+RecMax+'
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('REC #: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'+RecNo+'
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Record Data'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(sgFieldLabel); Page.Add(''); Page.Add(''); Page.Add(''); Try sgFldText := UpperCase(Table.FieldByName(sgFieldName).Text); If sgFldText = '(GRAPHIC)' Then Begin Page.Add(''); WriteDBImageToFile( TDataSet(Table) ,//DataSet : TDataSet; sgFieldName ,//FieldName : String; 'c:\program files\apache group\apache\htdocs\'+DatabaseName+'_'+TableName+'_'+sgFieldName+'_'+RecNo+'.jpg');//FileName : String); End Else Begin If sgFldText = '(MEMO)' Then Begin //Page.Add('
');
              Page.Add(Table.FieldByName(sgFieldName).AsString);
              //Page.Add('
'); End Else Begin If sgFldText = '(BLOB)' Then Begin //Page.Add(Table.FieldByName(FieldNames[inCounter]).Text); Page.Add(''); WriteDBImageToFile( TDataSet(Table) ,//DataSet : TDataSet; sgFieldName ,//FieldName : String; 'c:\program files\apache group\apache\htdocs\'+DatabaseName+'_'+TableName+'_'+sgFieldName+'_'+RecNo+'.jpg');//FileName : String); End Else Begin Page.Add(Table.FieldByName(sgFieldName).AsString); End; End; End; Except End; Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('Go to Top of this page.'); Page.Add(''); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally Page .Free; FieldNames .Free; Table .Free; DBName .Free; BlobField .Free; lstFldValues.Free; lstArrays .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //Unit Description UnitIndex Master Index
Function FieldTypeToStr(FieldType : TFieldType): String;
Var
  ProcName : String;
Begin
  Result := 'Unknown';
  ProcName := 'FieldTypeToStr'; Try
  If FieldType = ftUnknown     Then Begin Result := 'Unknown';     Exit; End;
  If FieldType = ftString      Then Begin Result := 'String';      Exit; End;
  If FieldType = ftSmallint    Then Begin Result := 'Smallint';    Exit; End;
  If FieldType = ftInteger     Then Begin Result := 'Integer';     Exit; End;
  If FieldType = ftWord        Then Begin Result := 'Word';        Exit; End;
  If FieldType = ftBoolean     Then Begin Result := 'Boolean';     Exit; End;
  If FieldType = ftFloat       Then Begin Result := 'Float';       Exit; End;
  If FieldType = ftCurrency    Then Begin Result := 'Currency';    Exit; End;
  If FieldType = ftBCD         Then Begin Result := 'BCD';         Exit; End;
  If FieldType = ftDate        Then Begin Result := 'Date';        Exit; End;
  If FieldType = ftTime        Then Begin Result := 'Time';        Exit; End;
  If FieldType = ftDateTime    Then Begin Result := 'DateTime';    Exit; End;
  If FieldType = ftBytes       Then Begin Result := 'Bytes';       Exit; End;
  If FieldType = ftVarBytes    Then Begin Result := 'VarBytes';    Exit; End;
  If FieldType = ftAutoInc     Then Begin Result := 'AutoInc';     Exit; End;
  If FieldType = ftBlob        Then Begin Result := 'Blob';        Exit; End;
  If FieldType = ftMemo        Then Begin Result := 'Memo';        Exit; End;
  If FieldType = ftGraphic     Then Begin Result := 'Graphic';     Exit; End;
  If FieldType = ftFmtMemo     Then Begin Result := 'FmtMemo';     Exit; End;
  If FieldType = ftParadoxOle  Then Begin Result := 'ParadoxOle';  Exit; End;
  If FieldType = ftDBaseOle    Then Begin Result := 'DBaseOle';    Exit; End;
  If FieldType = ftTypedBinary Then Begin Result := 'TypedBinary'; Exit; End;
  If FieldType = ftCursor      Then Begin Result := 'Cursor';      Exit; End;
  If FieldType = ftFixedChar   Then Begin Result := 'FixedChar';   Exit; End;
  If FieldType = ftWideString  Then Begin Result := 'WideString';  Exit; End;
  If FieldType = ftLargeInt    Then Begin Result := 'LargeInt';    Exit; End;
  If FieldType = ftADT         Then Begin Result := 'ADT';         Exit; End;
  If FieldType = ftArray       Then Begin Result := 'Array';       Exit; End;
  If FieldType = ftReference   Then Begin Result := 'Reference';   Exit; End;
  If FieldType = ftDataSet     Then Begin Result := 'DataSet';     Exit; End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function StrToFieldType(FieldType : String): TFieldType;
Var
  ProcName : String;
Begin
  Result      := ftUnknown;
  ProcName := 'StrToFieldType'; Try
  If FieldType = 'Unknown'     Then Begin Result := ftUnknown;     Exit; End;
  If FieldType = 'String'      Then Begin Result := ftString;      Exit; End;
  If FieldType = 'Smallint'    Then Begin Result := ftSmallint;    Exit; End;
  If FieldType = 'Integer'     Then Begin Result := ftInteger;     Exit; End;
  If FieldType = 'Word'        Then Begin Result := ftWord;        Exit; End;
  If FieldType = 'Boolean'     Then Begin Result := ftBoolean;     Exit; End;
  If FieldType = 'Float'       Then Begin Result := ftFloat;       Exit; End;
  If FieldType = 'Currency'    Then Begin Result := ftCurrency;    Exit; End;
  If FieldType = 'BCD'         Then Begin Result := ftBCD;         Exit; End;
  If FieldType = 'Date'        Then Begin Result := ftDate;        Exit; End;
  If FieldType = 'Time'        Then Begin Result := ftTime;        Exit; End;
  If FieldType = 'DateTime'    Then Begin Result := ftDateTime;    Exit; End;
  If FieldType = 'Bytes'       Then Begin Result := ftBytes;       Exit; End;
  If FieldType = 'VarBytes'    Then Begin Result := ftVarBytes;    Exit; End;
  If FieldType = 'AutoInc'     Then Begin Result := ftAutoInc;     Exit; End;
  If FieldType = 'Blob'        Then Begin Result := ftBlob;        Exit; End;
  If FieldType = 'Memo'        Then Begin Result := ftMemo;        Exit; End;
  If FieldType = 'Graphic'     Then Begin Result := ftGraphic;     Exit; End;
  If FieldType = 'FmtMemo'     Then Begin Result := ftFmtMemo;     Exit; End;
  If FieldType = 'ParadoxOle'  Then Begin Result := ftParadoxOle;  Exit; End;
  If FieldType = 'DBaseOle'    Then Begin Result := ftDBaseOle;    Exit; End;
  If FieldType = 'TypedBinary' Then Begin Result := ftTypedBinary; Exit; End;
  If FieldType = 'Cursor'      Then Begin Result := ftCursor;      Exit; End;
  If FieldType = 'FixedChar'   Then Begin Result := ftFixedChar;   Exit; End;
  If FieldType = 'WideString'  Then Begin Result := ftWideString;  Exit; End;
  If FieldType = 'LargeInt'    Then Begin Result := ftLargeInt;    Exit; End;
  If FieldType = 'ADT'         Then Begin Result := ftADT;         Exit; End;
  If FieldType = 'Array'       Then Begin Result := ftArray;       Exit; End;
  If FieldType = 'Reference'   Then Begin Result := ftReference;   Exit; End;
  If FieldType = 'DataSet'     Then Begin Result := ftDataSet;     Exit; End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function FieldValuesStrToLst(
  Var lst     : TStringList;
  FieldValues : String;
  ListName    : String): Boolean;
Var
  inLenEnd     : Integer;
  inPosEnd     : Integer;
  inPosStart   : Integer;
  sgEndTag     : String;
  sgEndTagAll  : String;
  sgReturnTag  : String;
  sgLineFeedTag: String;
  sgStartTag   : String;
  sgStartTagAll: String;
  sgTemp       : String;
  ProcName     : String;
Begin
  Result := False;
  ProcName := 'FieldValuesStrToLst'; Try
  lst.Clear;
  sgEndTag     := #201;
  sgReturnTag  := #202;
  sgLineFeedTag:= #203;
  sgStartTag   := #200;
  ListName     := UpperCase(ListName);
  sgStartTagAll:= sgStartTag+ListName+sgStartTag;
  sgEndTagAll  := sgEndTag+ListName+sgEndTag;
  inLenEnd     := Length(sgEndTagAll);
  inPosStart   := Pos(sgStartTagAll,FieldValues);
  If inPosStart = 0 Then Exit;
  inPosEnd     := Pos(sgEndTagAll,FieldValues);
  If inPosEnd   = 0 Then Exit;
  If inPosEnd  <= inPosStart Then Exit;
  sgTemp       := Copy(FieldValues,inPosStart,inPosEnd + inLenEnd -inPosStart);
  sgTemp       := AdjustLineBreaks(sgTemp);
  sgTemp       := StringReplace(sgTemp,sgReturnTag,  #13,[rfReplaceAll]);
  sgTemp       := StringReplace(sgTemp,sgLineFeedTag,#10,[rfReplaceAll]);
  lst.SetText(PChar(sgTemp));
  lst.Delete(lst.Count-1);
  If lst.Count >= 1 Then lst.Delete(0);
  Result := True;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function FieldsUpdate(
  FieldDisplay : TStringList;
  FieldMax     : TStringList;
  FieldMin     : TStringList;
  FieldNames   : TStringList;
  FieldNumber  : TStringList;
  FieldOrder   : TStringList;
  FieldSize    : TStringList;
  FieldType    : TStringList;
  FieldVisible : TStringList;
  TableData    : TStringList;
  SaveToFile   : Boolean
  ): String;
Var
  ProcName     : String;
  sgEndTag     : String;
  sgLineFeedTag: String;
  sgReturnTag  : String;
  sgStartTag   : String;
  sgLst        : String;
  sgLabel      : String;
  lst          : TStringList;
  lstTemp      : TStringList;
Begin
  ProcName     := 'FieldsUpdate'; Try
  sgEndTag     := #201;
  sgLineFeedTag:= #203;
  sgReturnTag  := #202;
  sgStartTag   := #200;
  sgLst        := '';

  lst := TStringList.Create();
  Try
    lstTemp := FieldDisplay;
    sgLabel := 'FIELDDISPLAY';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := FieldMax;
    sgLabel := 'FIELDMAX';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldMin;
    sgLabel := 'FIELDMIN';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldNames;
    sgLabel := 'FIELDNAMES';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldNumber;
    sgLabel := 'FIELDNUMBER';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
 
    lstTemp := FieldOrder;
    sgLabel := 'FIELDORDER';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := FieldSize;
    sgLabel := 'FIELDSIZE';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := FieldType;
    sgLabel := 'FIELDTYPE';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldVisible;
    sgLabel := 'FIELDVISIBLE';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := TableData;
    sgLabel := 'TABLEDATA';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    Result := StringReplace(sgLst, #13,sgReturnTag,  [rfReplaceAll]);
    Result := StringReplace(Result,#10,sgLineFeedTag,[rfReplaceAll]);
  Finally
    lst.Free;
  End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function FieldsInit(
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Role        : String
  ): String;
Var
  DBName       : TDatabase;
  FieldDisplay : TStringList;
  FieldMax     : TStringList;
  FieldMin     : TStringList;
  FieldNames   : TStringList;
  FieldNumber  : TStringList;
  FieldOrder   : TStringList;
  FieldSize    : TStringList;
  FieldType    : TStringList;
  FieldVisible : TStringList;
  inCounter    : Integer;
  inDelete     : Integer;
  lst          : TStringList;
  ProcName     : String;
  sgEndTag     : String;
  sgLineFeedTag: String;
  sgReturnTag  : String;
  sgStartTag   : String;
  Table        : TTable;
  TableData    : TStringList;
Begin
  ProcName     := 'FieldInit'; Try
  DBName       := TDatabase  .Create(nil);
  FieldDisplay := TStringList.Create();
  FieldMax     := TStringList.Create();
  FieldMin     := TStringList.Create();
  FieldNames   := TStringList.Create();
  FieldNumber  := TStringList.Create();
  FieldOrder   := TStringList.Create();
  FieldSize    := TStringList.Create();
  FieldType    := TStringList.Create();
  FieldVisible := TStringList.Create();
  lst          := TStringList.Create();
  Table        := TTable.Create(nil);
  sgEndTag     := #201;
  sgLineFeedTag:= #203;
  sgReturnTag  := #202;
  sgStartTag   := #200;
  TableData    := TStringList.Create();
 
  Try
    DBName.Connected      := False;
    DBName.LoginPrompt    := False;
    DBName.DatabaseName   := 'DBName';
    DBName.AliasName      := DatabaseName;
    DBName.KeepConnection := True;
    DBName.Params.Clear;
    DBName.Params.Add('USER NAME='+DeEncryptString(LoadBalance));
    DBName.Params.Add('PASSWORD='+DeEncryptString(BufferSize));
    Table.Active          := False;
    Table.DatabaseName    := 'DBName';
    Table.TableName       := TableName;
    Try
      DBName.Connected := True;
    Except
      On E : Exception Do
      Begin
        Result :=
        ER(ProcName,'all',E);
        Exit;
      End;
    End;

    FieldDisplay .Clear;
    FieldMax     .Clear;
    FieldMin     .Clear;
    FieldNames   .Clear;
    FieldNumber  .Clear;
    FieldOrder   .Clear;
    FieldSize    .Clear;
    FieldType    .Clear;
    FieldVisible .Clear;
    TableData    .Clear;
    FieldDisplay .Sorted := False;
    FieldMax     .Sorted := False;
    FieldMin     .Sorted := False;
    FieldNames   .Sorted := False;
    FieldNumber  .Sorted := False;
    FieldOrder   .Sorted := False;
    FieldSize    .Sorted := False;
    FieldType    .Sorted := False;
    FieldVisible .Sorted := False;
    TableData    .Sorted := False;

    FieldDisplay .Add(sgStartTag+'FIELDDISPLAY'+sgStartTag);
    FieldMax     .Add(sgStartTag+'FIELDMAX'    +sgStartTag);
    FieldMin     .Add(sgStartTag+'FIELDMIN'    +sgStartTag);
    FieldNames   .Add(sgStartTag+'FIELDNAMES'  +sgStartTag);
    FieldNumber  .Add(sgStartTag+'FIELDNUMBER' +sgStartTag);
    FieldOrder   .Add(sgStartTag+'FIELDORDER'  +sgStartTag);
    FieldSize    .Add(sgStartTag+'FIELDSIZE'   +sgStartTag);
    FieldType    .Add(sgStartTag+'FIELDTYPE'   +sgStartTag);
    FieldVisible .Add(sgStartTag+'FIELDVISIBLE'+sgStartTag);
    TableData    .Add(sgStartTag+'TABLEDATA'   +sgStartTag);

    With Table Do
    Begin
      Active      := False;
      FieldDefs   .Update;

      For inCounter := 0 To FieldDefs.Count - 1 Do
      Begin
        FieldDisplay .Add(FieldDefs[inCounter].DisplayName);
        FieldMax     .Add(' ');
        FieldMin     .Add(' ');
        FieldNames   .Add(FieldDefs[inCounter].Name);
        FieldNumber  .Add(IntToStr(inCounter));
        FieldOrder   .Add(IntToStr(inCounter));
        FieldSize    .Add(IntToStr(FieldDefs[inCounter].Size));
        FieldType    .Add(FieldTypeToStr(FieldDefs[inCounter].DataType));
        FieldVisible .Add('Y');
      End;
    End;
    TableData.Add('DATABASENAME='+DatabaseName);
    TableData.Add('TABLENAME='+TableName);
    TableData.Add('LOADBALANCE='+LoadBalance);
    TableData.Add('BUFFERSIZE='+BufferSize);
    TableData.Add('ROLE='+Role);
    lst.Clear;
    lst.SetText(PChar(ListOfItemsToDelete));
    For inCounter := 0 To lst.Count - 1 Do
    Begin
      inDelete := FieldNames.IndexOf(lst[inCounter]);
      If inDelete <> -1 Then
      Begin
        FieldVisible[inDelete] := 'N';
      End;
    End;

    FieldDisplay .Add(sgEndTag+'FIELDDISPLAY'+sgEndTag);
    FieldMax     .Add(sgEndTag+'FIELDMAX'    +sgEndTag);
    FieldMin     .Add(sgEndTag+'FIELDMIN'    +sgEndTag);
    FieldNames   .Add(sgEndTag+'FIELDNAMES'  +sgEndTag);
    FieldNumber  .Add(sgEndTag+'FIELDNUMBER' +sgEndTag);
    FieldOrder   .Add(sgEndTag+'FIELDORDER'  +sgEndTag);
    FieldSize    .Add(sgEndTag+'FIELDSIZE'   +sgEndTag);
    FieldType    .Add(sgEndTag+'FIELDTYPE'   +sgEndTag);
    FieldVisible .Add(sgEndTag+'FIELDVISIBLE'+sgEndTag);
    TableData    .Add(sgEndTag+'TABLEDATA'   +sgEndTag);

    Result :=
      FieldDisplay .Text +
      FieldMax     .Text +
      FieldMin     .Text +
      FieldNames   .Text +
      FieldNumber  .Text +
      FieldOrder   .Text +
      FieldSize    .Text +
      FieldType    .Text +
      FieldVisible .Text +
      TableData    .Text;
    Result := StringReplace(Result,#13,sgReturnTag,  [rfReplaceAll]);
    Result := StringReplace(Result,#10,sgLineFeedTag,[rfReplaceAll]);
  Finally
    DBName       .Free;
    FieldDisplay .Free;
    FieldMax     .Free;
    FieldMin     .Free;
    FieldNames   .Free;
    FieldNumber  .Free;
    FieldOrder   .Free;
    FieldSize    .Free;
    FieldType    .Free;
    FieldVisible .Free;
    lst          .Free;
    Table        .Free;
    TableData    .Free;
  End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function Counter: String;
Var
  FileName  : String;
  lst       : TStringList;
  sgCount   : String;
  inCount   : Integer;
  ProcName  : String;
Begin
  ProcName := 'Counter'; Try
  lst := TStringList.Create();
  Try
    Try
      lst.Clear;
      FileName := ExecutableName;
      FileName := Copy(FileName,1,Length(ExecutableName)-3)+'cnt';
      FileName := ExecutablePath + FileName;
      sgCount  := '0';
      If FileExists(FileName) Then
      Begin
        lst.LoadFromFile(FileName);
        If lst.Count >= 1 Then
        Begin
          sgCount := lst[0];
        End;
      End;
      inCount := StrToInt(sgCount);
      inCount := inCount + 1;
      sgCount := IntToStr(inCount);
      sgCount := StringPad(sgCount,'0',8,False);
      Result := sgCount;
      Try
        lst.Clear;
        lst.Add(intToStr(inCount));
        lst.SaveToFile(FileName);
      Except
      End;
    Except
      sgCount := StringPad(sgCount,'0',8,False);
      Result := sgCount;
    End;
  Finally
    lst.Free;
  End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
Function PublishDebugData(PageStr: String; Values: TWebRequest): String;
Var
  ErrorLocation : String;
  ProcName      : String;
Begin
  ProcName := 'PublishDebugData';
  Try
    ErrorLocation := 'Top';
    If UpperCase(Copy(DebugDataPublish,1,1)) = 'T' Then
    Begin
      ErrorLocation := '1';
      PageStr :=
        ReplaceStringInString(
          PageStr,                        //SourceString : String;
          '',           //OldString    : String;
          GetRequestInfo(TWebRequest(Values),False)    //NewString    : String
          );                              //): String;
    End
    Else
    Begin
      ErrorLocation := '2';
      PageStr :=
        ReplaceStringInString(
          PageStr,                        //SourceString : String;
          '',           //OldString    : String;
          ''                              //NewString    : String
          );                              //): String;
    End;
    ErrorLocation := 'Bottom';
    Result := PageStr;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,ErrorLocation,E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;

End;

//
Unit Description UnitIndex Master Index
Function MinMaxStrFieldTypes(FieldType : String): Boolean;
Var
  ProcName : String;
Begin
  FieldType   := UpperCase(FieldType);
  Result      := False;
  ProcName    := 'MinMaxStrFieldTypes'; Try
  If FieldType = 'UNKNOWN'     Then Begin Result := False;         Exit; End;
  If FieldType = 'STRING'      Then Begin Result := False;         Exit; End;
  If FieldType = 'SMALLINT'    Then Begin Result := True;          Exit; End;
  If FieldType = 'INTEGER'     Then Begin Result := True;          Exit; End;
  If FieldType = 'WORD'        Then Begin Result := False;         Exit; End;
  If FieldType = 'BOOLEAN'     Then Begin Result := False;         Exit; End;
  If FieldType = 'FLOAT'       Then Begin Result := True;          Exit; End;
  If FieldType = 'CURRENCY'    Then Begin Result := True;          Exit; End;
  If FieldType = 'BCD'         Then Begin Result := False;         Exit; End;
  If FieldType = 'DATE'        Then Begin Result := True;          Exit; End;
  If FieldType = 'TIME'        Then Begin Result := True;          Exit; End;
  If FieldType = 'DATETIME'    Then Begin Result := True;          Exit; End;
  If FieldType = 'BYTES'       Then Begin Result := False;         Exit; End;
  If FieldType = 'VARBYTES'    Then Begin Result := False;         Exit; End;
  If FieldType = 'AUTOINC'     Then Begin Result := False;         Exit; End;
  If FieldType = 'BLOB'        Then Begin Result := False;         Exit; End;
  If FieldType = 'MEMO'        Then Begin Result := False;         Exit; End;
  If FieldType = 'GRAPHIC'     Then Begin Result := False;         Exit; End;
  If FieldType = 'FMTMEMO'     Then Begin Result := False;         Exit; End;
  If FieldType = 'PARADOXOLE'  Then Begin Result := False;         Exit; End;
  If FieldType = 'DBASEOLE'    Then Begin Result := False;         Exit; End;
  If FieldType = 'TYPEDBINARY' Then Begin Result := False;         Exit; End;
  If FieldType = 'CURSOR'      Then Begin Result := False;         Exit; End;
  If FieldType = 'FIXEDCHAR'   Then Begin Result := False;         Exit; End;
  If FieldType = 'WIDESTRING'  Then Begin Result := False;         Exit; End;
  If FieldType = 'LARGEINT'    Then Begin Result := True;          Exit; End;
  If FieldType = 'ADT'         Then Begin Result := False;         Exit; End;
  If FieldType = 'ARRAY'       Then Begin Result := False;         Exit; End;
  If FieldType = 'REFERENCE'   Then Begin Result := False;         Exit; End;
  If FieldType = 'DATASET'     Then Begin Result := False;         Exit; End;
  Except On E : Exception Do RaiseError(UnitName,ProcName,E); End;
End;

//
Unit Description UnitIndex Master Index
procedure WriteDBImageToFile(
  Var DataSet  : TDataSet;
  FieldName    : String;
  FileName     : String);
var
  Jpeg         : TJpegImage;
  Picture      : TPicture;
  ProcName     : String;
  DBImage      : TDBImage;
  DataSource   : TDataSource;
begin
  ProcName := 'WriteDBImageToFile';
  Try
    DataSource := TDataSource.Create(nil);
    DBImage := TDBImage.Create(nil);
    Jpeg    := TJpegImage.Create;
    Try
      DataSource.DataSet := DataSet;
      DBImage.DataSource := DataSource;
      DBImage.DataField  := FieldName;
      Picture            := TPicture.Create;
      Try
        Picture.Assign(DBImage.Picture);
        Jpeg.Assign(Picture.Graphic);
        Jpeg.SaveToFile(FileName);
      Finally
        Picture.Free;
      End;
    Finally
      Jpeg.Free;
      DBImage.Free;
    End;
  Except
    On E : Exception Do
    Begin
      ER(ProcName,'all',E);
      RaiseError(UnitName,ProcName,E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeFormatPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Button      : String;
  Values      : String;
  FieldValues : String
  ): String;
var
  lstValues        : TStringList;
  Page             : TStringList;
  ProcName         : String;
  sgCallingApp     : String;
  FC               : TFieldClass;
begin
  ProcName  := 'MakeFormatPage';
  Try
    BufferSize       := EncryptString(DeEncryptString(Trim(BufferSize)));
    DatabaseName     := DeEncryptString(EncryptString(Trim(DatabaseName)));
    LoadBalance      := EncryptString(DeEncryptString(Trim(LoadBalance)));
    lstValues        := TStringList.Create();
    Page             := TStringList.Create();
    FC               := TFieldClass.Create(nil);
    TableName        := DeEncryptString(EncryptString(Trim(TableName)));
    Try
      lstValues.SetText(PChar(Values));
      sgCallingApp := lstValues.Values['CallingApp'];

      If FieldValues = '' Then
      Begin
        FieldValues :=
          FieldsInit(
            DatabaseName,//DatabaseName: String;
            TableName   ,//TableName   : String;
            LoadBalance ,//LoadBalance : String;
            BufferSize  ,//BufferSize  : String;
            ''           //Role        : String;
            );           //): String;
      End;

      FC.FieldValues := FieldValues;
      If Not FC.Populated Then
      Begin
        FC.Role         := '';
        FC.LoadBalance  := LoadBalance;
        FC.BufferSize   := BufferSize;
        FC.DatabaseName := DatabaseName;
        FC.TableName    := TableName;
      End;

      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Select'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('Field Option'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('Set the fields that will be displayed.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Set the fields that will be displayed.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('Set the order of the fields to be displayed.'); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Set the order of the fields to be displayed.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('Set field labels to be displayed to users.'); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Set field labels to be displayed to users.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); If ButtonShowDB = 'TRUE' Then Begin Page.Add(''); Page.Add(''); End; If ButtonShowTable = 'TRUE' Then Begin Page.Add(''); Page.Add(''); End; If ButtonShowFilter = 'TRUE' Then Begin Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Change the database to which you are connected.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Change the table to which you are connected.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Set filters to control display of records.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('View the data.'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally FC .Free; lstValues .Free; Page .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function MakeSaveAsServerPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  Role        : String;
  LoadBalance : String;
  BufferSize  : String;
  FieldValues : String;
  SourceServer: String;
  lst         : TStrings
  ): String;
var
  ProcName  : String;
  Page      : TStringList;
  inPos     : Integer;
begin
  ProcName  := 'MakeSaveAsServerPage';
  Try
    ActionURL    := DeEncryptString(EncryptString(Trim(ActionURL)));
    DatabaseName := DeEncryptString(EncryptString(Trim(DatabaseName)));
    TableName    := DeEncryptString(EncryptString(Trim(TableName)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    Role         := DeEncryptString(EncryptString(Trim(Role)));
    Page         := TStringList.Create();
    Try
      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add('Create a New Server'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Please name your new server.'); Page.Add(''); Page.Add('
'); Page.Add('
'); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); inPos := Pos('.',TableName); If inPos > 0 Then Begin Page.Add(''); End Else Begin Page.Add(''); End; Page.Add(''); Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally Page .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; //
Unit Description UnitIndex Master Index
Function MakeSaveAsServerFinishedPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  Role        : String;
  LoadBalance : String;
  BufferSize  : String;
  FieldValues : String;
  SourceServer: String;
  ServerName  : String;
  lst         : TStrings
  ): String;
var
  ProcName  : String;
  Page      : TStringList;
  boSuccess : Boolean;
  lstCGG    : TStringList;
begin
  ProcName  := 'MakeSaveAsServerFinishedPage';
  Try
    ActionURL    := DeEncryptString(EncryptString(Trim(ActionURL)));
    DatabaseName := DeEncryptString(EncryptString(Trim(DatabaseName)));
    TableName    := DeEncryptString(EncryptString(Trim(TableName)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    Role         := DeEncryptString(EncryptString(Trim(Role)));
    Page         := TStringList.Create();
    Try

      Try
        boSuccess := False;
        If Not FileExists(ExecutablePath+SourceServer) Then
        Begin
          boSuccess := False;
        End
        Else
        Begin
          If FileExists(ExecutablePath+ServerName) Then DeleteFile(ExecutablePath+ServerName);
          CopyFile(PChar(ExecutablePath+SourceServer),PChar(ExecutablePath+ServerName),False);
          If FileExists(ExecutablePath+Copy(SourceServer,1,Length(SourceServer)-3)+'cgg') Then
          Begin
            CopyFile(
              PChar(ExecutablePath+Copy(SourceServer,1,Length(SourceServer)-3)+'cgg'),
              PChar(ExecutablePath+Copy(ServerName,1,Length(ServerName)-3)+'cgg'),
              False);
            lstCGG := TStringList.Create();
            Try
              lstCGG.Clear;
              lstCGG.LoadFromFile(ExecutablePath+Copy(ServerName,1,Length(ServerName)-3)+'cgg');
              lstCGG.Values['DatabaseName']           := DatabaseName;
              lstCGG.Values['TableName']              := TableName;
              lstCGG.Values['Role']                   := Role;
              lstCGG.Values['LoadBalance']            := LoadBalance;
              lstCGG.Values['BufferSize']             := BufferSize;
              lstCGG.Values['FieldValues']            := FieldValues;
              lstCGG.Values['ButtonShowDB']           := 'FALSE';
              lstCGG.Values['ButtonShowSaveAsServer'] := 'FALSE';
              lstCGG.Values['ButtonShowTable']        := 'FALSE';
              lstCGG.Values['ButtonShowFields']       := 'FALSE';
              lstCGG.Values['ButtonShowFilter']       := 'FALSE';
              lstCGG.Values['DBLoadDatabaseName']     := 'TRUE';
              lstCGG.Values['DBLoadFieldValues']      := 'TRUE';
              lstCGG.Values['DBLoadRole']             := 'TRUE';
              lstCGG.Values['DBLoadTableName']        := 'TRUE';
              lstCGG.Values['DBSaveDatabaseName']     := 'TRUE';
              lstCGG.Values['DBSaveFieldValues']      := 'TRUE';
              lstCGG.Values['DBSaveRole']             := 'TRUE';
              lstCGG.Values['DBSaveTableName']        := 'TRUE';
              lstCGG.Values['DebugDataPublish']       := 'FALSE';
              lstCGG.Values['ErrorsSaveToFile']       := 'FALSE';
              lstCGG.Values['HTMLHideSource']         := 'TRUE';
              lstCGG.SaveToFile(ExecutablePath+Copy(ServerName,1,Length(ServerName)-3)+'cgg');
              boSuccess := True;
            Finally
              lstCGG.Free;
            End;
          End;
        End;
      Except
        boSuccess := False;
      End;
      Page.SetText(PChar(PageHeader));
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('
'); Page.Add(''); If boSuccess Then Begin Page.Add('Your new server has been created!'); End Else Begin Page.Add('Creation of your new server failed!!!'); End; Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(URLScriptDir+ServerName); Page.Add(''); Page.Add('
'); If boSuccess Then Begin Page.Add('
'); End Else Begin Page.Add(''); End; Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); If boSuccess Then Begin Page.Add(''); End Else Begin Page.Add(''); End; Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Finally Page .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); RaiseError(UnitName,ProcName,E); End; End; End; Initialization Begin GlobalLogErrors := False; GlobalErrorLog := TStringList.Create(); RaiseErrors := False; ButtonShowSaveAsServer := 'TRUE'; ButtonShowDB := 'TRUE'; ButtonShowTable := 'TRUE'; ButtonShowFields := 'TRUE'; ButtonShowFilter := 'TRUE'; DBLoadDatabaseName := 'FALSE'; DBLoadFieldValues := 'FALSE'; DBLoadRole := 'FALSE'; DBLoadTableName := 'FALSE'; DBSaveDatabaseName := 'FALSE'; DBSaveFieldValues := 'FALSE'; DBSaveRole := 'FALSE'; DBSaveTableName := 'FALSE'; DBValueDatabaseName := ''; DBValueFieldValues := ''; DBValueRole := ''; DBValueTableName := ''; DebugDataPublish := 'FALSE'; ErrorsSaveToFile := 'FALSE'; FileListDelete := ''; FileListOfOnlyItems := ''; FileMetaDataDescription := ''; FileMetaDataKeywords := ''; HTMLHideSource := 'TRUE'; HTMLHideString := #13; HTMLMetaDataAuthor := 'Richard Maley'; HTMLMetaDataDesc := ''; HTMLMetaDataTitle := 'Advanced Delphi Systems Web Server'; HTMLPageFooter := ''; HTMLPageHeader := ''; HTMLTable2CellPadding := '7'; HTMLTable2CellSpacing := '1'; HTMLTable2ColorBackGrd := '#000080'; HTMLTable2ColorBorder := '#000080'; HTMLTable2ColorFont := '#F0FFF0'; HTMLTable2FontSize := '2'; HTMLTable3CellPadding := '7'; HTMLTable3CellSpacing := '1'; HTMLTable3ColorBackGrd := '#87CEFA'; HTMLTable3ColorBorder := '#000080'; HTMLTable3ColorFont := '#000080'; HTMLTable3FontSize := '2'; HTMLTableCellPadding := '7'; HTMLTableCellSpacing := '1'; HTMLTableColorBackGrd := '#6A5ACD'; HTMLTableColorBorder := '#8B0000'; HTMLTableColorFont := '#FFFFFF'; HTMLTableFontSize := '4'; HTMLTitleMain := ''; HTMLTitleMainColor := '#ff0000'; HTMLTitleMainSize := '10'; HTMLTitleSub := ''; HTMLTitleSubColor := '#ff0000'; HTMLTitleSubSize := '5'; ListOfItemsToDelete := ''; ListOfOnlyDisplayItems := ''; MeterCounterBold := 'TRUE'; MeterCounterColorBackGrd := '#00008B'; MeterCounterColorBorder := '#00FFFF'; MeterCounterColorFont := '#00FFFF'; MeterCounterFontSize := '2'; MeterCounterItalics := 'TRUE'; MeterCounterShow := 'TRUE'; MeterDateBold := 'TRUE'; MeterDateColorBackGrd := '#00008B'; MeterDateColorBorder := '#00FFFF'; MeterDateColorFont := '#00FFFF'; MeterDateFontSize := '2'; MeterDateItalics := 'TRUE'; MeterDateShow := 'TRUE'; MeterTimeBold := 'TRUE'; MeterTimeColorBackGrd := '#00008B'; MeterTimeColorBorder := '#00FFFF'; MeterTimeColorFont := '#00FFFF'; MeterTimeFontSize := '2'; MeterTimeItalics := 'TRUE'; MeterTimeShow := 'TRUE'; URLAction := ''; URLAction2 := ''; URLAction3 := ''; URLAction4 := ''; URLBackground := '/BACKGR003.JPG'; URLImageTop := '/ESA001.GIF'; URLScriptDir := '/scripts/'; DebugDataPublish := 'TRUE'; ExecutableName := ExtractFileName(ParamStr(0)); FileConfiguration := Copy(ExecutableName,1,Length(ExecutableName)-3)+'cgg'; ExecutablePath := Trim(ExtractFilePath(ParamStr(0))); If ExecutablePath <> '' Then Begin If Copy(ExecutablePath,Length(ExecutablePath),1) <> '\' Then ExecutablePath := ExecutablePath + '\'; End; Errors := TStringList.Create(); Errors.Clear; ConfigParams := TStringList.Create(); If FileExists(ExecutablePath+FileConfiguration) Then Begin ConfigParams.LoadFromFile(ExecutablePath+FileConfiguration); End; ConfigParamsWas := ConfigParams.Text; MakeAccessDenied; SyncConfigParams(ButtonShowSaveAsServer ,'ButtonShowSaveAsServer' ); SyncConfigParams(ButtonShowDB ,'ButtonShowDB' ); SyncConfigParams(ButtonShowTable ,'ButtonShowTable' ); SyncConfigParams(ButtonShowFields ,'ButtonShowFields' ); SyncConfigParams(ButtonShowFilter ,'ButtonShowFilter' ); SyncConfigParams(DBLoadDatabaseName ,'DBLoadDatabaseName' ); SyncConfigParams(DBLoadFieldValues ,'DBLoadFieldValues' ); SyncConfigParams(DBLoadRole ,'DBLoadRole' ); SyncConfigParams(DBLoadTableName ,'DBLoadTableName' ); SyncConfigParams(DBSaveDatabaseName ,'DBSaveDatabaseName' ); SyncConfigParams(DBSaveFieldValues ,'DBSaveFieldValues' ); SyncConfigParams(DBSaveRole ,'DBSaveRole' ); SyncConfigParams(DBSaveTableName ,'DBSaveTableName' ); SyncConfigParams(DBValueDatabaseName ,'DBValueDatabaseName' ); SyncConfigParams(DBValueFieldValues ,'DBValueFieldValues' ); SyncConfigParams(DBValueRole ,'DBValueRole' ); SyncConfigParams(DBValueTableName ,'DBValueTableName' ); SyncConfigParams(DebugDataPublish ,'DebugDataPublish' ); SyncConfigParams(ErrorsSaveToFile ,'ErrorsSaveToFile' ); SyncConfigParams(FileHTMLPageFooter ,'FileHTMLPageFooter' ); SyncConfigParams(FileHTMLPageHeader ,'FileHTMLPageHeader' ); SyncConfigParams(FileListDelete ,'FileListDelete' ); SyncConfigParams(FileListOfOnlyItems ,'FileListOfOnlyItems' ); SyncConfigParams(FileMetaDataDescription ,'FileMetaDataDescription' ); SyncConfigParams(FileMetaDataKeywords ,'FileMetaDataKeywords' ); SyncConfigParams(HTMLHideSource ,'HTMLHideSource' ); SyncConfigParams(HTMLMetaDataAuthor ,'HTMLMetaDataAuthor' ); SyncConfigParams(HTMLMetaDataTitle ,'HTMLMetaDataTitle' ); SyncConfigParams(HTMLTable2CellPadding ,'HTMLTable2CellPadding' ); SyncConfigParams(HTMLTable2CellSpacing ,'HTMLTable2CellSpacing' ); SyncConfigParams(HTMLTable2ColorBackGrd ,'HTMLTable2ColorBackGrd' ); SyncConfigParams(HTMLTable2ColorBorder ,'HTMLTable2ColorBorder' ); SyncConfigParams(HTMLTable2ColorFont ,'HTMLTable2ColorFont' ); SyncConfigParams(HTMLTable2FontSize ,'HTMLTable2FontSize' ); SyncConfigParams(HTMLTable3CellPadding ,'HTMLTable3CellPadding' ); SyncConfigParams(HTMLTable3CellSpacing ,'HTMLTable3CellSpacing' ); SyncConfigParams(HTMLTable3ColorBackGrd ,'HTMLTable3ColorBackGrd' ); SyncConfigParams(HTMLTable3ColorBorder ,'HTMLTable3ColorBorder' ); SyncConfigParams(HTMLTable3ColorFont ,'HTMLTable3ColorFont' ); SyncConfigParams(HTMLTable3FontSize ,'HTMLTable3FontSize' ); SyncConfigParams(HTMLTableCellPadding ,'HTMLTableCellPadding' ); SyncConfigParams(HTMLTableCellSpacing ,'HTMLTableCellSpacing' ); SyncConfigParams(HTMLTableColorBackGrd ,'HTMLTableColorBackGrd' ); SyncConfigParams(HTMLTableColorBorder ,'HTMLTableColorBorder' ); SyncConfigParams(HTMLTableColorFont ,'HTMLTableColorFont' ); SyncConfigParams(HTMLTableFontSize ,'HTMLTableFontSize' ); SyncConfigParams(HTMLTitleMain ,'HTMLTitleMain' ); SyncConfigParams(HTMLTitleMainColor ,'HTMLTitleMainColor' ); SyncConfigParams(HTMLTitleMainSize ,'HTMLTitleMainSize' ); SyncConfigParams(HTMLTitleSub ,'HTMLTitleSub' ); SyncConfigParams(HTMLTitleSubColor ,'HTMLTitleSubColor' ); SyncConfigParams(HTMLTitleSubSize ,'HTMLTitleSubSize' ); SyncConfigParams(MeterCounterBold ,'MeterCounterBold' ); SyncConfigParams(MeterCounterColorBackGrd,'MeterCounterColorBackGrd'); SyncConfigParams(MeterCounterColorBorder ,'MeterCounterColorBorder' ); SyncConfigParams(MeterCounterColorFont ,'MeterCounterColorFont' ); SyncConfigParams(MeterCounterFontSize ,'MeterCounterFontSize' ); SyncConfigParams(MeterCounterItalics ,'MeterCounterItalics' ); SyncConfigParams(MeterCounterShow ,'MeterCounterShow' ); SyncConfigParams(MeterDateBold ,'MeterDateBold' ); SyncConfigParams(MeterDateColorBackGrd ,'MeterDateColorBackGrd' ); SyncConfigParams(MeterDateColorBorder ,'MeterDateColorBorder' ); SyncConfigParams(MeterDateColorFont ,'MeterDateColorFont' ); SyncConfigParams(MeterDateFontSize ,'MeterDateFontSize' ); SyncConfigParams(MeterDateItalics ,'MeterDateItalics' ); SyncConfigParams(MeterDateShow ,'MeterDateShow' ); SyncConfigParams(MeterTimeBold ,'MeterTimeBold' ); SyncConfigParams(MeterTimeColorBackGrd ,'MeterTimeColorBackGrd' ); SyncConfigParams(MeterTimeColorBorder ,'MeterTimeColorBorder' ); SyncConfigParams(MeterTimeColorFont ,'MeterTimeColorFont' ); SyncConfigParams(MeterTimeFontSize ,'MeterTimeFontSize' ); SyncConfigParams(MeterTimeItalics ,'MeterTimeItalics' ); SyncConfigParams(MeterTimeShow ,'MeterTimeShow' ); SyncConfigParams(URLAction ,'URLAction' ); SyncConfigParams(URLAction2 ,'URLAction2' ); SyncConfigParams(URLAction3 ,'URLAction3' ); SyncConfigParams(URLAction4 ,'URLAction4' ); SyncConfigParams(URLBackground ,'URLBackground' ); SyncConfigParams(URLImageTop ,'URLImageTop' ); SyncConfigParams(URLScriptDir ,'URLScriptDir' ); sgBoolean := DBLoadDatabaseName; If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then DBValueDatabaseName := ''; sgBoolean := DBLoadFieldValues; If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then DBValueFieldValues := ''; sgBoolean := DBLoadRole; If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then DBValueRole := ''; sgBoolean := DBLoadTableName; If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then DBValueTableName := ''; {T} FileToStr(HTMLMetaDataKeywords ,FileMetaDataKeywords ); {T} FileToStr(HTMLMetaDataDesc ,FileMetaDataDescription ); {T} FileToStr(ListOfOnlyDisplayItems ,FileListOfOnlyItems ); {T} FileToStr(ListOfItemsToDelete ,FileListDelete ); {T} FileToStr(HTMLPageHeader ,FileHTMLPageHeader ); {T} FileToStr(HTMLPageFooter ,FileHTMLPageFooter ); End; Finalization Begin WriteErrors; If GlobalLogErrors Then SaveErrorLog; sgBoolean := DBSaveDatabaseName; If UpperCase(Copy(sgBoolean,1,1))= 'T' Then ConfigParams.Values['DBValueDatabaseName' ] := DBValueDatabaseName ; sgBoolean := DBSaveFieldValues; If UpperCase(Copy(sgBoolean,1,1))= 'T' Then ConfigParams.Values['DBValueFieldValues' ] := DBValueFieldValues ; sgBoolean := DBSaveRole; If UpperCase(Copy(sgBoolean,1,1))= 'T' Then ConfigParams.Values['DBValueRole' ] := DBValueRole ; sgBoolean := DBSaveTableName; If UpperCase(Copy(sgBoolean,1,1))= 'T' Then ConfigParams.Values['DBValueTableName' ] := DBValueTableName ; If (Not FileExists(ExecutablePath+FileConfiguration)) Or (ConfigParamsWas <> ConfigParams.Text) Then Begin ConfigParams.SaveToFile(ExecutablePath+FileConfiguration); End; ConfigParams.Free; End; end. //