Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi objectGUID auslesen (https://www.delphipraxis.net/130043-objectguid-auslesen.html)

cst_07 2. Mär 2009 10:53


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?

vit4l 2. Mär 2009 10:59

Re: objectGUID auslesen
 
Wieso bekommst du mit FieldByname('...').AsString nichts raus. Kann das sein, dass du ADO.Activ nicht auf true setzt?

cst_07 2. Mär 2009 11:17

Re: objectGUID auslesen
 
Es kommt schon ein Wert heraus, aber wie wandle ich das in eine GUID um?

cst_07 2. Mär 2009 11:36

Re: objectGUID auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So sieht der Rückgabewert als String aus.

cherry 7. Mär 2012 09:25

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:
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;
Vielleicht kennt ja jetzt einer eine schönere Lösung?

Gruss

himitsu 7. Mär 2012 12:45

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:
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;
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)
Delphi-Quellcode:
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;
Eventuell geht auch sowas?
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