Поле ID

bdv9
Дата: 23.06.2005 11:55:18
Cache 5.0.10.5300.1790

Подскажите как можно корректировать столбец ID.
Этот столбец не виден на уровне класса в Studio, но отражается в SQL-менеджере как ID (обязательный и уникальный).
Rostislav1
Дата: 23.06.2005 12:23:21
А зачем?

Note that once you save an object its object ID value cannot change.

Если нужен свой ИД, определите индекс на одно/несколько свойств с ключевым словом Idkey
bdv9
Дата: 23.06.2005 12:30:04
Есть покупная программа, в которой данные упорядочиваются по ID, а не по названию. Поэтому хочу перебить ID, чтобы шло по порядку.
Maksim UM
Дата: 23.06.2005 13:12:51
Если Id обычный и нет индексов, то очень просто:
структура обычно такая:
 ^User.<class name>D(<ID>)=<data>
Надо на COS написать программу, которая просто перебросит данные в другие ID. Например (класс "test"):
 Merge ^CacheTemp1=^User.testD  ; сохраняем на всякий случай
 Kill ^User.testD
 ; дальше как надо пишеш в глобал
 Set ^User.testD(<newid>)=<data>
 ; в конце нужно
 Set ^User.testD=<номер последний Id+1>
Если есть индексы, то нужно сначала их грохнуть, а затем
снова создать.
Rostislav1
Дата: 23.06.2005 13:14:55
Еще раз повторяю:
Note that once you save an object its object ID value cannot change.
После сохранения объекта его ID изменить невозможно.

Какой там доступ к данным в этой программе? Если SQL, то он не обязан каким-либо образом упорядочивать результат запроса (если не указан ORDER BY), но по факту сортировка идет по ИД.
В глобалях данные по умолчанию тоже хранятся примерно так:
^globalName(ID)=...

Может все-таки лучше использовать ORDER BY чем идти на такие радикальные меры?
bdv9
Дата: 23.06.2005 13:51:34
Программа выдает данные в виде дерева.
Упорядочивание элементов происходит по ID, а не по названию, а элементов много.
Похоже, что разработчики пошли по простому пути - элементы в дереве отображаются по порядку их занесения в базу, наверное чтобы не париться со стандартным инструментом для построения дерева.
Хочу написать программку, которая будет строить базу, упорядоченную по названию, но с сохранением порядка поступления узлов для дерева.
База корректируется редко, но сразу добавляется много позиций, после этого в упорядочивании полная каша.

To Maksim UM - ID стандартный, индекса по нему нет, попробую.
Maksim UM
Дата: 23.06.2005 14:01:08
bdv9
To Maksim UM - ID стандартный, индекса по нему нет, попробую.

Я имел ввиду индексы по другим полям.
В любом случае, не помешает делать после обработки
(если не ошибаюсь)
  Do ##class(<class name>).%PurgeIndices()
  Do ##class(<class name>).%BuildIndices()