Hallo, ich möchte gerne alle User unseres AD abfragen. Das funktioniert auch über ADO recht gut. Nur werden mir leider 1.000 Benutzer immer ausgegeben. Wir haben aber um die 6.000 User.
Nun verwende ich folgenden Code, um alle User zu bekommen. Das Stichwort ist Page Size:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| var SQL,DOMAIN: WideString; t:_recordset; begin DOMAIN := '''LDAP://dc=xx,dc=xx-xxxxxxx, dc=de'''; try Screen.Cursor := crHourGlass; memAD.Close; memAD.Open;
cmd.Connection := adoconnection1; adoconnection1.Connected:=true; SQL := 'select sn,givenname,cn from '+DOMAIN+' where objectclass='+'''user'''+' and objectclass<>'+'''computer'' ORDER by cn'; cmd.CommandText :=SQL; cmd.Properties.Item['Page Size'].Value := 10; t:=cmd.Execute;
memad.DisableControls; while t.EOF = false do begin memAD.Append; if t.Fields[2].Value <> NULL then memAD.FieldByName('sn').AsString := t.Fields[2].Value; if t.Fields[1].Value <> NULL then memAD.FieldByName('givenname').AsString := t.Fields[1].Value; if t.Fields[0].Value <> NULL then memAD.FieldByName('cn').AsString := t.Fields[0].Value; memAD.Post;
t.MoveNext; end; memAD.EnableControls;
finally Screen.Cursor := crDefault;
end; |
Das ganze funktioniert auch, sprich ich bekomme unsere ca. 6.000 Benutzer in meinem Memtable angezeigt, jedoch wirft der Compiler eine Fehlermeldung an der markierten Stelle. Die Fehlermeldung ist eine EAccessViolation, sprich eine Zugriffsverletzung.
Wäre nett, wenn wenn mir jemand sagen könnte, worin mein Fehler besteht, oder geht es auch einfacher zu lösen?
Gruß
mc