ADO. Запрос к AD. Значение objectGUID в String

AntonioPermskiy
Дата: 20.11.2019 11:38:55
Добрый день,

Как извлечь значение objectGUID из домена в виде строки?

    
  lADOQuery.ConnectionString :=
    'Provider=ADsDSOObject;Encrypt Password=False;Integrated Security=SSPI;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
  lADOQuery.ParamCheck := false;
  lADOQuery.SQL.Text := 'SELECT name, objectGUID FROM ''' + 'LDAP://' + lDomain +
      ''' where objectCategory = ''' + 'USER' + ''' and sAMAccountName = '''
      + 'any_surname' + '''';
  lADOQuery.Active := True;

  ShowMessage(lADOQuery.FieldValues['name']);
  ShowMessage(lADOQuery.FieldValues['objectGUID']);

name выводится корректно
objectGUID выводится неправильно '-'. Действительное значение {019FBC3F-5088-4811-B9E5-3C20991F8E50}, на скриншоте.

Спасибо.
_Vasilisk_
Дата: 20.11.2019 14:52:57
AntonioPermskiy
objectGUID выводится неправильно
С чего вы взяли? Что у вас получается и что ожидалось?
AntonioPermskiy
Дата: 20.11.2019 15:12:09
_Vasilisk_,

Ожидаю сообщение с текстом '{019FBC3F-5088-4811-B9E5-3C20991F8E50}', а получаю:
alekcvp
Дата: 20.11.2019 19:05:07
 ShowMessage(lADOQuery.FieldByName('objectGUID').AsString);

?
AntonioPermskiy
Дата: 21.11.2019 09:30:37
alekcvp,

ShowMessage(lADOQuery.FieldByName('objectGUID').AsString);

Также '-'

Еще есть такой вариант:
ShowMessage(lADOQuery.FieldByName('objectGUID').Text);

На выходе:
Vlad F
Дата: 21.11.2019 10:07:41
AntonioPermskiy,

А если в запросе закастить его в натурально строковый тип?
alekcvp
Дата: 21.11.2019 10:34:40
AntonioPermskiy
Еще есть такой вариант:
ShowMessage(lADOQuery.FieldByName('objectGUID').Text);

Ну то есть он его получает тупо в двоичном виде. Проверьте, ради интереса, что
lADOQuery.FieldByName('objectGUID').Size = SizeOf(TGUID)
и если да, то вам надо просто засунуть это значение в TGUID, а уже его потом преобразовывать в текст.
AntonioPermskiy
Дата: 21.11.2019 10:46:26
alekcvp,

Проверил:
AntonioPermskiy
Дата: 21.11.2019 10:49:04
Тем не менее, для разных пользователей код
lGUID := TGUID(lADOQuery.FieldByName('objectGUID').Value);


Заполняет разные данные(может мне это и подойдет, проверю уникальность этих значений среди всех пользователей):
alekcvp
Дата: 21.11.2019 11:42:01
AntonioPermskiy
alekcvp,
Проверил:


Возможно это максимальный размер, есть ещё .DataSize