www.pudn.com > Family.zip > DataBase.bas
Attribute VB_Name = "DataBase1"
Option Explicit
'Declaring Global Variables
Public NewUser_LoginName As String
Public NewUser_Password As String
Public NewUser_AccessLevel As String
'Stores The Login Name Of The User Currently Logged In
Public Current_LoginName As String
'Stores The Password Of The User Currently Logged In
Public Current_Password As String
'Stores The Access Level Of The User Currently Logged In
Public Current_AccessLevel As String
'Stores The Name Of The Database
Public Database_Name As String
'Stores The Database Password
Public Database_Password As String
'Stores The Database Path
Public Database_Path As String
'Tells If the A New database was found
Public New_Database_Found As Boolean
'Stores The New Database Location
Public New_Database_Location As String
'Tells If A Record is been edited in frmEdit
Public frmEdit_Editting As Boolean
'============================================================================================================
'Call Recreate Database an Add_To_User_Dbase
'============================================================================================================
Public Function Recreate_DB() As Boolean
If DirectoryExist(Database_Path) <> True Then
Recreate_DB
Exit Function
End If
'Recreate The Database
If Recreate_Database_File(Database_Path & "\" & Database_Name) = True Then
'Creates A New Database Called Admin
If Create_New_User_Dbase("Admin") = True Then
'Add Defafault Values To the "Admin" Table
If Add_To_User_Dbase("Admin", "Admin", "Administrator") = True Then
'Everything seems OK So Set Recreate_DB = True
Recreate_DB = True
Exit Function
Else 'Unable To Add "Admin" to the Database
Recreate_DB = False
Exit Function
End If
Else 'Unable To Create_New_User_Dbase("Admin")
Recreate_DB = False
Exit Function
End If
Else 'Unable To Recreate_Database_File(Database_Path & "\" & Database_Name)
Recreate_DB = False
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Used To Recreate The Database File
'============================================================================================================
Private Function Recreate_Database_File(dbName As String) As Boolean
Dim MsgAns As VbMsgBoxResult
Dim tdfNewTable As TableDef
Dim newDb As Database
On Error GoTo CreateDB_Err
'Check If The Database File Exist
If Dir(dbName) <> "" Then
MsgAns = MsgBox("Database - " & dbName & " already exist." & _
vbNewLine & "Are you sure that you want to recreate it?", vbCritical + vbYesNo, "Create Database")
If MsgAns = vbYes Then
'Delete File
Kill (dbName)
Else
Recreate_Database_File = False
Exit Function
End If
End If
'Create A New Database "PasswordProtected"
Set newDb = CreateDatabase(dbName, dbLangGeneral & ";pwd=" & Database_Password)
'Create a new tabe called "Users"
'Used to store informations about the Users
Set tdfNewTable = newDb.CreateTableDef("Users")
'Add Fields to the "Users" Table
With tdfNewTable
.Fields.Append .CreateField("LoginName", dbText, 20)
.Fields.Append .CreateField("Password", dbText, 20)
.Fields.Append .CreateField("AccessLevel", dbText, 13)
.Fields.Append .CreateField("LoggedIn", dbBoolean)
End With
'Add the Users table to the database
newDb.TableDefs.Append tdfNewTable
newDb.TableDefs.Refresh
'Close The Database
newDb.Close
Recreate_Database_File = True
Exit Function
CreateDB_Err:
If Err.Number <> 0 Then
MsgBox "Error " & Str$(Err.Number) & " Creating Database." & Err.Description & vbNewLine & _
"Make sure that the database is not open by another user or application", vbCritical + vbOKOnly
Recreate_Database_File = False
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
' Adds The New User Records To The "Users" Table
'===========================================================================================================
Public Function Add_To_User_Dbase(New_UName As String, New_UPass As String, New_UAccess As String) As Boolean
Dim TmpDb As Database
Dim TmpRecSet As Recordset
On Error GoTo AddToUserDBErr
Add_To_User_Dbase = False
'Open Database & Table (Shared)
Set TmpDb = OpenDatabase(Database_Path & "\" & Database_Name, False, False, ";pwd=" & Database_Password)
Set TmpRecSet = TmpDb.OpenRecordset("Users")
'Add New Fields With Encryption
TmpRecSet.AddNew
TmpRecSet.Fields("LoginName") = EncryptText(New_UName, Database_Password)
TmpRecSet.Fields("Password") = EncryptText(New_UPass, Database_Password)
TmpRecSet.Fields("AccessLevel") = EncryptText(New_UAccess, Database_Password)
TmpRecSet.Fields("LoggedIn") = False
TmpRecSet.Update
'Closing
TmpDb.Close
Set TmpRecSet = Nothing
Add_To_User_Dbase = True
AddToUserDBErr:
If Err.Number <> 0 Then
MsgBox "Error : " & Str(Err.Number) & " " & Err.Description, vbCritical + vbOKOnly
Add_To_User_Dbase = False
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
' Creates a new database for the new user
'============================================================================================================
Public Function Create_New_User_Dbase(UName As String) As Boolean
Dim NewUserDb As Database
Dim NewUserTable As TableDef
Dim NewField(1 To 9) As Field
Dim i As Integer
On Error GoTo CreateUserErr
'Set Create_New_User_Dbase = False
Create_New_User_Dbase = False
'Open Database
Set NewUserDb = OpenDatabase(Database_Path & "\" & Database_Name, False, False, ";pwd=" & Database_Password)
'Create a new tabe
Set NewUserTable = NewUserDb.CreateTableDef(UName)
'Add Fields to the New Table
Set NewField(1) = NewUserTable.CreateField("FirstName", dbText, 50)
NewField(1).AllowZeroLength = True
NewUserTable.Fields.Append NewField(1)
Set NewField(2) = NewUserTable.CreateField("LastName", dbText, 50)
NewField(2).AllowZeroLength = True
NewUserTable.Fields.Append NewField(2)
Set NewField(3) = NewUserTable.CreateField("Sex", dbText, 6)
NewField(3).AllowZeroLength = True
NewUserTable.Fields.Append NewField(3)
Set NewField(4) = NewUserTable.CreateField("Telephone", dbText, 20)
NewField(4).AllowZeroLength = True
NewUserTable.Fields.Append NewField(4)
Set NewField(5) = NewUserTable.CreateField("Address", dbText, 50)
NewField(5).AllowZeroLength = True
NewUserTable.Fields.Append NewField(5)
Set NewField(6) = NewUserTable.CreateField("City_State", dbText, 50)
NewField(6).AllowZeroLength = True
NewUserTable.Fields.Append NewField(6)
Set NewField(7) = NewUserTable.CreateField("ZipCode", dbText, 11)
NewField(7).AllowZeroLength = True
NewUserTable.Fields.Append NewField(7)
Set NewField(8) = NewUserTable.CreateField("EmailAddress", dbText, 50)
NewField(8).AllowZeroLength = True
NewUserTable.Fields.Append NewField(8)
Set NewField(9) = NewUserTable.CreateField("Relation", dbText, 40)
NewField(9).AllowZeroLength = True
NewUserTable.Fields.Append NewField(9)
'Add The New Table to the database
NewUserDb.TableDefs.Append NewUserTable
'Closing
NewUser_LoginName = ""
NewUser_Password = ""
NewUserDb.Close
For i = 1 To 9
Set NewField(i) = Nothing
Next i
Set NewUserTable = Nothing
Create_New_User_Dbase = True
CreateUserErr:
If Err.Number <> 0 Then
MsgBox "Error " & Str$(Err.Number) & " Creating Database." & vbCrLf & _
Err.Description, vbCritical + vbOKOnly
Create_New_User_Dbase = False
Err.Clear
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Creates New User
'============================================================================================================
Public Function Create_User(User_Name As String, Pwd As String, Access_Lvl As String) As Boolean
If (Table_Exist(User_Name) = False) And (User_Exist(User_Name) = False) Then
If Add_To_User_Dbase(User_Name, Pwd, Access_Lvl) = True Then
If Create_New_User_Dbase(User_Name) = True Then
Create_User = True
Exit Function
Else
Create_User = False
Exit Function
End If
Else
Create_User = False
Exit Function
End If
Else
Create_User = False
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Used To Check If Database Is OK
'============================================================================================================
Public Function Database_Ok(dbName As String) As Boolean
Dim tstDB As Database
Dim tstRecSet As Recordset
On Error GoTo DatabaseErr
'Open The Database
Set tstDB = OpenDatabase(dbName, False, True, ";pwd=" & Database_Password)
'Open A Table that should always be in the database
'This Table Stores Information on All Users
Set tstRecSet = tstDB.OpenRecordset("Users")
'Refresh Table
tstRecSet.Fields.Refresh
tstRecSet.MoveFirst
tstRecSet.Fields.Refresh
'Close
tstRecSet.Close
tstDB.Close
'Set Database_Ok = true
Database_Ok = True
Exit Function
DatabaseErr:
If Err.Number <> 0 Then
Database_Ok = False
MsgBox "Error : " & Str(Err.Number) & " " & Err.Description, vbCritical
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Checks If The Database Exist
'============================================================================================================
Public Function Database_Found(Dbase_Path As String) As Boolean
If Dir(Dbase_Path & "\" & Database_Name) <> "" Then
Database_Found = True
Else
Database_Found = False
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Used To Check If A Database Table Is OK
'============================================================================================================
Public Function Table_Ok(dbName As String, Table As String) As Boolean
Dim tDB As Database
Dim tRecSet As Recordset
On Error GoTo TableErr
If Database_Ok(dbName) = True Then
'Open Database (Shared-Read Only)
Set tDB = OpenDatabase(dbName, False, True, ";pwd=" & Database_Password)
'Open Table
Set tRecSet = tDB.OpenRecordset(Table)
'Refresh Table
tRecSet.Fields.Refresh
'Closing Database and Recordset
tRecSet.Close
tDB.Close
Table_Ok = True
Exit Function
Else
Table_Ok = False
Exit Function
End If
TableErr:
If Err.Number <> 0 Then
Table_Ok = False
MsgBox "Error : " & Str(Err.Number) & " " & Err.Description, vbCritical
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Counts the Records within a Table
'============================================================================================================
Public Function RecCount(db_Name As String, rTable As String) As Long
Dim rcDB As Database
Dim rcRecSet As Recordset
On Error GoTo RecCountErr
If Table_Ok(db_Name, rTable) = True Then
'Opening Database and Recordset
Set rcDB = OpenDatabase(db_Name, False, True, ";pwd=" & Database_Password)
Set rcRecSet = rcDB.OpenRecordset(rTable)
rcRecSet.Fields.Refresh
'Closing Database and Recordset
rcRecSet.Close
rcDB.Close
RecCount = rcRecSet.RecordCount
Else
RecCount = -1
End If
RecCountErr:
If Err.Number <> 0 Then
RecCount = -1
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Counts The Amount of Administrators in User's Table
'============================================================================================================
Public Function AdminCount() As Long
Dim aDb As Database
Dim aRecSet As Recordset
On Error GoTo AdminCountErr
'Open Database Shared-Readonly
Set aDb = OpenDatabase(Database_Path & "\" & Database_Name, False, True, ";pwd=" & Database_Password)
Set aRecSet = aDb.OpenRecordset("Users")
AdminCount = 0
aRecSet.Fields.Refresh
Do While Not aRecSet.EOF
If aRecSet.Fields("AccessLevel") = EncryptText("Administrator", Database_Password) Then
AdminCount = AdminCount + 1
End If
aRecSet.MoveNext
Loop
aRecSet.Close
aDb.Close
AdminCountErr:
If Err.Number <> 0 Then
AdminCount = -1
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Used to check if a record exist
'============================================================================================================
Public Function Record_Exist(Table As String, F_Name As String, L_Name As String, Relation_ As String) As Boolean
Dim rDB As Database
Dim rRecSet As Recordset
'Check if the table is OK
If (Table_Ok(Database_Path & "\" & Database_Name, Table) = True) Then
'Check The Amount of records in the Table
If RecCount(Database_Path & "\" & Database_Name, Table) = 1 Then
'Since there is no records
Record_Exist = False
Exit Function
End If
Set rDB = OpenDatabase(Database_Path & "\" & Database_Name, False, True, ";pwd=" & Database_Password)
Set rRecSet = rDB.OpenRecordset(Table)
'Refresh
rRecSet.Fields.Refresh
Do While Not rRecSet.EOF
If (rRecSet.Fields("FirstName") = F_Name) And _
(rRecSet.Fields("LastName") = L_Name) And _
(rRecSet.Fields("Relation") = Relation_) Then
Record_Exist = True
Exit Function
End If
rRecSet.MoveNext
Loop
'Since it reaches here
Record_Exist = False
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Checks if a recordset is empty
'============================================================================================================
Public Function EmptyRS(RS As Recordset) As Boolean
EmptyRS = ((RS.BOF = True) And (RS.EOF = True))
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Checks If A Table Exists
'============================================================================================================
Public Function Table_Exist(TableName As String) As Boolean
Dim i As Integer
Dim db As Database
On Error GoTo Table_Err
Table_Exist = False
'Open the password protected database
Set db = OpenDatabase(Database_Path & "\" & Database_Name, False, True, ";pwd=" & Database_Password)
For i = 0 To db.TableDefs.Count - 1
If UCase(db.TableDefs(i).Name) = UCase(TableName) Then
Table_Exist = True
db.Close
Exit Function
End If
Next i
Table_Err:
If Err.Number <> 0 Then
Table_Exist = False
Err.Clear
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'This Function is used to search the "Users" table to see if
'specific user exist
'============================================================================================================
Public Function User_Exist(U_Name As String) As Boolean
Dim usrDB As Database
Dim usrRec As Recordset
Dim tmpStr As String
On Error GoTo UserExistErr
User_Exist = False
'Open the password protected database
Set usrDB = OpenDatabase(Database_Path & "\" & Database_Name, False, True, ";pwd=" & Database_Password)
Set usrRec = usrDB.OpenRecordset("Users")
usrRec.Fields.Refresh
usrRec.MoveFirst
If usrRec.RecordCount < 1 Then
User_Exist = False
usrRec.Close
usrDB.Close
Exit Function
Else
Do While Not usrRec.EOF
tmpStr = DecryptText(usrRec.Fields("LoginName"), Database_Password)
If (LCase(tmpStr)) = (LCase(U_Name)) Then
User_Exist = True
usrRec.Close
usrDB.Close
Exit Function
End If
usrRec.MoveNext
Loop
End If 'usrRec.RecordCount > 0
UserExistErr:
If Err.Number <> 0 Then
MsgBox "Error : " & Err.Description & " " & Err.Number
User_Exist = False
Set usrRec = Nothing
Set usrDB = Nothing
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'This Function Is Used To Remove A Table From The Database
'============================================================================================================
Public Function Remove_Table(TableName As String) As Boolean
Dim dropDB As Database
Dim dropTableDef
Dim dropDB_Open As Boolean
On Error GoTo DropError
dropDB_Open = False
Set dropDB = OpenDatabase(Database_Path & "\" & Database_Name, False, False, ";pwd=" & Database_Password)
dropDB_Open = True
dropDB.Execute "DROP TABLE " & TableName
dropDB.Close
Remove_Table = True
Exit Function
DropError:
If Err.Number <> 0 Then
Remove_Table = False
MsgBox "Error " & Format$(Err.Number) & " dropping table." & _
Err.Description, vbCritical + vbOKOnly
Set dropDB = Nothing
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Used To Remove A Specific user's Record from the "Users"
'Table
'============================================================================================================
Function Delete_User_Record(UName As String) As Boolean
Dim RS As Recordset
Dim db As Database
On Error GoTo Delete_Err
'Open Database The Password Protected Database
Set db = OpenDatabase(Database_Path & "\" & Database_Name, False, False, ";pwd=" & Database_Password)
'Open the User table
Set RS = db.OpenRecordset("SELECT * FROM Users WHERE LoginName = '" & Apostrophe(EncryptText(UName, Database_Password)) & "'")
RS.Fields.Refresh
'Check If The User Is Logged In
If RS.Fields("LoggedIN") = False Then
With RS
.Delete 'Delete it
.Close 'Close it
End With
db.Close
Delete_User_Record = True
Else
MsgBox UName & " is currently logged in."
End If
Delete_Err:
If Err.Number <> 0 Then
Delete_User_Record = False
Err.Clear
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'Used To Completely Remove A User
'Remove the user's from record from the "User's" Table
'Remove The Table That matches the UserName
'============================================================================================================
Public Function Remove_User(User_Name As String) As Boolean
'First Check if the The User's Record and
'check if The User Table is ok
Remove_User = False
If (User_Exist(User_Name) = True) And (Table_Ok(Database_Path & "\" & Database_Name, User_Name) = True) Then
If (Delete_User_Record(User_Name) = True) And (Remove_Table(User_Name) = True) Then
Remove_User = True
Exit Function
Else
Remove_User = False
Exit Function
End If
Else
Remove_User = False
Exit Function
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'This Function is used to Rename a Database Table 'Used
'============================================================================================================
Public Function Rename_Database_Table(Old_Table As String, New_Table As String) As Boolean
Dim DBase As Database
Dim TDef As TableDef
Dim Table_Found As Boolean
On Error GoTo Rename_Table_Error
Rename_Database_Table = False
Table_Found = False
'Open The Database
Set DBase = OpenDatabase(Database_Path & "\" & Database_Name, False, False, ";pwd=" & Database_Password)
'Search For The Matching Table
For Each TDef In DBase.TableDefs
If TDef.Name = Old_Table Then
Table_Found = True
Exit For
End If
Next
If Table_Found = True Then
'the varable is still holding the
'object reference here!
TDef.Name = New_Table
DBase.TableDefs.Refresh
End If
Set TDef = Nothing
DBase.Close
Set DBase = Nothing
Rename_Database_Table = True
Exit Function
Rename_Table_Error:
If Err.Number <> 0 Then
Rename_Database_Table = False
MsgBox "Error " & Str(Err.Number) & ". Unable to rename the table." & vbCrLf & Err.Description, vbCritical + vbOKOnly
Set TDef = Nothing
Set DBase = Nothing
Err.Clear
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'This Fuction Is Used To check If A USER is Logged in
'============================================================================================================
Public Function UserLoggedIn(theUserName As String) As Boolean
Dim tmpUserDb As Database
Dim tmpUserRec As Recordset
'On Error Resume Next
'Note : this method is used because The UserName is Unique
Set tmpUserDb = OpenDatabase(Database_Path & "\" & Database_Name, False, True, ";pwd=" & Database_Password)
Set tmpUserRec = tmpUserDb.OpenRecordset("SELECT * FROM Users WHERE LoginName = '" & Apostrophe(EncryptText(theUserName, Database_Password)) & "'")
tmpUserRec.Fields.Refresh
'Check If Found
If tmpUserRec.RecordCount > 0 Then
UserLoggedIn = tmpUserRec.Fields("LoggedIn")
'Closing
tmpUserRec.Close
tmpUserDb.Close
End If
End Function
'============================================================================================================
'============================================================================================================
'============================================================================================================
'This Function is used to check if someone is logged in
'============================================================================================================
Public Function Users_Logged_In() As Long
Dim sDbase As Database
Dim sRecordset As Recordset
On Error Resume Next
Set sDbase = OpenDatabase(Database_Path & "\" & Database_Name, False, True, ";pwd=" & Database_Password)
Set sRecordset = sDbase.OpenRecordset("SELECT * FROM Users")
sRecordset.Fields.Refresh
sRecordset.MoveFirst
Users_Logged_In = 0
Do While Not sRecordset.EOF
If sRecordset.Fields("LoggedIn") = True Then
Users_Logged_In = Users_Logged_In + 1
End If
sRecordset.MoveNext
Loop
sRecordset.Close
sDbase.Close
End Function
'============================================================================================================
'============================================================================================================