DEFINE CLASS oUserCtrl AS SESSION DATASESSION = 2 PROTECTED cCurrentUser, nUserCount, DBPath, nMaxUsers, cEXEDir, lPresetEnv cCurrentUser = "" nUserCount = 0 DBPath = "" nMaxUser = 0 cEXEDir = ADDBS(JUSTPATH(APPLICATION.ServerName)) lPresetEnv = .F. PROCEDURE DESTROY CLOSE TABLE ALL ENDPROC PROCEDURE DBPath_ASSIGN LPARAMETER tcDBPath IF NOT DIRECTORY(tcDBPath) MD (tcDBPath) ENDIF THIS.DBPath = tcDBPath ENDPROC PROCEDURE PresetEnv IF TYPE("gcAppName") # "C" &&ERROR OCCURED RETURN .F. ENDIF SET EXCLUSIVE OFF SET TALK OFF SET RESOURCE OFF OPEN DATABASE (THIS.cEXEDir + "Data\UserCtrl") SHARED USE UserCtrl!tblDBPath AGAIN SHARED IN 0 SELECT tblDBPath LOCATE FOR cAppName = tcAppName IF FOUND() THIS.DBPath = ADDBS(cDBPath) + "OnlineUser\" ELSE QUIT ENDIF USE UserCtrl!tblPrgLicense IN 0 NOUPDATE LOCATE FOR cAppName = tcAppName IF FOUND() THIS.nMaxUsers = nMaxUsers ELSE QUIT ENDIF USE IN SELECT("tblPrgLicense") THIS.lPresetEnv = .T. ENDPROC PROCEDURE GetUserCount RETURN THIS.nUserCount ENDPROC PROCEDURE LoginUser LPARAMETER tcUser LOCAL lnUserCount, lcLoginTxt, lcLoginID WITH THIS IF NOT .lPresetEnv .PresetEnv() ENDIF lnUserCount = 0 IF NOT USED("tblUserCtrl") USE UserCtrl!tblUserCtrl AGAIN SHARED IN 0 ENDIF SELECT tblUserCtrl SCAN FOR NOT EMPTY(cLoginID) lcLoginTxt = .DBPath + cLoginID + ".txt" IF FOPEN(lcLoginTxt) ERASE (lcLoginTxt) REPLACE cUserName WITH "" ; cLoginID WITH "" ELSE lnUserCount = lnUserCount + 1 ENDIF ENDSCAN .nUserCount = lnUserCount IF lnUserCount < .nMaxUsers LOCATE FOR EMPTY(cLoginID) IF NOT FOUND() APPEND BLANK ENDIF lcLoginID = SYS(2015) REPLACE cUserName WITH tcUser ; cLoginID WITH lcLoginID FCREATE(.DBPath + lcLoginID + ".txt") .nUserCount = .nUserCount + 1 USE IN SELECT("tblUserCtrl") RETURN "PASS-" ELSE USE IN SELECT("tblUserCtrl") RETURN "MAXIMUM-" ENDIF ENDWITH ENDPROC ENDDEFINEAny ideas??