Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Active Directory Ldap Abfrage Limit umgehen (https://www.delphipraxis.net/166120-active-directory-ldap-abfrage-limit-umgehen.html)

mxh 31. Jan 2012 10:18

Active Directory Ldap Abfrage Limit umgehen
 
Hallo Delphi-Praxis,
ich weiß das Thema ist nicht neu und es gibt schon einige Einträge im Forum. Leider konnte ich das Problem nicht lösen.

Ich möchte gern alle Benutzer aus der AD auslesen. Leider bekomm ich nur 1000 Einträge vom Server zurückgeliefert. Ich weiß das dieses Limit vom Server ausgeht da dieser aus "Performancegründen" nur diese Anzahl zurückliefert.
Weil das Limit auf dem Server nicht geändert werden kann (möchte der Administrator nicht ) hab ich versucht mit PageSize die Anfrage zu limitieren. Das hat leider nicht funktioniert. Jetzt weiß ich nicht mehr weiter.

Ich benutze für die die Abfrage eine TADOConnection und TADOQuery beidesmal Komponenten die auf der Form liegen.


Dann führe ich folgenden Code aus :

Delphi-Quellcode:

 ADOConnection1.Connected := false;
  Fdomain := edDomain.Text;
  Fdomain := 'DC=' + StringReplace(Fdomain,'.', ',DC=', [rfReplaceAll, rfIgnoreCase]);
  ADOConnection1.ConnectionString := Format( 'Provider=ADsDSOObject;Password=%s;User ID=%s;Encrypt Password=False;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648', [edPasswort.Text, edName.Text + '@' + eddomain.Text] );
  ADOConnection1.Connected := True;
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := 'SELECT SN, Displayname,sAMAccountName, department FROM ' + QuotedStr('LDAP://' + edserver.Text + '/' +Fdomain ) + ' WHERE objectClass=' + QuotedStr('user') + ' AND objectCategory=' + QuotedStr('Person') ;
  Try
    ADOQuery1.Open;
    ADOQuery1.Recordset.PageSize:= 100;
  Except
    on e :exception do
    ShowMessage(e.Message);
  End;
Die "PageSize" hat überhaupt keinen Einfluss auf mein Ergebnis da der Recordcount der Query1 immer 1000 ist.

Hoffe ihr könnt mir helfen , danke im Vorraus

Sir Rufo 31. Jan 2012 10:37

AW: Active Directory Ldap Abfrage Limit umgehen
 
Also bei so einem Parameter, der ja direkt das Ergebnis (hier die Menge) beeinflusst würde ich immer erwarten das dieser vor dem Öffnen gesetzt werden muss.

Ansonsten gibt es über die Forensuche http://www.delphipraxis.net/89728-ld...h-mit-ado.html

Bernhard Geyer 31. Jan 2012 10:41

AW: Active Directory Ldap Abfrage Limit umgehen
 
Du willst alles Datensätz:.

1, Ergänze ein order by und sortiere die Ergebnismenge nach einer (eindeutigen) Spalte

2, Baue eine 2te Abfrage die eine where-Bedingung mit diesem Kriterium hat und dessen werte dem letzten zurückgelieferten Datensatz der ersten abfrage entspricht.

3, Wiederhole 2te Abfrage bis du alle Datensätze hast.

mxh 31. Jan 2012 11:03

AW: Active Directory Ldap Abfrage Limit umgehen
 
Hi,
danke für die Antworten
zu #2 :
ich dachte auch das man den Parameter vor dem öffnen der Query setzen muss , als ich das probiert habe kam leider ein Fehler. Den Beitrag im Forum hab ich gelesen das hab ich ja auch umgesetzt mit der Zeile ADOQuery1.Recordset.PageSize:= 100;

zu #3 :
das hab ich schon probiert das Problem ist allerdings das alle 5000 Benutzer in der selben OU liegen und ich nicht mit geschachtelten Abfragen an die Benutzer komme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz