uniqueidentifier
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
uniqueidentifier
Приветствую всех!
В таблице на MS SQL 2000 Primary key поле типа uniqueidentifier. Default value - newid()
Какой тип надо поставить полю в словаре и что написать в Initial Value ?
С уважением,
Олейников Виктор.
В таблице на MS SQL 2000 Primary key поле типа uniqueidentifier. Default value - newid()
Какой тип надо поставить полю в словаре и что написать в Initial Value ?
С уважением,
Олейников Виктор.
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: uniqueidentifier
Кажется STRING(36)OVV писал(а):В таблице на MS SQL 2000 Primary key поле типа uniqueidentifier. Default value - newid()
Какой тип надо поставить полю в словаре и что написать в Initial Value ?
Инициализируй на стороне сервера как NEWID()
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: uniqueidentifier
Не совсем понял. А при чем тут пустая строка?Так и сделано. Но при добавлении записи id = '' (пустой строке) и следующий MAVGET дает ошибку.
MAVCLEAR перед добавлением записи делаем?
потом назначаем поля (исключая поле с UID) и делаем MAVINSERT
Все должно быть Ok
Re: uniqueidentifier
Вот чего я совсем не понял как это мне от меня ответили!OVV писал(а):Не совсем понял. А при чем тут пустая строка?Так и сделано. Но при добавлении записи id = '' (пустой строке) и следующий MAVGET дает ошибку.
MAVCLEAR перед добавлением записи делаем?
потом назначаем поля (исключая поле с UID) и делаем MAVINSERT
Все должно быть Ok
И куда делся мой предыдущий пост? Хорошо хоть в quote остался...
А по существу - я делаю не руками, а стандартным MAV SQLForm. Он делает все необходимое.
В процедуре MAV:Save.Completed перед MAVGET ключевое поле пустое и как следствие:
"Недопустимое символьное значение для указания отклонения (22018)
...
... Binding field Id = пусто...
"
Руками пробовал - на серваке запись создается.
Вопрос в том как получить обратно GUID созданной записи.
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: uniqueidentifier
Это я нечаянно отредактировал пост твойВот чего я совсем не понял как это мне от меня ответили!
И куда делся мой предыдущий пост? Хорошо хоть в quote остался...
это поле должно быть по идее NULL а не пусто. попробуй для него поставить атрибут ReadOnly в словаре.А по существу - я делаю не руками, а стандартным MAV SQLForm. Он делает все необходимое.
В процедуре MAV:Save.Completed перед MAVGET ключевое поле пустое и как следствие:
"Недопустимое символьное значение для указания отклонения (22018)
...
... Binding field Id = пусто...
"
После добавления записи в буфере должны быть данные добавленной записи. Или как минимум Primary Key IDРуками пробовал - на серваке запись создается.
Вопрос в том как получить обратно GUID созданной записи.
По ID получи запись вновь добавленную.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: uniqueidentifier
Фух... А то я уж думал, что у меня раздвоение личности!Admin писал(а):Это я нечаянно отредактировал пост твойВот чего я совсем не понял как это мне от меня ответили!
ReadOnly в словаре стоит.Admin писал(а):это поле должно быть по идее NULL а не пусто. попробуй для него поставить атрибут ReadOnly в словаре.
Так в том-то и дело, что Primary Key ID на серваке это и есть uniqueidentifier. И когда запись на серваке создана я не могу ее считать так как не знаю ее ID. Может в словаре в Initial Value надо что-то написать? SCOPE_IDENTITY и IDENT_CURRENT('...') не катят...Admin писал(а):После добавления записи в буфере должны быть данные добавленной записи. Или как минимум Primary Key ID
По ID получи запись вновь добавленную.
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: uniqueidentifier
Андрея Мялина нужно спросить... никогда не вязали таблицы uniqueidentifier.
Связь у нас по обычному INT полю а в каждой табле есть допполе с uniqueidentifier
Жизнь так проще... и связи отследить в ручную в случае чего...
Связь у нас по обычному INT полю а в каждой табле есть допполе с uniqueidentifier
Жизнь так проще... и связи отследить в ручную в случае чего...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: uniqueidentifier
с этим полем работать как с IDENTITY, т е какой SELECT записать в Initial values в DCT я не знаю (цели такой не было), а как с ним в проге работать штатно:
в DCT это обычное поле STRING(16) без дополнительных свойств
в форме редактирование такой записи
ВСЁ!
ЗЫ
Тип данных uniqueidentifier имеет несколько недостатков.
•Значения являются длинными и непонятными. Поэтому пользователям сложно вводить их без ошибок и еще сложнее запоминать.
•Значения являются случайными, в них нельзя поместить никакие последовательности, которые сделали бы значения более осмысленными для пользователей.
•Не существует способа определить, в какой последовательности были созданы значения типа uniqueidentifier. Они не приспособлены для использования существующими приложениями, полагающимися на последовательное возрастание ключей в последовательности.
•Занимая 16 байт, тип данных uniqueidentifier является относительно большим по сравнению с другими типами данных (например с 4-байтовыми целыми). Индексы, построенные на ключах типа uniqueidentifier, могут работать медленнее по сравнению с индексами, где используются ключи типа int.
Если глобальная уникальность не требуется или нужен ключ с последовательно возрастающими значениями, рекомендуется использовать свойство IDENTITY.
в DCT это обычное поле STRING(16) без дополнительных свойств
в форме редактирование такой записи
Код: Выделить всё
MAV:Save.Insert FUNCTION ! вставляем в самое начало
tmp MAVSelect
CODE
tmp.Init(,1,1)
tmp.BindField(File:Field_uniqueidentifier)
IF tmp.Run('select NEWID()') OR tmp.Fetch()
MAVSHOWERROR
RETURN 1
END
ВСЁ!
ЗЫ
Тип данных uniqueidentifier имеет несколько недостатков.
•Значения являются длинными и непонятными. Поэтому пользователям сложно вводить их без ошибок и еще сложнее запоминать.
•Значения являются случайными, в них нельзя поместить никакие последовательности, которые сделали бы значения более осмысленными для пользователей.
•Не существует способа определить, в какой последовательности были созданы значения типа uniqueidentifier. Они не приспособлены для использования существующими приложениями, полагающимися на последовательное возрастание ключей в последовательности.
•Занимая 16 байт, тип данных uniqueidentifier является относительно большим по сравнению с другими типами данных (например с 4-байтовыми целыми). Индексы, построенные на ключах типа uniqueidentifier, могут работать медленнее по сравнению с индексами, где используются ключи типа int.
Если глобальная уникальность не требуется или нужен ключ с последовательно возрастающими значениями, рекомендуется использовать свойство IDENTITY.