MS Technical documentation strikes again!
Written 17 Feb 2004
This is an oddity I've encountered in the past. An entry in Microsoft's Technical Docs (help file and MSDN) states that a certain property is read/write. To read the value you do:
temp = object.propertyTo set (write) the value you do:
object.property = tempSeems rather straightforward doesn't it. However in practice it can go awry. 2 -3 years ago dummy entries were entered in the registry on a test machine. How, I don't know because I never assigned values to the functions that read the values.
Yesterday this oddity bit me again. This time it was within MS Access while checking the permissions available. The API provided doesn't reproduce what the GUI shows as the permissions assigned. Hence I did a bit of testing with my code to see if I could spot something I did wrong.
The testing produced this lovely code:
Sub CheckPermissions()
Dim db As Database
Dim con As Container
Dim doc As Document
Dim perms As Scripting.Dictionary
DBEngine.SystemDB = "W:\path\to\the\security.mdw"
Set db = DBEngine(0)(0)
Set perms = CreateObject("Scripting.Dictionary")
perms.Add "dbSecNoAccess", dbSecNoAccess
perms.Add "dbSecFullAccess", dbSecFullAccess
perms.Add "dbSecDelete", dbSecDelete
perms.Add "dbSecReadSec", dbSecReadSec
perms.Add "dbSecWriteSec", dbSecWriteSec
perms.Add "dbSecWriteOwner", dbSecWriteOwner
perms.Add "acSecFrmRptExecute", acSecFrmRptExecute
perms.Add "acSecFrmRptReadDef", acSecFrmRptReadDef
perms.Add "acSecFrmRptWriteDef", acSecFrmRptWriteDef
perms.Add "acSecMacExecute", acSecMacExecute
perms.Add "acSecMacReadDef", acSecMacReadDef
perms.Add "acSecMacWriteDef", acSecMacWriteDef
perms.Add "acSecModReadDef", acSecModReadDef
perms.Add "acSecModWriteDef", acSecModWriteDef
perms.Add "dbSecCreate", dbSecCreate
perms.Add "dbSecWriteDef", dbSecWriteDef
perms.Add "dbSecReadDef", dbSecReadDef
perms.Add "dbSecRetrieveData", dbSecRetrieveData
perms.Add "dbSecInsertData", dbSecInsertData
perms.Add "dbSecReplaceData", dbSecReplaceData
perms.Add "dbSecDeleteData", dbSecDeleteData
perms.Add "dbSecDBAdmin", dbSecDBAdmin
perms.Add "dbSecDBCreate", dbSecDBCreate
perms.Add "dbSecDBExclusive", dbSecDBExclusive
perms.Add "dbSecDBOpen", dbSecDBOpen
Debug.Print
Set con = db.Containers("Scripts")
'Set doc = con.Documents("Incentive")
' refresh to make sure the collection is current
con.Documents.Refresh
con.UserName = "Users" 'Hard code a user
Debug.Print con.UserName & " - " & con.Name '& ": " & doc.Name
Debug.Print "doc.Permissions: " & doc.Permissions
Debug.Print "doc.AllPermissions: " & doc.AllPermissions
Debug.Print "dbSecFullAccess: " & dbSecFullAccess
Debug.Print "Anded: " & (con.Permissions And perms.Item("dbSecFullAccess"))
For Each doc In con.Documents
For Each p In perms.Keys
msg = doc.Name & "[" & p & "]"
If (doc.Permissions And perms.Item(p)) > 0 Then
msg = msg & ": Yes"
ElseIf (doc.AllPermissions And perms.Item(p)) = 0 Then
msg = msg & ": No Access"
Else
msg = msg & ": No"
End If
Debug.Print msg
Next
Next
End Sub
Running it showed what I expected to see. However it had a strange side-effect. It reset all the permissions for the group. Actually I should say it revoked all the permissions for the group! Not nice, especially when people began calling that they could no longer access the DB.
It was much fun to reset the permissions because I had no idea what they were in the first place (I did not set them originally). This was with MS Access 2003.