Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5) / 14 сообщений из 14, страница 1 из 1
03.03.2018, 10:35
    #39609930
developer0118
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Коллеги, подскажите в чем может быть проблема.
Firebird 3.0.2, Delphi XE3 + FIBPlus7.5

В базу записываю один GUID, а селектится совсем другой...

В базе создаю так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE DOMAIN D_GUID AS CHAR(16) CHARACTER SET OCTETS COLLATE OCTETS;

CREATE TABLE GUIDTEST (
    ID    INTEGER GENERATED BY DEFAULT AS IDENTITY,
    GUID  D_GUID
);

INSERT INTO GUIDTEST (GUID) VALUES (CHAR_TO_UUID('566D179A-A30F-449B-8F82-77BE246907CF'));



В Дельфи:
Код: pascal
1.
2.
3.
4.
5.
object pFIBDataSet1: TpFIBDataSet
  SelectSQL.Strings = ('SELECT * FROM GUIDTEST')
  ...
  poUseGuidField = True
end



Код: pascal
1.
ShowMessage(GUIDToString((F.pFIBDataSet1.FieldByName('GUID') as TFIBGuidField).AsGuid));



В ответ получаю "{9A176D56-0FA3-9B44-8F82-77BE246907CF}", что совсем не похоже на изначальное "566D179A-A30F-449B-8F82-77BE246907CF"... IBExpert при просмотре данных таблицы показывает "566D179A-A30F-449B-8F82-77BE246907CF".

FIB'ы глючат, или я что-то не так делаю?
...
Рейтинг: 0 / 0
03.03.2018, 10:39
    #39609931
developer0118
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Код: pascal
1.
ShowMessage(F.itFBDataSet1.FieldByName('GUID').ClassName);


Выдает "TFIBGuidField"
...
Рейтинг: 0 / 0
03.03.2018, 10:54
    #39609935
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
developer0118 Коллеги, подскажите в чем может быть проблема.

В Дельфи:
Код: pascal
1.
2.
3.
4.
5.
object pFIBDataSet1: TpFIBDataSet
  SelectSQL.Strings = ('SELECT * FROM GUIDTEST')
  ...
  poUseGuidField = True
end



FIB'ы глючат, или я что-то не так делаю?
А почему вы считаете, что селект без сортировки и условий вернет вам последнюю запись?
...
Рейтинг: 0 / 0
03.03.2018, 10:56
    #39609936
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
А если так
Код: sql
1.
SELECT TOP 1 * FROM GUIDTEST ORDER BY ID DESC
...
Рейтинг: 0 / 0
03.03.2018, 11:07
    #39609938
Hommer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
developer0118,

{9A176D56-0FA3-9B44-8F82-77BE246907CF}
{566D179A-A30F-449B-8F82-77BE246907CF}

Перепутаны байты.
...
Рейтинг: 0 / 0
03.03.2018, 11:10
    #39609939
developer0118
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
SQL2008А почему вы считаете, что селект без сортировки и условий вернет вам последнюю запись?
Потому что там одна единственная запись.
...
Рейтинг: 0 / 0
03.03.2018, 11:12
    #39609941
developer0118
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Hommerdeveloper0118,

{9A176D56-0FA3-9B44-8F82-77BE246907CF}
{566D179A-A30F-449B-8F82-77BE246907CF}

Перепутаны байты.
То есть, ошибка где-то в GetAsGuid у FIB'ов?
...
Рейтинг: 0 / 0
03.03.2018, 11:25
    #39609945
Hommer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
developer0118,

Отладчик покажет где :)
...
Рейтинг: 0 / 0
03.03.2018, 11:57
    #39609953
developer0118
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Ещё погуглил, и как-то совсем печально стало...

http://firebirdsql.su/doku.php?id=char_to_uuid

Это ошибка или фича?

Результат преобразования CHAR_TO_UUID и UUID_TO_CHAR в FB 2.5.2 отличается от принятого в Windows (Например, CLSIDFromString и StringFromCLSID из Ole32.dll, или StringAsGUID, GUIDAsString, GUIDAsStringToPChar из Delphi 7) порядком следования байт.

Win32 API: B3 B2 B1 B0 B5 B4 B7 B6 B8 B9 BA BB BC BD BE BF Firebird : B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF

Например, из одного TGUID получим: Win32 API: 9B47BC19-D0AE-5243-A37D-AF26806BFEEA Firebird : 19BC479B-AED0-4352-A37D-AF26806BFEEA
...
Рейтинг: 0 / 0
03.03.2018, 12:11
    #39609959
developer0118
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Всё, тема закрыта
...
Рейтинг: 0 / 0
03.03.2018, 13:31
    #39609988
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
developer0118Всё, тема закрыта
А что было-то?
Поделитесь знанием.
...
Рейтинг: 0 / 0
03.03.2018, 14:48
    #39610011
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Гуиды, как и первичные ключи, никогда не надо ни преобразовывать, ни показывать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.03.2018, 07:23
    #39610412
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Все просто. На форуме такие вопросы уже задавали. Uuid <>guid. Поэтому на клиента надо передавать не строковое представление, а 16 байтовое.
...
Рейтинг: 0 / 0
05.03.2018, 15:33
    #39610712
Василий №2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
У FB порядок байт в первых трех блоках big-endian. Решение - либо оперировать исключительно бинарным 16-байтовым представлением, либо переворачивать туда-сюда, либо просто оставить генерацию только на один источник (либо клиент, либо сервер) - тогда будет пофигу, в каком там порядке байты
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5) / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]