Newsgroup: it.comp.lang.visual-basic
Titolo: MS Access

Ho creato un'applicazione i cui dbase sono creati in MSAccess.
Io vorrei che questi Mdb non possano essere aperti con Access ma che siano
protetti.
Non vorrei usare la password di accesso in quanto poi con il codice di VB
diventa problematico gestirla.
Ho provato con Accesso gruppi/utenti ma sinceramente non ho capito molto
come funziona....
nel senso che ho capito che fa riferimento al file *.mdw e che posso
creareun nuovo file di Workgroup.. ma se lo installo in un'altra macchina
come faccio, solo per quel file, fare riferimento ad un eventuale file .mdw
da me
creato?
Ho notato che queste impostazioni vengono poi applicate a tutti i file di
Access.
Ho installato un programma ed ho provato ad aprire un archivio in Access e
mi compare il seguente messaggio: "non si dispone delle necessarie
autorizzazioni per utilizzare l'oggetto (Path del file). Fare in modo che
l'amministratore o l'utente che ha creato l'oggetto stabilisca le
autorizzazioni appropriate."
E nella dir del file c'è anche un file .mdw
Io vorrei arrivare a tanto
Ho una confusione terribile.
Esiste qualche altro sistema?
Grazie
d.b.a. Andrea Pauselli - Pietralunga
--
Posted from 
velthur.krenet.it
 [194.143.128.45]
via Mailgate.ORG Server - 
http://www.mailgate.org

Per me, vai sul menų Strumenti -> Sicurezza -> Imposta password database e
scrivi una parola (ad esempio, pippo).
Da Vb, poi, basta che apri il database nel seguente modo:
Set Db = DBEngine.Workspaces(0).OpenDatabase("C:\PIPPO\PIPPO.MDB", False,
False, ";pwd=pippo")

 come funziona....
:-p
Dunque... l'argomento è piuttosto lungo e difficilmente può esaurirsi in un
messaggio sul NG.
Io lo conosco molto bene e lo gestisco con Access di Office97 e DAO 3.5 di
VB5 PRO (sono rimasto un po' indietro :), però non riuscirei (né avrei
tempo) di fornirti una spiegazione esaustiva (puoi semmai confidare in
qualcun altro più esperto e soprattutto armato di buona volontà e
disinteresse :). Quel che posso fare è cercare di riassumere più che posso
il mio Know-how (chiedendo scusa per le inevitabili imprecisioni che ne
deriveranno), suggerendoti in ogni caso di approfondire l'argomento
consultando la guida di Access e VB (che è poi quel che ho fatto io, da
autodidatta).
Il file .MDW a cui ti riferisci è un file di "workgroup" in cui sono
memorizzati degli account e le loro relative password; su una macchina
possono esserne presenti più d'uno, e li puoi creare e gestire con il
programma WRKGADM.EXE, mentre con Access crei gli account (menu Strumenti
-> Sicurezza -> Account utenti e password)
Quando installi Access la prima volta, lui ti installa un gruppo di lavoro
"predefinito" semplice semplice, che contiene un solo account, Admin (o
Amministratore), e senza password. Tu potresti anche aggiungere altri
account a questo workgroup, ma in generale è preferibile crearsi un
workgroup nuovo.
Quando avvi Access, lui carica il gruppo di lavoro al momento "attivo"
sulla macchina (quale sia quello "attivo" lo puoi verificare sempre col
programma WRKGADM.EXE); generalmente si tratta del gruppo di lavoro
predefinito (System.mdw), e poiché ha un account amministratore senza pwd.,
non ti chiede né account né pwd e parte direttamente. Se tu attivi un
diverso workgroup prima di avviare Access (sempre con WRKGADM.EXE), e in
questo wrg. tutti gli account hanno una pwd., Access, prima di partire, ti
chiede l'account e la pwd.
Ciò detto, passiamo ai database. Ogni oggetto di un file di db (tabella,
query, macro, il DB stesso...) ha un PROPRIETARIO, che può gestirlo come
meglio crede; ossia, nel momento in cui tu crei un db, l'account con cui
sei entrato in Access sarà il suo proprietario, e lo stesso quando crei una
tabella o ogni altro oggetto. Ora, il proprietario può decidere di
concedere a tutti gli altri account tutte o alcune o nessuna autorizzazione
alla lettura/scrittura/modifica dell'oggetto (tutte queste cose sono
gestibili da Access dal menù Strumenti - Sicurezza -> Autorizzazioni utenti
e password). In particolare, l'autorizzazione "amministrazione" per
l'oggetto consente ad ALTRI account di MODIFICARE le autorizzazioni settate
dallo stesso proprietario, quindi, se un proprietario vuole rimanere
l'unico gestore della cosa, dovrebbe NEGARE quantomeno l'autorizzazione
"aministrazione" a TUTTI gli altri account (fuorché a se stesso,
naturalmente :)
Queste informazioni vengono salvate nel file di DB.
E ora passiamo a VB. Quando vuoi aprire un DB protetto, devi prima accedere
al workgroup di interesse; per far questo, DAO 3.5 utilizza la seguente
sintassi:
Dim ws as Workspace
DBEngine.SystemDb = <path e nome file .mdw>
'questa istruzione non fa altro che qel che fai tu quando 
'ti connetti a un diverso wrg. mediante WRKGADM
Set Ws = DBEngine.CreateWorkspace("", <NomeAccount>,_
                          <PasswordAccount>, dbUseJet)
'questa istruzione istanzia un oggetto workspace sul wrg. impostato
'e crea una connessione di un utente (identificato mediante
'nome account e pwd.) su quel workspace
'a questo punto, ti apri il tuo DB dal workgroup che hai aperto:
Dim DB as database
Set db = ws.Opendatabase(<nome database>)
'...e ci lavori sopra.
Alla fine chiudi:
db.close
ws.close
<-: ......ORDUNQUE....... :->
Se quel che ti interessa è semplicemente nascondere l'intero DB all'utente,
quel che puoi fare è questo:
1) Creare un nuovo workgroup con WRKGADM
2) Impostarlo come wrg. di lavoro, sempre con WRKGADM
3) Avviare Access e creare un nuovo account utente in quel wrg. nel gruppo
Amministratori
4) Mettere una pwd. temporanea all'account corrente (che sarà admin)
5) Uscire a riavviare Access; ti verrà chiesto nome account e pwd: metti
come nome account l'account che hai creato prima, poniamo si chiami "pippo"
6) Ora sei connesso come "pippo"; metti una pwd. a pippo (che conoscerai
solo tu e non dirai a nessuno)
7) Elimina l'account amministratore predefinito (che c'è in tutte le
macchine che hanno Access, o quasi :)
8) Cra SOLO ORA il tuo nuovo database, metti tutti gli oggetti necessari,
ecc. (magari, se l'hai già fatto, per non ripetere il lavoro importa tutto
da quello vecchio :); quindi togli tutte le autorizzazioni agli altri
account per l'oggetto database (o per i soli oggetti che vuoi protetti),
MA BADA DI LASCIARE A PIPPO (e solo a lui) L'AUTORIZZAZIONE AMMINISTRAZIONE
!
Quindi, nel tuo prg. VB, quando apri il workspace, metti come nome account
"pippo" e come password la password che gli hai impostato.
...............MA NON ERA PIU' SEMPLICE METTERE UNA PWD. AL DATABASE, E
TANTI SALUTI ????  ;-)))
Comunque, tieni presente che in questo modo la gestione del prg. si
complicherà non poco, soprattutto se usi controlli "Bounded".
Infatti, in un controllo DATA non potrai settare tutte le propr.
design-time, altrimenti, quando farai girare il prg., ti uscirà quel
simpatico msg. di errore di autorizzazione negata :-)
Quel che dovrai fare sarà collegare tutti i controlli data run-time ai
recordset aperti precedentemente, in questo modo:
Dim ws as Workspace
Dim db as database
Dim rs as recordset
DBEngine.SystemDb = <path e nome file .mdw>
Set Ws = DBEngine.CreateWorkspace("", "pippo",_
                          <PasswordAccount>, dbUseJet)
Set db = ws.Opendatabase(<nome database>)
Set rs = db.OpenRecordset (ecc. ecc.)
'ora colleghi il tuo recordset all'oggetto data
Set Data1.Recordset = rs
Data1.Refresh
Un bel casino, non ti pare ? :-)
(prima di metterti sotto, però, valuta se ti conviene fare così o mettere
una pwd. all'intero db, oppure guarda se qualcun altro più esperto di me
conosce una soluzione più veloce e pratica)
Bye
-- 
Ale...@tiscalinet.it