Lieber Alter Mann
Danke schon mal für deine Antwort(die Zweite
)... natürlich habe ich bei
MSDN gesucht nun leider finde ich das was ich suche nicht immer... da arbeite ich noch drann...
Nun habe dein C# Code mal für Delphi übersetzt...
soweit so gut, das klappt auch prima. Da gibts nur ein Problem:
Ich lese alle Gruppen aus und vergleiche die ID, das ist "langsam" und irgendwie doof...
Über den
WINNT Provider kriege ich ja bereits alle Gruppen, inkl. der Primären... jetzt wollte ich eben nur die Gruppen vergleichen...
Die suche wollte ich eben mit IDirectorySearch machen: die Suche ist kein Problem doch ich kriegs einfach nicht hin das Attribut "primaryGroupToken" auszulesen, respektive weiss nicht wo sich das befindet im pADsValues... col.pADsValues^.__MIDL_0010.Integer sollte es meiner meinung nach sein, gibt aber immer ne 0 zurück...
Bei (deiner) Variante weiss ich aber nicht wie ich beim SELECT z.B. WHERE cn='gruppe1' or cn='gruppe23' mitgeben kann. Jeder Versuch in der WHERE Klausel ein OR oder AND mitzugeben scheitert.
PS: Hier meine Übersetzung...
Delphi-Quellcode:
function TEADSUsers.GroupNameByTokenID(primaryGroupToken: Integer): string;
var
ADOConn: TADOConnection;
ADOSet: TADODataSet;
I: Integer;
begin
result := '';
ADOConn := TADOConnection.Create(nil);
ADOConn.Provider := 'ADsDSOObject';
ADOConn.LoginPrompt := false;
ADOConn.ConnectionString := 'Provider=ADsDSOObject;Encrypt Password=False;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
ADOSet := TADODataSet.Create(nil);
ADOSet.Connection := ADOConn;
ADOSet.CommandText := 'SELECT distinguishedName, cn, primaryGroupToken FROM '''+ADSMgr.EADSController.LDAPPATH+''' WHERE objectCategory=''group''';
ADOSet.Open;
ADOSet.First;
for I := 0 to ADOSet.RecordCount -1 do
begin
if ADOSet.Fields[0].AsInteger = primaryGroupToken then
result := ADOSet.Fields[1].AsString;
ADOSet.Next;
end;
end;