Chi mi sa aiutare?
Grazie.
Ciao,
l'argomento e' piuttosto complesso e vasto, ti conviene
iniziare da una ricerca sul web anche se la maggior parte
di informazioni sono in inglese e altrettante in francese\tedesco :-(
http://groups.google.it/groups?hl=it&q=ldap+vba&qt_s=Ricerca
Ciao
--
lorenzo
Ciao,
con una piccola sub in vba potresti leggere i nomi degli utenti e popolare
una tua tabella.
Ma tu cosa intendi senza copiare i dati ?
Ciao
--
Giorgio Rancati
[Office Access MVP]
> Ciao,
>
> con una piccola sub in vba potresti leggere i nomi degli utenti e popolare
> una tua tabella.
Conta che sono proprio "niubbo" su Access... :-/
> Ma tu cosa intendi senza copiare i dati ?
Eh, appunto non vorrei "popolare una tabella", bensì fare solamente
riferimento al record presente in AD. Ora però mi viene un dubbio: nel
momento in cui io elimino l'utente da AD (perchè non lavora più qui),
perderei il collegamento, vero? Tu cosa suggerisci di fare?
Grazie..
> Ciao,
> l'argomento e' piuttosto complesso e vasto, ti conviene
> iniziare da una ricerca sul web anche se la maggior parte
> di informazioni sono in inglese e altrettante in francese\tedesco :-(
>
>
> http://groups.google.it/groups?hl=it&q=ldap+vba&qt_s=Ricerca
Per il Tedesco e l'Inglese non ho problemi... ma è "fattibile" per un
"niubbo" come me??? :-o
Vediamo che ci dice Giorgio.
Quello che ho trovato in italiano erano msg che poi partivano
per la tangente, in inglese si arenavano quasi ad un passo ....
quelli in tedesco li ho capiti praticamente nulla ...
e i piu' interessanti mi sembravano quelli in Francese.
Probabilmente sarà da interfacciarsi con librerie (DLL del sistema operativo)
questo non e' particolarmente difficile come e' sicuro che Giorgio
riesce a spiegarsi bene.
Se le tue esigenze sono limitate puo' essere che sia affrontabile con poco,
sono curioso anch'io ;-)
Ciao
--
Lorenzo
ma.. io creerei una tabella con i campi Nome e Attivo, poi quando ci sono
modifiche andrei a Popolarla/Aggiornarla eseguendo una Sub
quindi data uan tabella di nome Utenti con io campo Nome (tipo testo) e
Attivo (tipo Sě/No)
-----
Sub AggiornaUtenti()
Dim NomeDominio As String
Dim Dominio As Object
Dim Filtro As String
Dim AD As Object
Dim TbUtenti As New ADODB.Recordset
NomeDominio = "NomeDominio"
Filtro = "User"
'Imposto lo stato attivo a false per tutti gli utenti
CurrentProject.Connection.Execute "Update [Utenti] Set [Attivo]=0"
'Apro la tabella utenti
TbUtenti.CursorType = adOpenKeyset
TbUtenti.CursorLocation = adUseServer
TbUtenti.LockType = adLockOptimistic
TbUtenti.Open "Utenti", CurrentProject.Connection
'Apro il dominio
Set Dominio = GetObject("WinNT://" & NomeDominio)
Dominio.Filter = Array(Filtro)
'Popolo/sincronizzo la tabella utenti
For Each AD In Dominio
TbUtenti.Find "Nome='" & AD.Name & "'"
If TbUtenti.EOF Then
TbUtenti.AddNew
End If
TbUtenti!Nome = AD.Name
TbUtenti!Attivo = True
TbUtenti.Update
Next
'Chiudo e distruggo gli oggetti
TbUtenti.Close
Set TbUtenti = Nothing
Set Dominio = Nothing
End Sub
----
dimenticavo....
ho preso spunto da qui
----
HOW TO: Populate a SQL Server 2000 Database with Information from Active
Directory
http://support.microsoft.com/default.aspx?scid=kb;en-us;319716
> Vediamo che ci dice Giorgio.
> Quello che ho trovato in italiano erano msg che poi partivano
> per la tangente, in inglese si arenavano quasi ad un passo ....
> quelli in tedesco li ho capiti praticamente nulla ...
> e i piu' interessanti mi sembravano quelli in Francese.
... e proprio il Francese è il mio "buco"... (o baco?!?)... vabbè...
> Probabilmente sarà da interfacciarsi con librerie (DLL del sistema
> operativo)
> questo non e' particolarmente difficile come e' sicuro che Giorgio
> riesce a spiegarsi bene.
Spero proprio di essere in grado di capire, a questo punto!
> Se le tue esigenze sono limitate puo' essere che sia affrontabile con poco,
> sono curioso anch'io ;-)
Bene, grazie intanto... seguo l'altro ramo del thread ora... ;-)
Ciao Giorgio,
Ho provato ad approfondire, visto che di solito uso componenti gia' pronti.
Qualcosa ho trovato , ho anche provato il tuo codice su un server 2003,
e mi tirava fuori piu' cose di quello che dovesse. Presumo che con
>Filtro = "User"
vengano filtrati gli oggetti che come tipo sono "User" e quindi
si possono ritrovare anche oggetti che in realtà non sono proprio
user anche se identificati da questo tipo (Utenti di sistema, di debug etc.
che quasi sempre sono in stato Disabled)
Probabilmente il binding con un Server AD va con un provider LDAP
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/adsi_system_providers.asp
Che poi le cose si complicano se sono montate anche le estensioni di AD.
Poi, alla fine, basata su questi suggerimenti:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/e2k3/e2k3/_clb_enumerating_a_users_dls_vb.asp
Ne e' uscita una sub che ricava in automatico il dominio dove e' autenticato
il pc. Nei riferimenti Access e' necessario aggiungere "ActiveDS Type library"
Quello che e' interessante, credo, sono le proprietà dell'oggetto ObjUser che si
ricavano anche con l'intellisense in debug mode.
Sub List_Users_AD()
Dim objUser As IADsUser
Dim objContainer As IADsContainer
Dim Domain As Object
Dim DomainName
On Error GoTo Error
DomainName = GetObject("LDAP://RootDSE").Get("DefaultNamingContext")
Set objContainer = GetObject("LDAP://CN=users," & DomainName)
objContainer.Filter = Array("User")
For Each objUser In objContainer
'solo account abilitati
If objUser.AccountDisabled = False Then
Debug.Print Right(objUser.name, Len(objUser.name) - 3), objUser.FullName
End If
Next
Exit Sub
Error:
MsgBox "Run time error: " + str(Err.Number) + " " + Err.Description
Err.Clear
End Sub
Ciao
--
Lorenzo
grazie per queste info aggiuntive :-)
Personalmente non amo aggiungere riferimenti ad Access, lo faccio proprio se
sono costretto :-)
Vedo comunque che il tuo codice non ha bisogno del riferimento alla libreria
esterna, infatti crei gli oggetti con GetObject.
Togliendo la dim potresti farne a meno
----
Sub List_Users_AD()
Dim objUser As Object
Dim objContainer As Object
Dim Domain As Object
Dim DomainName
.......
.......
........
----
la lista delle proprietà e del loro significato si può prendere da qui.
----
IADsUser
http://msdn.microsoft.com/library/en-us/adsi/adsi/iadsuser.asp?frame=true
----
Proprietà che si possono usare anche con il provider WinNt (quello usato nel
mio esempio)
Sono d'accordo :-) poi quando si va in distribuzione runtime al
75% sono pianti.
Quando devo interagire con il sistema o interfacce a basso
livello preferisco altri tool con componenti gia' collaudati che
comunque possono fare da "cover" ad Access.
> Vedo comunque che il tuo codice non ha bisogno del riferimento alla
> libreria esterna, infatti crei gli oggetti con GetObject.
>
[...]
Vero, ovviamente sono partito dal codice base,copia-incolla
e poi ci ho costruito su. ;-)
>
> la lista delle proprietà e del loro significato si può prendere da
> qui. ----
> IADsUser
> http://msdn.microsoft.com/library/en-us/adsi/adsi/iadsuser.asp?frame=true
> ----
> Proprietà che si possono usare anche con il provider WinNt (quello
> usato nel mio esempio)
Qui ho ancora qualche dubbio, non nel senso che non funzioni, perche' funziona
ovviamente, ma quanto sul fatto, se non ho capito male,. il provider WinNt e'
mantenuto per compatibilità e non credo dia accesso alle estensioni di AD quali
possono essere le estensioni di Exchange Server.
Dovro ri-approfondire.
> Ciao
> --
> Giorgio Rancati
> [Office Access MVP]
Ciao
--
lorenzo