AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

objectGUID auslesen

Offene Frage von "himitsu"
Ein Thema von cst_07 · begonnen am 2. Mär 2009 · letzter Beitrag vom 7. Mär 2012
Antwort Antwort
cst_07

Registriert seit: 29. Nov 2007
34 Beiträge
 
#1

objectGUID auslesen

  Alt 2. Mär 2009, 10:53
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?
  Mit Zitat antworten Zitat
vit4l

Registriert seit: 10. Jun 2008
72 Beiträge
 
#2

Re: objectGUID auslesen

  Alt 2. Mär 2009, 10:59
Wieso bekommst du mit FieldByname('...').AsString nichts raus. Kann das sein, dass du ADO.Activ nicht auf true setzt?
  Mit Zitat antworten Zitat
cst_07

Registriert seit: 29. Nov 2007
34 Beiträge
 
#3

Re: objectGUID auslesen

  Alt 2. Mär 2009, 11:17
Es kommt schon ein Wert heraus, aber wie wandle ich das in eine GUID um?
  Mit Zitat antworten Zitat
cst_07

Registriert seit: 29. Nov 2007
34 Beiträge
 
#4

Re: objectGUID auslesen

  Alt 2. Mär 2009, 11:36
So sieht der Rückgabewert als String aus.
Miniaturansicht angehängter Grafiken
ldap_objectguid_151.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#5

AW: objectGUID auslesen

  Alt 7. Mär 2012, 09:25
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
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#6

AW: objectGUID auslesen

  Alt 7. Mär 2012, 12:45
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Mär 2012 um 12:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 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