powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
14 сообщений из 14, страница 1 из 1
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39609930
developer0118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, подскажите в чем может быть проблема.
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
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39609931
developer0118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
ShowMessage(F.itFBDataSet1.FieldByName('GUID').ClassName);


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

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



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

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

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

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

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

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

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
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39609959
developer0118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, тема закрыта
...
Рейтинг: 0 / 0
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39609988
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
developer0118Всё, тема закрыта
А что было-то?
Поделитесь знанием.
...
Рейтинг: 0 / 0
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39610011
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуиды, как и первичные ключи, никогда не надо ни преобразовывать, ни показывать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39610412
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все просто. На форуме такие вопросы уже задавали. Uuid <>guid. Поэтому на клиента надо передавать не строковое представление, а 16 байтовое.
...
Рейтинг: 0 / 0
Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
    #39610712
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У FB порядок байт в первых трех блоках big-endian. Решение - либо оперировать исключительно бинарным 16-байтовым представлением, либо переворачивать туда-сюда, либо просто оставить генерацию только на один источник (либо клиент, либо сервер) - тогда будет пофигу, в каком там порядке байты
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с GUID (Firebird 3.0.2, Delphi XE3, FIBPlus7.5)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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