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 стандартный, индекса по нему нет, попробую.