powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Способ хранения для класса
45 сообщений из 45, показаны все 2 страниц
Способ хранения для класса
    #36773611
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите плз... Очень важно!

Необходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах, а не в виде списка в узле глобала, где хранится объект, полем которого является экземпляр данного класса.
Это, как я понял, можно задать через способе хранения класса. В документации (Class Definition Reference) нашел, что есть ключевое слово Structure внутри элемента StorageData, которое может принимать значение node, subnode, <пустая строка>:
- (empty string)—data is stored as a multiple values within a node.
- node—data is stored as a single value within a node.
- subnode—data is stored within repeating subnodes.
По умолчанию - listnode.

Только про то, как и где прописывать - ниче не написано...
Может кто разбирался с этим Storage, подскажите, плз...

Заранее огромное спасибо!
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36773648
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каше есть, редактор хранения, в этом редакторе полагаю можно сделать то что ты хочешь
добратся до него можно, в инспекторе выбрав, Storage, в свойствах Storage по умолчанию, выбери Data Nodes, по кнопке с троеточием откроется мастер хранения
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36773801
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

Да, с помощью этого мастера хранения можно добавить к определению способа хранения внутри тега Data тег Structure:
<Structure>subnode</Structure>

Однако при компиляции класса возникает ошибка...
Пишет "Неправильная структура схемы хранения"
Да и в мастере уже видно, что что-то не так. Если до изменения было:
Имя узла Глобальная ссылка
AddressState (ID)=$LB(Street,Number)
То после изменения:
Имя узла Глобальная ссылка
AddressState (ID)=
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36773983
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно в студии сделать "показывать структуру хранения"
Правда когда руками правишь - там не все очевидно.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774052
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

Пробовал в студии. Куда только не вставлял... Та же ошибка.
Поэтому и написал сюда, может кто это использовал или знает, где можно узнать (кроме Class Definition Reference).
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774085
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter, может поможет
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774275
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложите, пожалуйста, попробую глянуть.
А то так не очень понятно.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774292
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах, а не в виде списка в узле глобала
Что-то типа такого?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
/// 
Class tmp.tmp Extends %Persistent [ StorageStrategy = NewStorage1 ]
{

Property prm1 As %String;

Property prm2 As %String;

<Storage name="NewStorage1">
<Data name="Node1">
<Attribute>prm2</Attribute>
<Value name="1">
<Value>prm1</Value>
</Value>
</Data>
<Data name="Node2">
<Attribute>prm2</Attribute>
<Structure>node</Structure>
<Subscript>"prm2"</Subscript>
</Data>
<Data name="tmpDefaultData">
<Subscript>"1"</Subscript>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^tmp.tmpD</DataLocation>
<DefaultData>tmpDefaultData</DefaultData>
<ExtentSize> 100000 </ExtentSize>
<IdLocation>ID</IdLocation>
<IndexLocation>^tmp.tmpI</IndexLocation>
<SequenceNumber> 3 </SequenceNumber>
<StreamLocation>^tmp.tmpS</StreamLocation>
<Type>%CacheStorage</Type>
</Storage>
}
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774311
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах
Хранение типа стораж можно указать только для хранимых классов типа персистент. Т.к. в описании явно нужно указывать именя глобалов.
Так же при описании предлагается выбирать только свойства данного класса. Выбрать какие-то "дальние" свойства которые есть у свойства типа "другой класс" построитель не даёт.

Т.ч. если у тебя есть класс А сериалобжект со свойствами а1 и а2, класс Б со свойством б1 типа класс А - ты не сможешь расписать б1.ф1 и б1.а2 по узлам глобала в котором хранится класс Б.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774315
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaб1.ф1 и б1.а2
Читать как "б1.а1 и б1.а2"...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36774601
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот еще
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36775034
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaX_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах, а не в виде списка в узле глобала
Что-то типа такого?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
/// 
Class tmp.tmp Extends %Persistent [ StorageStrategy = NewStorage1 ]
{

Property prm1 As %String;

Property prm2 As %String;

<Storage name="NewStorage1">
<Data name="Node1">
<Attribute>prm2</Attribute>
<Value name="1">
<Value>prm1</Value>
</Value>
</Data>
<Data name="Node2">
<Attribute>prm2</Attribute>
<Structure>node</Structure>
<Subscript>"prm2"</Subscript>
</Data>
<Data name="tmpDefaultData">
<Subscript>"1"</Subscript>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^tmp.tmpD</DataLocation>
<DefaultData>tmpDefaultData</DefaultData>
<ExtentSize> 100000 </ExtentSize>
<IdLocation>ID</IdLocation>
<IndexLocation>^tmp.tmpI</IndexLocation>
<SequenceNumber> 3 </SequenceNumber>
<StreamLocation>^tmp.tmpS</StreamLocation>
<Type>%CacheStorage</Type>
</Storage>
}


Да, кажется это то, что нужно. Огромное спасибо!
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36775044
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefintX_Shooter, может поможет

Это тоже, чувствую, сильно пригодится. Премного благодарен.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36775052
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaX_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах
Хранение типа стораж можно указать только для хранимых классов типа персистент. Т.к. в описании явно нужно указывать именя глобалов.
Так же при описании предлагается выбирать только свойства данного класса. Выбрать какие-то "дальние" свойства которые есть у свойства типа "другой класс" построитель не даёт.

Т.ч. если у тебя есть класс А сериалобжект со свойствами а1 и а2, класс Б со свойством б1 типа класс А - ты не сможешь расписать б1.ф1 и б1.а2 по узлам глобала в котором хранится класс Б.

Да, пока разбирался с этим уже столкнулся. Жаль, конечно. Вообще бы красота получилась...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36775302
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter , я бы вообще не очень-то уповал на этот сторадж... Думается мне он был разработан в рамках "акции" - "мы можем описать как класс любое ваше хранение, переходите быстрей с МСМ на Каше".

Нам так это вообще никак не помогло. Из-за дюже извращенного способа хранения данных...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778247
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Для класса типа сериалобжект, судя по всему, нельзя прописать структуру хранения, подобную той, которая описана в вашем примере?
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778305
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter , хранение прописывается только у хранимых классов. Там ведь сразу глобал нужно указывать.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778335
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Т.е. получается, как ни крути, а такие объекты могут храниться в глобале, соответствующего к/л персистентному классу, только в виде списка?
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778409
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter , я не совсем понял вопрос...

Хранение можно указать только хранимому классу. Т.е. персистент... Причем в описании хранения будут присутствовать только свойства описваемого класса. Их "сложный" тип вообще не учитывается при описании.

Для удобства помощи со стораджом лучше приводить пример класса и потом на глобалах показать какхочется "завернуть" хранение.
Т.о. можно получить некий вариант.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778440
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Пример.
Класс 1:

Class Temp.Person Extends %Persistent [ StorageStrategy = NewStorage1 ]
{
Property Name As %String;

Property Phone As %String;

Property Adr As Address;
}

Класс 2:

Class Temp.Address Extends %SerialObject [ StorageStrategy = NewStorage1 ]
{
Property City As %String;

Property Street As %String;
}

Можно ли сделать в глобале вот так:
^Temp.PersonD(1,"Name")="John Smith"
^Temp.PersonD(1,"Phone")="235-05-45"
//до сих пор все понятно
//но адрес хочу хранить так:
^Temp.PersonD(1,"Adr","City")="NewYork"
^Temp.PersonD(1,"Adr,"Street")="Park Avenue"

/*
Т.е. не просто ^Temp.PersonD(1,"Adr")=$lb("NewYork","Park Avenue"),
а прям поддеревом
*/


В способе хранения сериалобжектов есть тег State, который отвечает за содержимое и соответствует одному тегу Data. Т.е. поля класса Address нельзя разносить в разные теги Data и описывать для каждого Subscript и Structure.

**Создавать новый способ хранения через мастер и модифицировать его через инспектор не получается, так как у классов сериалобжект способ хранения имеет тип %Library.CacheSerialState, а не Storage вовсе...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778442
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хранение по умолчанию для Address:

<Storage name="Default">
<Data name="AddressState">
<Value name="1">
<Value>State</Value>
</Value>
<Value name="2">
<Value>City</Value>
</Value>
<Value name="3">
<Value>Street</Value>
</Value>
<Value name="4">
<Value>Zip</Value>
</Value>
</Data>
<State>AddressState</State>
<StreamLocation>^Temp.AddressS</StreamLocation>
<Type>%Library.CacheSerialState</Type>
</Storage>
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778615
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//но адрес хочу хранить так:
^Temp.PersonD( 1 ,"Adr","City")="NewYork"
^Temp.PersonD( 1 ,"Adr,"Street")="Park Avenue"

/*
Т.е. не просто ^Temp.PersonD(1,"Adr")=$lb("NewYork","Park Avenue"), 
а прям поддеревом
*/

Значит я правильно понял...
И сразу писал - нет в диалоге стораджа вариантов со свойствами типа "другой класс". Выбирать и манипульровать можно только свойствами описываемого класса.

Сам сторадж изначально (личное мнение) делался не для "ломания классов"... А наоборот. Делания классов из произвольного хранения данных в неких глобалах. На переходный период с МСМ на Каше.

Смысла переделывать хранение стандартного класса нет никакого. Это всегда объясняли специалисты ИС.

В твоём случае я бы сделал класс "Адрес" хранимым, а его экземпляры ссылались бы на Персон...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778654
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter,

Если Вам это действительно очень надо, то это возможно. Правда, как справедливо заметил krvsa , непонятно зачем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<Storage name="Default">
<Data name="personName">
<Attribute>Name</Attribute>
<Structure>node</Structure>
<Subscript>"Name"</Subscript>
</Data>
<Data name="personPhone">
<Attribute>Phone</Attribute>
<Structure>node</Structure>
<Subscript>"Phone"</Subscript>
</Data>
<Data name="personAdrCity">
<Attribute>Adr.City</Attribute>
<Structure>node</Structure>
<Subscript>"Adr","City"</Subscript>
</Data>
<Data name="personAdrStreet">
<Attribute>Adr.Street</Attribute>
<Structure>node</Structure>
<Subscript>"Adr","Street"</Subscript>
</Data>
<DataLocation>^Temp.PersonD</DataLocation>
<DefaultData>personDefaultData</DefaultData>
<ExtentSize> 100000 </ExtentSize>
<IdLocation>^Temp.PersonD</IdLocation>
<IndexLocation>^Temp.PersonI</IndexLocation>
<StreamLocation>^Temp.PersonS</StreamLocation>
<Type>%Library.CacheStorage</Type>
</Storage>

PS: такой вариант задания схемы возможен только в "ручном" режиме. Стандартная схема хранения встраиваемого класса в любом случае останется.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36778672
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitтакой вариант задания схемы возможен только в "ручном" режиме
Спасибо, буду знать! Пока только с "интерфейсом" имел дело...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779052
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Спасибо, теперь все вышло. А я то пытался сделать это в описании самого класса Address...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779064
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaservitтакой вариант задания схемы возможен только в "ручном" режиме
Спасибо, буду знать! Пока только с "интерфейсом" имел дело...

Кстати, с использованием интерфейса это тоже можно. Если не выбирать в выпадающем списке имя нужного свойства, а писать руками, например Adr.Street. А в поле для задания индекса глобала можно писать прямо: "Adr","Street" одной строкой, тогда получается как раз то, что показал servit.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779114
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_ShooterКстати, с использованием интерфейса это тоже можно. Если не выбирать в выпадающем списке имя нужного свойства, а писать руками
Ясно, учту...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779339
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X_Shooterservit,

Спасибо, теперь все вышло. А я то пытался сделать это в описании самого класса Address...
А нет, не вышло...
servit, у Вас класс нормально компилится?
Просто у меня компилятор ругается.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779523
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter,

Компилируется без ошибок и данные сохраняются как задумано (Caché 2010.2.FT5).
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779753
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X_Shooter[quot X_Shooter]
Просто у меня компилятор ругается.
наверное, на имя свойства с точкой
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779849
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter,

Проверил в Caché 5.0.21 - компилируется без ошибок и сохраняет данные согласно Вашим требованиям.

PS: не используйте мастер.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779924
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

У меня стояла Cache 2008.1.0, там делал через местер и выскакивала ошибка.
Только что скачал Cache 2010.1.3. Сделал в ней то же самое через мастер - ошибки нет...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36779930
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правда при компиляции автоматически создается узел PersonDefaultData и туда помещается Adr:
<Data name="PersonDefaultData">
<Value name="1">
<Value>Adr</Value>
</Value>
</Data>

и никак его не уберешь...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #36780438
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooterи никак его не уберешь...
Так ведь это свойствоесть в классе... Надо же его куда-то девать.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Способ хранения для класса
    #37384679
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто-нибудь сталкивался - у меня в Storage прописалось расчетное свойство (причем только одно из нескольких)?
я думала это только для хранимых свойств? наткнулась случайно: расчетное свойство было создано, когда мы еще были на 2009 версии каше..сейчас 2010, а так не замечала чтобы расчетные св-ва прописывались в структуру хранения...
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37384789
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка ,

Есть тип вычисляемых полей, которые хранятся в БД: Two Types of Computed SQL Fields
Скорее всего у Вас используется именно такой (Triggered computed) тип поля или на момент первой компиляции класса это поле было невычисляемым, поэтому и осталось в схеме хранения.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37386186
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit ,

вычисляемое свойство самое обычное, по системе контроля верий проверила - свойство изначально было добавлено как вычисляемое, т.е. ранее оно не было хранимым


В урезанном варианте:

Property Category As cls.MyClass [ Calculated, SqlComputeCode = {
s {Category}=##class(cls.MyClass).GetCategory({ID})
}, SqlComputed ];
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37386535
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка ,

Создал и скомпилировал следующий класс:

Class User.Test Extends %Persistent
{
Property name As %String(MAXLEN = 2000);
Property rowCount As %Integer;
Property Category As User.Test [ Calculated, SqlComputeCode = {s {Category}=##class(User.Test).%OpenId({ID})}, SqlComputed ];
}

Потом проверил схему хранения на наличие свойства Category для разных версий Caché:
5.0.21 - отсутствует ;

2009.1.1 - отсутствует ;

2011.2.0 - отсутствует ;

Если у Вас есть подозрение на баг конкретной версии СУБД, то проверить можно просто:
сделайте резервную копию класса, удалите схему хранения и перекомпилируйте класс заново.

PS: проверьте, есть ли данные в глобале в позиции вычисляемого свойства согласно схеме хранения.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388205
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аленочка,
может быть свойство Category прописано в абстрактном суперклассе и наследуется?
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388258
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shuАленочка,
может быть свойство Category прописано в абстрактном суперклассе и наследуется?
нет не наследуется. свойство уникально в рамках одного класса
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388276
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit
Если у Вас есть подозрение на баг конкретной версии СУБД, то проверить можно просто:
сделайте резервную копию класса, удалите схему хранения и перекомпилируйте класс заново.
сделала копию класса, пересла полностью свое вычисляемое св-во в том же виде + 1 хранимое дя теста
в структуре хранения все ок! прям загадка века какая-то ;) возможности проделать то же самое в 2009 версии уже нет..к сожалению..

по поводу просмотра данных в глобалах - как правильно задать маску для выборки в портале управления, если класс у меня наследуется ? предок класс - doc.Line (глобал один ^doc.LineD), мой конечный класс с вычисляемым св-вом предположим называется doc.aa.bb.Line
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388326
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочкав структуре хранения все ок! прям загадка века какая-тоКак я писал выше, такое бывает, когда разработчики "временно" меняют что-то в классе. Например, можно добавить свойство в класс, скомпилировать его, удалить это свойство и снова скомпилировать класс. В схеме хранения останется фантом. Кто-то потом может долго гадать откуда он взялся.
Аленочкавозможности проделать то же самое в 2009 версии уже нет..к сожалению..Уверен, что ситуация не изменилась бы. См. мой предыдущий пост.
Аленочкапо поводу просмотра данных в глобалах - как правильно задать маску для выборки в портале управления, если класс у меня наследуется ?Можно поступить проще: сделать временно вычисляемое поле обычным хранимым и потом выполнить простой SQL запрос:
Код: plaintext
select Category from table where Category is not null
.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388364
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit
В схеме хранения останется фантом. Кто-то потом может долго гадать откуда он взялся.

да, похоже что так и есть.
а если я хочу удалить этот "фантом" из структуры хранения - стоит ли мне это делать? порядковый номер этого св-ва = 6, после него идут другие св-ва по порядку 7,8 и т.д. я так понимаю с удалением чего-то из структуры хранения в Каше есть свои тонкости..?

ну и тогда уже по ходу задам вопрос: если я хочу избавиться от некого хранимого св-ва которое года 2 назад мне было нужным, а сейчас нужным быть перестало (собственно как и данные которые оно хранит), какие есть способы быстро и безболезненно от него избавиться ? т.е. "грохнуть" и свойство в классе и хранимые в глобале данные
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388417
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка ,

Если данных ещё нет, то можно безболезненно удалить поле из схемы хранения, сдвинув остальные поля.
Если данные уже есть, то лучше поле не удалять, а обнулить, то есть:
вместо
^global(ID)=$LB(%%CLASSNAME,field1,Category,field3)
должно получиться
^global(ID)=$LB(%%CLASSNAME,field1,,field3)

Но перед этим нужно не забыть обнулить поле либо через запрос, либо программно:
update my.Class set Category=null

Потом вновь создаваемые поля в схеме хранения можно помещать на место таких пустот.
...
Рейтинг: 0 / 0
Способ хранения для класса
    #37388438
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше систему хранения не трогать.
Если есть старые данные, их можно обнулить, а в целом, влиянием дырки на размер хранения и быстродействие можно пренебречь.
Если данных нет совсем, проще структуру хранения совсем грохнуть, она пересоздастся.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Способ хранения для класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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