PDA

Visualizza versione completa : [ACCESS 2003] shift open


saretta000
21-02-2009, 13.23.13
ciao a tutti!
vorrei usare la proprietà AllowByPassKey.
Ho pensato di usarla come da codice seguente, e di sfruttare la presenza o meno di un file di testo (che funge un po' da password) per determinare se abilitare o meno lo shift+open.
E' un modo magari un po' stupido, lo ammetto, ma è quello più semplice ed immediato che mi è venuto in mente :inn:
La funzione viene eseguita mediante macro autoexec.
Visto che non mi fido per niente di Access ... :devil: ... e che devo essere sicurissima di poter accedere alle tabelle (il mio è un db per dataentry), qualcuno di esperto può dirmi se il mio codice è sicuro o se esiste anche solo la remota possibilità di non riuscire più ad accedervi?
Il codice funziona... ma non vorrei ci fosse qualche caso particolarissimo_ed_imprevedibile in cui non dovesse fungere... grazie a tutti, e scusate la diffidenza... ;)

Function sara_shift_open()

Dim db As Database
Dim prop As Property
Dim PropBool As Boolean
Const PropNotFound = 3270

Err = 0
Set db = CurrentDb()
PropBool = False
On Error GoTo CatturaErrore
db.Properties("AllowByPassKey") = PropBool 'Disattiva il tasto SHIFT

'uso file di testo come "password" per abilitare il tasto SHIFT (così il file access può essere aperto su una macchina in cui è presente il file.txt)
NomeFile = "C:\sblocca_shift.txt"
Err = 0
On Error Resume Next
Open NomeFile For Input As #1 'Apre file; se file non esiste dà errore 53
If Err = 0 Then
PropBool = True
db.Properties("AllowByPassKey") = PropBool 'Attiva il tasto SHIFT (vedi guida access)
Close #1 ' Chiude file.
End If

CatturaErrore:
If Err = PropNotFound Then
Set prop = db.CreateProperty("AllowByPassKey", 1, PropBool)
db.Properties.Append prop
Err = 0
Resume Next
End If

End Function

Franzo
23-02-2009, 10.16.22
Ciao!
Il codice funziona ma potresti renderlo più semplice, ad esempio per verificare se esiste un file non serve aprirlo, basta utilizzare la funzione DIR; oppure già che lo apri, fai controllare la presenza di un carattere in una determinata posizione all'interno del file (riempi il file di testo di caratteri casuali ma, nel carattere 4 della riga 6 mettici una X e verifica la presenza di quella)

Consiglio, gestisci gli errori solamente quando avvengono:
ad esempio all'inizio della routine metti On Error GoTo CatturaErrore e poi una cosa del genere

Exit Sub
CatturaErrore:
Select Case Err.Number
Case 0
........
Case 53
db.Properties("AllowByPassKey") = False
Case Else
Resume Next
End Select


In merito alla tua domanda, non è una grande protezione, ma considerando il livello di conoscenza informatica dell'90% della popolazione italiana direi che il tasto shift, se non premuto erroneamente, non l'avrebbero mai considerato.

Non ho mai provato ma c'è da dire che se io mi faccio un piccolo eseguibile dove seleziono un db e imposto la proprietà a TRUE, sparisce la protezione.

Ciao Ciao