Problem mit SQL-Abfrage im AD


Slater345

Grünschnabel
Hallo,

ich habe folgenden Code(ausschnitt):
Code:
oCmd.CommandText = "SELECT department, extensionAttribute8, givenName, distinguishedName, sn FROM 'LDAP://server/dc=firmenkürzel,dc=local' WHERE objectClass='user' AND (department = '"& Abteilung &"' or '"& (InStr(1, distinguishedName, Abteilung) > 0)&"' = 'Wahr') ORDER BY sn"

Die Variable Abteilung lege ich entsprechend vorher fest.

Soweit funktioniert es auch im gesamten, allerdings habe ich das Problem, dass das Script im Bereich '"& (InStr(1, distinguishedName, "OU-Name,") > 0)&"' = 'Wahr' nicht ganz das macht was es soll. Statt durch die Schleife bei den einzelnen Benutzern zu gucken, ob denn "OU-Name," in der OU vorkommt, nimmt es scheinbar irgendwie einen zufälligen Benutzer und nimmt es dann komplett.

Nehm ich das department = '"& Abteilung &"' or raus, dann zeigt er immer "Falsch" an und gibt keinerlei Einträge aus.
Dagegen mit diesem Teil gibt er das richtige aus, was raus kommen soll.
Wenn ich dann bei der Ausgabe obige Zeile (InStr....) einfüge, dann zeigt er auch richtig an, ob es "True" oder "False" ist, was er allerdings bereits eigentlich im SQL-Statement prüfen sollte...

Jemand eine Idee?
Grüße
 
Zuletzt bearbeitet:

Luzie

Erfahrenes Mitglied
Hi

welche Datenbank?
Welche Werte befinden sich in der Spalte "OU-Name", dass Du den instr() verwenden musst?

Was ist Abteilung? In Bezug auf Dempartment wird der Wert aus einer Variablen gelesen, in der Funktion instr() nicht.
 

Slater345

Grünschnabel
Vom Prinzip her liest es die Daten direkt aus dem AD (über LDAP), kann allerdings SQL-Befehle nutzen (von daher wohl an SQL angelehnt).

In "OU-Name" bzw. nun "Abteilung" (also "OU-Name" = Abteilung) befindet sich das Kürzel der Abteilung (als Beispiel "IT"), ich benutze InStr, weil in der Variablen "distinguishedName" ist eine lange Zeichenkette enthalten, die den kompletten OU-Pfad des Nutzers angibt (z.B. CN=Benutzername,OU=Abteilungsname,OU=Bereichsname, .......) und ich will über InStr gucken, ob der Abteilungsname in dieser Zeichenkette vorhanden ist (und wenn dem so ist, soll er den Benutzer mit in die Übersicht packen).
Grüße
 

Luzie

Erfahrenes Mitglied
Hallo

ich würde das jetzt von der SQL mal so aufbauen (sofern nun Abteilung die Variable ist)

Code:
oCmd.CommandText = "SELECT department, extensionAttribute8, givenName, distinguishedName, " & _
			"sn FROM 'LDAP://server/dc=firmenkürzel,dc=local' WHERE objectClass='user' " & _
			"AND (department = '"& Abteilung &"' or InStr(1, distinguishedName,'" & Abteilung & "') > 0) ORDER BY sn"
 

Slater345

Grünschnabel
InStr nimmt er so scheinbar nicht (denke, weil es, glaube ich, ja eine ASP-Funktion ist und keine SQL), will das zumindest nicht ausführen (natürlich angepasst).

Wär also:
Code:
'"& InStr(1, &"'distinguishedName'"&, Abteilung)&"' > 0)
Allerdings kommt da dann falsche Syntax als Fehler, bei dem & nach der 1,

Wenn ich Dich richtig verstanden habe, müsste "distinguishedName" wieder aus dem ASP-Teil raus, da es ja wieder zu SQL gehören müsste (wie bei "department").
Ich probier mal damit etwas rum.
Grüße
 
Zuletzt bearbeitet:

Luzie

Erfahrenes Mitglied
Hallo

instr() ist natürlich keine Standard-SQL-Funktion. In mySQL funktioniert diese meines Wissens nicht. Aber Access z.B. kann diese innerhalb der SQL auch im Programm Access innerhalb des SQL-Statementsr problemlos umsetzen.

Aber wir sind ja hier im ASP Forum (Klassik) und instr() ist auch eine VB-Funktion.

Dein Scirptcode (der zuletzt gepostet) kann nicht stimmen, da distinguishedName ja ein Spaltenname ist. Dieser darf in der SQL-Syntax nicht als Variable ausgegeben werden. Auch schon aus dem Grunde nicht, das instr() als 2. Attribut die durchsuchte Spalte und als 3. Attribut den Suchbegriff fordert. http://www.devguru.com/technologies/vbscript/13934.asp
 

Slater345

Grünschnabel
Na ja, direkt Access Datenbanken nutzen wir an anderen Stellen, am meisten bzgl. solchen Scripten eben (my)SQL bzw. lassen es über das AD laufen (z.B. Login).
Ist es also nicht möglich direkt im WHERE-Bereich nach dem "String" (in "Abteilung") über InStr zu fragen?
Zumindest wenn ich es bei den Zeilen direkt bei den Namen ausgeben lasse, klappt es so, wie gedacht.
Und bzgl. Forum, das ganze geht ja (leider) meist schwankend über relationale Datenbanken und ASP (würd zwar gern ASP.net nutzen, allerdings läuft es bei uns irgendwie nicht, obwohl alles so eingestellt sein sollte und die Seiten zum testen direkt aus dem entsprechenden Codebook stammen und die ja richtig sein dürften).
Grüße
 

Luzie

Erfahrenes Mitglied
sorry,

instr() ist die funktionierende Funktion. Allerdings kenne ich ich in Bezug auf LDAP nicht aus.

Versuch es mit dem Operator like und Wildcards.

..were feld like '%" & variable & "%'
 

Slater345

Grünschnabel
Hm.. wenn ich es mit z.B.:
Code:
oCmd.CommandText = "SELECT department, extensionAttribute8, givenName, distinguishedName, sn FROM 'LDAP://server/dc=firmenkürzel,dc=local' WHERE objectClass='user' AND distinguishedName LIKE '%"& Abteilung &"%'  ORDER BY sn
probiere, kommt folgender Fehler:

Code:
Provider Fehler "80040e14' 

Der Befehl enthielt mindestens einen Fehler.

und in der entsprechenden Zeile steht:

Code:
Set oRecordSet = oCmd.Execute
Grüße
 

Slater345

Grünschnabel
Spontan sah ich den Fehler leider nicht, weiß aber, dass das Statement ohne
Code:
AND distinguishedName LIKE '%"& Abteilung &"%'
funktioniert. Hab auch schon verschiedene Variationen probiert.

Werd es aber morgen mal noch genauer unter die Lupe nehmen (weiß ja nicht, ob es sich mit LIKE vielleicht nicht verträgt bzw. auskommt hier, auch wenn wir es bei Datenbanken selbst direkt nutzen).
Grüße