31. oktober 2002 - 14:48
Der er
4 kommentarer og
3 løsninger
AllowBypassKey Part Two
Dette er mere eller mindre en forlængelse af spørgsmål
http://www.eksperten.dk/spm/275072 som jeg oprettede i sidste uge. Jeg spurgte til noget sikkerhed ved Access databaser men jeg har stadig nogle spørgsmål.
Når man starter min database går den igennem en form som checker brugernavnet og lukker dig ind hvis du har tilladelse. MEN så er der jo lige shift der leder en uden om alt hvad der hedder start-up og jeg fik at vide at jeg kunne bruge følgende information:
http://www.mvps.org/access/general/gen0040.htmmen det kan jeg bare ikke. Ikke at jeg ikke kan bruge det, det kan jeg sikkert men jeg fatter ikke en skid :) for nu at sige det som det er. Hvordan skal jeg ligge denne kode ind i databasen der låser BypassKey'en og kan jeg gøre det på den enkelte database uden at skulle gøre det på alle de andre databaser jeg arbejder på, OG i hvordan skal det forstås med at jeg skal lade en bagdør være åben (jeg ved godt at jeg skal have en bagdør men hvordan gøres det). I det hele taget ønskes hjælp i et let forståeligt sprog.
Mange mange tak Weinreich
31. oktober 2002 - 17:01
#1
Ok nu har jeg siddet og rodet med det her i MEGET LANG tid. Jeg har fundet frem til at det er en property på selve databasen jeg skal have ændret. Jeg regner med at jeg laver en form som har en knap der ændrer denne property. Så laver jeg en MDE-fil og trykker derefter på knappen så den bliver låst og ikke kan låses op igen, men jeg mangler den kode som skal lægges på knappen. Hvordan laver jeg den kode som skal gå ind og oprette en property og appende den til databasen? Jeg vil meget gerne have hjælp.
31. oktober 2002 - 23:06
#3
Jeg kan ikke huske hvor jeg har nedenstående kode fra, men det er ikke noget som jeg selv har lavet.
Sæt det ind i et modul, og lav to makroer. Én som afspiller koden: fhpSetDistributeProperties() og én som afspiller koden: fhpremoveDistributeProperties(). Når du skal lukke databasen, så man ikke kan komme ind til koden, skal du først gå ind i Funktioner-Start og fjerne alle vingerne. Derefter skal du afspille den makro, som afspiller koden fhpSetDistributeProperties().
Du skal endelig huske navnet på makroen som afspiller koden fhpremoveDistributeProperties(), for det er din eneste vej ind i databasen(bagdøren). Hvis du skal åbne databasen igen skal du fra menuen Start-Kør... skrive:
c:\....\access.exe "c:\...\mindatabase.mdb" /x minmakro
hvor første del er stien til access og anden del er stien til din database.
minmakro er makroen, som afspiller fhpremoveDistributeProperties().
Public Function fhpChangeProperty(strPropName As String, varPropType As Variant, _
varPropValue As Variant) As Integer
' -----------------------------------------------------------------------------------
' Purpose : Changes properties on applicationobject
' Called from :
' Returns :
' Remarks :
' -----------------------------------------------------------------------------------
On Error GoTo Error_fhpChangeProperty
Dim dbs As DAO.database
Dim prp As DAO.Property
Const conPropNotFoundError As Long = 3270
Set dbs = CurrentDb
dbs.Properties(strPropName) = varPropValue
fhpChangeProperty = True
Exit_fhpChangeProperty:
Set dbs = Nothing 'Release object
Exit Function
Error_fhpChangeProperty:
If Err = conPropNotFoundError Then 'Prop not found
Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue)
dbs.Properties.Append prp
Resume Next
Else 'Unkown error
fhpChangeProperty = False
Resume Exit_fhpChangeProperty
End If
End Function
Public Function fhpSetDistributeProperties() As Integer
' -----------------------------------------------------------------------------------
' Purpose : Sets different startupproperties for this applikation
' Called from :
' Returns :
' Remarks : Prepare application for distribution
' -----------------------------------------------------------------------------------
Dim intX As Integer 'Test variable
fhpChangeProperty "StartupShowDBWindow", dbBoolean, False
'hpChangeProperty "StartupShowStatusBar", dbBoolean, True
'hpChangeProperty "AllowBuiltinToolbars", dbBoolean, False
'hpChangeProperty "AllowFullMenus", dbBoolean, False
fhpChangeProperty "AllowBreakIntoCode", dbBoolean, False
'hpChangeProperty "AllowSpecialKeys", dbBoolean, True
fhpChangeProperty "AllowBypassKey", dbBoolean, False
Application.SetOption ("Perform name AutoCorrect"), False 'No autocorrect
Application.SetOption ("Track name AutoCorrect info"), False 'No tracking of autocorrect
End Function 'SetStartupProperties
Public Function fhpRemoveDistributeProperties() As Integer
' -----------------------------------------------------------------------------------
' Purpose : Sets different startupproperties for this applikation
' Called from :
' Returns :
' Remarks : Undistributing application for further development
' -----------------------------------------------------------------------------------
fhpChangeProperty "StartupShowDBWindow", dbBoolean, True
fhpChangeProperty "StartupShowStatusBar", dbBoolean, True
fhpChangeProperty "AllowBuiltinToolbars", dbBoolean, True
fhpChangeProperty "AllowFullMenus", dbBoolean, True
fhpChangeProperty "AllowBreakIntoCode", dbBoolean, True
fhpChangeProperty "AllowSpecialKeys", dbBoolean, True
fhpChangeProperty "AllowBypassKey", dbBoolean, True
End Function 'RemoveDistributeProperties
01. november 2002 - 08:34
#5
Hej Weinreich,
Det er muligt, at du allerede har fået hjælp fra Hekla, men jeg vil lige supplere lidt, da jeg selv benytter en funktion, som er en del kortere:
Public Function AllowBypassKeys(Allow As Boolean)
'"AllowBypassKey", dbBoolean, True
Dim dbs As Database, prp As Property
Const conPropNotFoundError = 3270
Set dbs = CurrentDb
On Error GoTo Change_Err
dbs.Properties("AllowBypassKey") = Allow
Change_Bye:
Exit Function
Change_Err:
If Err = conPropNotFoundError Then 'property not found
Set prp = dbs.CreateProperty("AllowBypassKey", _
dbBoolean, Allow)
dbs.Properties.Append prp
Resume Next
Else
'unknown error
Resume Change_Bye
End If
End Function
Denne funktion kræver blot en reference til Microsoft DAO.
Du bruger den på den måde, at du f.eks. i din Autoexec-makro laver en handling: AfspilKode - AllowBypassKeys(False)
Du skal således bare starte databasen op lige inden du distribuere databasen til brugerne.
Mht en 'Bagdør', så plejer jeg at lave en makro, som jeg kalder Autokeys
I denne makro laver jeg 2 handlinger:
1) I kolonnen 'Makronavn' skrives: ^{F12}
Kolonnen makronavn frembringes ved at gå i menuen Vis->Makronavn
Handling sættes til: AfspilKode med argumentet AllowBypassKeys(True)
2) Beep
Derved kan du altid trykke Ctrl+F12 for at slå ByPasskeys til igen. Derefter kan du lukke databasen og starte den op igen med Shift-tasten nede.
01. november 2002 - 08:40
#6
Hvis der IKKE kommer et Beep, når du trykker Ctrl+F12, så skyldes det muligvis at din Access ikke genkender AutoKeys som din Genvejstast-makro.
Dette problem løser du ved at gå i Debug-vinduet (Ctrl+G) og skrive:
Application.Setoption "Key assignment macro","Autokeys"
Det er en god ide at tage backup af databasen inden dette aktiveres.
Men sålænge du ikke har sat kryds i "Tillad Access specialtaster" i Start-dialogboksen, så kan du jo altid komme til VBA-vinduet (f.eks. med Ctrl+G) og skrive: AllowBypassKeys(true)