Registriert seit: 14. Nov 2005
561 Beiträge
RAD-Studio 2009 Ent
|
Re: AD member, memberOf
28. Jan 2009, 07:23
Zitat von hoika:
definier mal alle in GetMem benutzen Variablen lokal in GetMem.
Und du hast natürlich recht! Funktioniert nun prima!
Hier mein Code:
Delphi-Quellcode:
procedure TForm1.ListMemberOfTR(strGroup: String; list: TStringList);
procedure getMem(obj,strPath: String);
var
i:Integer;
arrVar: Array of variant;
arrDis: Array of variant;
strTxt,strSearch: String;
strFilter, strAttributes, strADS, strBase : string;
rs, conn, com : Variant;
begin
try
conn := CreateOleObject(' ADODB.Connection');
com := CreateOleObject(' ADODB.Command');
conn.Provider := ' ADsDSOObject';
conn.open;
com.ActiveConnection := conn;
strBase := ' <LDAP://thun.lan>';
Application.ProcessMessages;
strFilter := ' (&(objectClass=group)(cn='+obj+' ))';
strAttributes := ' memberOf';
strADS := strBase + ' ;' + strFilter + ' ;' + strAttributes + ' ;subtree';
Com.CommandText := strADS;
Com.Properties[' Page Size'] := 100000;
Com.Properties[' Searchscope'] := 2;
Com.Properties[' Cache Results'] := False;
rs := Com.Execute;
if Not rs.EOF then
begin
try
arrVar := rs.Fields[' memberOf'].Value;
except
SetLength(arrVar,0);
end;
end;
for i := Low(arrVar) to High(arrVar) -1 do
begin
strTxt := arrVar[i];
strSearch := MidStr(strTxt,Pos(' =',strTxt)+1,Pos(' ,',strTxt)-Pos(' =',strTxt)-1);
list.Add(strPath + ' \ ' + strSearch);
getMem(strSearch, strPath + ' \ ' + strSearch);
end;
finally
Rs := NULL;
com := NULL;
conn.Close;
conn := NULL;
end;
end;
begin
list.BeginUpdate;
try
GetMem(strGroup,strGroup);
finally
list.EndUpdate;
end;
end;
vielen Dank hoika!
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
|
|
Zitat
|