objectGUID auslesen
Hallo,
ich möchte gerne die "objectGUID" via LDAP auslesen. Die Anbindung erfolgt über ADO. Das SQL Statement sieht beispeilsweise wie folgt aus: SELECT name, objectGUID FROM LDAP:Servername Mit "FieldByName('objectGUID').AsString" bekomme ich nichts raus. Informationen von objectGUID: Das Feld heißt: "objectGUID" Syntax, bzw. Feldtyp: "OctetString" Beispiel eines Feldwertes: "{D6DB3EE6-EF48-48D5-BBF1-536C6FFD75C2}" Wie kann ich den Feldwert herausbekommen, bzw. wie kann man aus dem Feldtyp "OctetString" einen String machen, der für mich dann wieder Brauchbar ist? |
Re: objectGUID auslesen
Wieso bekommst du mit FieldByname('...').AsString nichts raus. Kann das sein, dass du ADO.Activ nicht auf true setzt?
|
Re: objectGUID auslesen
Es kommt schon ein Wert heraus, aber wie wandle ich das in eine GUID um?
|
Re: objectGUID auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
So sieht der Rückgabewert als String aus.
|
AW: objectGUID auslesen
Hallo
Ein paar Jährchen zu spät, aber dennoch... Wollte eben daselbe tun und habe leider nichts brauchbares im Internet gefunden... Ich kompletier den Thread mal, damit der nächste bereits eine Antwort findet... Habe das Problem so gelöst:
Delphi-Quellcode:
Vielleicht kennt ja jetzt einer eine schönere Lösung?
function VariantGUIDToStr(VarGUID: Variant): String;
var I: Integer; ByteGUID: array[0..15] of byte; begin result := ''; if VarIsArray(VarGUID) then begin if VarArrayHighBound(VarGUID,1) = 15 then begin for I := VarArrayLowBound(VarGUID,1) to VarArrayHighBound(VarGUID,1) do ByteGuid[I] := VarGUID[I]; result := GUIDToString(TGUID(ByteGUID)); end; end; end; Gruss |
AW: objectGUID auslesen
Sicher ist das schon.
Man hätte auch über AsAnsiString gehn können, die AnsiChar nach Byte, oder gleich alles zusammen nach TGUID gecastet, aber da könnte es Probleme geben, wenn in der GUID auch nur ein byte auf 0 steht, wegen der PChar #0. Zusätzlich hätte man danach noch über GUIDToString umgewandelt, wenn man die Textausgabe benötigt. Wenn du die die Begrenzung vorher prüfst, dnan könntest du sie in der Schleife aös gegeben hinnehmen und müsßtest sie nicht unbeding nochmals abfragen. Aber VarArrayLowBound sollte man sicherheitshalber noch mit prüfen.
Delphi-Quellcode:
Oder du prüfst die Größe des Arrays, wobei es hier egal ist, wie die Low-Grenze aussieht. (z.B. 0-15 oder 1-16)
function VariantGUIDToStr(VarGUID: Variant): String;
var I: Integer; ByteGUID: array[0..15] of byte; begin result := ''; if VarIsArray(VarGUID) and (VarArrayLowBound(VarGUID,1) = 0) and (VarArrayHighBound(VarGUID,1) = 15) then begin for I := 0 to 15 do ByteGuid[I] := VarGUID[I]; result := GUIDToString(TGUID(ByteGUID)); end; end;
Delphi-Quellcode:
Eventuell geht auch sowas?
function VariantGUIDToStr(VarGUID: Variant): String;
var I: Integer; ByteGUID: array[0..15] of byte; begin result := ''; if VarIsArray(VarGUID) and (VarArrayHighBound(VarGUID,1) - VarArrayLowBound(VarGUID,1) + 1 = 16) then begin for I := VarArrayLowBound(VarGUID,1) to VarArrayHighBound(VarGUID,1) do ByteGuid[I - VarArrayLowBound(VarGUID,1)] := VarGUID[I]; result := GUIDToString(TGUID(ByteGUID)); end; end;
Delphi-Quellcode:
function VariantGUIDToStr(VarGUID: Variant): String;
begin if VarIsArray(VarGUID) and (VarType(VarGUID) = varArray or varByte) and (VarArrayDimCount(VarGUID) = 1) and (VarArrayHighBound(VarGUID,1) - VarArrayLowBound(VarGUID,1) + 1 = 16) then begin Result := GUIDToString(PGUID(VarArrayLock(VarGUID))^); VarArrayUnlock(VarGUID); end else Result := ''; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 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