Newsgroup: it.comp.lang.visual-basic
Titolo: accesso a db (access) con autenticazione

Sto scrivendo un programma che si interfaccia con un db access impostato
per l'utenticazione degli utenti (e quindi con privilegi basati su gruppi,e
utenti identificati da username e pswd). Il mio problema è che quando tento
di connettermi con il db,
se non specifico i campi mi dice che non ho le autorizzazzioni (e fin qui
ok.. ) mentre se username e password sono indicati mi segnala l'errore :
-
2147217843
 (80040e4d) con la dicitura :
"impossibile avviare l'applicazione! Il file di informazioni sul gruppo è
mancante o aperto in modo esclusivo da un altro utente"
Da quello che ho capito il file con le info di gruppo è quello di estensione
.mdw che access crea nella stessa directory del db. Allora ho provato a
settare la proprietà SystemDB di DBEngine al path del file.mdw ma non cambia
nulla.. ho capito male?
Qualcuno mi può aiutare? dirmi dove sbaglio o indicarmi un modo alternativo
per per connettermi al database?
Sotto è indicato come viene creata la stringa di connessione e come viene
aperta la connessione stessa:
DBEngine.SystemDB = strPercorsoFileMdw
set connessione = new connection
strConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;"
strConnessione = strConnessione & "Password=" & strPassword & ";"
strConnessione = strConnessione & "User ID=" & M1.strUsername & ";"
strConnessione = strConnessione & "Data Source=" & fileDB & ";"
 
connessione.Open strConnessione
dove strPercorsoFileMdw indica il file mdw nella stessa directory del db che
mi si è creato,
strPassword e strUsername sono variabili stringhe con pswd e username e
fileDB è una stringa con il percorso del db (.mdb)
grazie x l'aiuto
Vale.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio news:80Z17Z85Z238Y1...@usenet.libero.it...

ma lo hai creato il tuo mdw o ne stai usando uno a caso?


il file mdw me lo crea access automaticamente..


 nulla.. ho capito male?
non saprei.
io il systemdb lo passavo all'interno della stringa di connessione, e
funzionava.
tu hai provato?
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it



1) il file mdw serve per proteggere un database riservato, in modo che sia accessibile
solo da chi conosce la password del database di sistema (che sarebbe il tuo mdw)
2) poi c'è una password di secondo livello, cioè la password del database vero e proprio;
puoi impostarle entrambe, ad esempio la 1° viene inserita da codice (possibilmente
criptata, all'interno del tuo programma), la 2° la deve inserire l'utente all'apertura del
tuo programma;
3) al limite potresti fare una pasword di 3° livello (cioè memorizzata nel tuo database in
una delle tue tabelle), criptata, in modo che le 2 password di sistema (1° e 2° livello)
siano immesse da codice, e che solo quella di 3° livello sia immessa dall'utente.
è abbastanza chiaro? dubbi? perplessità?


mmhh.. dubbi.. dubbi..
nel db che ho fatto non c'è una password di sistema.. (quella associata al
file di database) ci sono solo le password degli utenti e per impostare
gruppi utenti e password ho usato "Impostazione guidata Protezione".
Quando accedo da access o direttamente cliccando sul file del db mi chiede
semplicemente username e pswd e (se sono giuste) mi lascia entrare..
A livello di sicurezza, per le informazioni che deve mantenere, questo è più
che sufficiente..
Quando però accedo via visual basic mi da quell'errore..
( il file mdw penso sia quello giusto.. perchè se accedo via access ho visto
che crea sia per db che per il file mdw, temporaneamente, dei file di lock
ldb )
vale



ho provato or ora questa stringa di connessione :
Provider=Microsoft.Jet.OLEDDB.4.0;
SystemDB = C:\Programmi\database1\systemdb.mdw;
Password=password1;
User ID=user1;
Data Source= c:\Programmi\database1\database1.mdb
perņ mi da comunque lo stesso problema..
non č che ci vedi qualche errore o qualcosa che manca? :-p
Vale


 non č che ci vedi qualche errore o qualcosa che manca? :-p
questo č quanto ho trovato in rete, e si avvicina di piů a quanto
ricordavo sull'argomento:
Provider=Microsoft.Jet.OLEDB.4.0;
User ID=xxx;Password=yyy;Data Source=D:\LORE\pubblica.mdb;Persist
Security Info=False;Jet OLEDB:System database=D:\LORE\protetto.mdw


 wrote in message
news:80Z17Z85Z238Y1...@usenet.libero.it

Ti allego un Demo di codice, è nativo per VBA, ma
non dovrebbe essere differente.
Come connetersi ad un Database protetto dalla sicurezza a livello utente
con ADO.
Public Sub OpenAdoMdw( )
   On Error GoTo ErrHandler
   Dim Cn As New ADODB.Connection
   Dim rsw As New ADODB.Recordset
   Dim sDbName As String
   Dim sWkGrpFile As String
   Dim sSQLStmt As String
   Dim sRecords As String
   Dim idx As Long
 
   '---------------------------------------
   '  Init.
   '---------------------------------------
   sDbName = "C:\Data\MyData.MDB"
   sWkGrpFile = "C:\Data\Secure.MDW"
   sSQLStmt = "SELECT * " & _
                     "FROM tblEmps " & _
                     "ORDER BY EmpID;"
   sRecords = vbNullString
   Cn.Provider = "Microsoft.Jet.OLEDB.4.0;"
   Cn.Properties("Jet OLEDB:System database") = sWkGrpFile
   Cn.Properties("User Id") = "TheBoss"
   Cn.Properties("Password") = "EZ2Remember"
   Cn.Open "Data Source=" & sDbName & ";"
 
   rsw.Open sSQLStmt, Cn, adOpenForwardOnly, adLockReadOnly
   '----------------------------------------------------------
   '  Save values from every field of every record.
   '----------------------------------------------------------
   Do While Not rsw.EOF
       For idx = 0 To (rsw.Fields.Count - 1)
           sRecords = sRecords & rsw.Fields(idx).Value & "| "
       Next idx
       sRecords = sRecords & vbCrLf
       rsw.MoveNext
   Loop
   '----------------------------------------------------------
   '  Display all values from RecordSet on Form.
   '----------------------------------------------------------
   Me!txtEmpRecords.Value = sRecords
CleanUp:
   If rsw.state = adStateOpen Then rsw.Close:  Set rsw = Nothing
   If Cn.state = adStateOpen Then Cn.Close:  Set Cn = Nothing
   Exit Sub
ErrHandler:
   MsgBox "Error in OpenAdoMdw( ) in" & vbCrLf & _
           Me.Name & " form." & vbCrLf & vbCrLf & "Error #" & _
           Err.Number & vbCrLf & Err.Description
   Err.Clear
   GoTo CleanUp
End Sub
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Sei un Grande!!
Problema risolto.. quando scrivevo la stringa di connessione scrivevo male
la proprietà System Database.. (e non ci metteovo Jet OLEDB:) adesso tutto
funziona..
Ringrazio tutti per la collaborazione!
(e probabilmente mi farò risentire..)
Ciao a tutti!
Vale.


grazie x l'aiuto!
Problema risolto..
vale


 Sei un Grande!!
non sono un grande.
neanche io ricordavo esattamente come si faceva, ma su google puoi trovare
quasi tutte le risposte ai tuoi quesiti.


 gruppi utenti e password ho usato "Impostazione guidata Protezione".
- con la procedura usata, hai creato prima un nuovo mdw?
- hai impostato i permessi ai singoli oggetti del tuo mdb?
- la password che dici è quella impostata nel mdw o quella del mdb?
attenzione a quest'ultimo punto, sono due livelli differenti di protezione ed
è più importante quello del mdw; la password del mdb è una protezione in
più ma si può trascurare
