Особенности закрытия объектов при работе через ActiveX, CPP-binding.

В документации сказано, что объекты в Cache закрываются автоматически, как только удаляется из памяти соответствующая им переменная на стороне клиента. На самом деле есть нюанс – присходит не само закрытие объекта, а кэширование (в Database для CPP-binding и Factory для CacheActiveX ) того, что необходимо ее закрыть при следующем обращении к базе. Сделано это для увеличения производительности, чтобы сократить число обращений к Cache. В большинстве случаев это не вызывает никаких проблем. Например, при обработке нескольких объектов в цикле, открытие объекта на следующей итерации приведет и к закрытию объекта открытого на предыдущей итерации. Но иногда необходимо гарантированно закрыть объект, не дожидаясь следующего обращения к Cache. Это можно сделать с помощью методов sync() для Database и ForceSync() для Factory.

Примеры, функций, принудительно закрывающих объекты:

СPP-binding
void test(Database* db, const const_str_t idobj)
{
{
d_ref<Sample_Person> person1 = Sample_Person::openid(db, idobj, 4);
std::cout << “w p.Name\n”<< person1->getName() << ‘\n’;
}

db->sync();
}

или

void test(Database* db, const const_str_t idobj)
{
d_ref<Sample_Person> person1 = Sample_Person::openid(db, idobj, 4);
std::cout << “w p.Name\n”<< person1->getName() << ‘\n’;
person1.make_null(); // please note the  dot instead of the indirection

db->sync();
}

ActiveX на Delphi

function GetName(Factory:variant; Id:string):string;
var obj:variant;
begin
obj:=Factory.OpenId(‘Sample.Person’,Id,4);
result:= obj.Name;
obj:=NULL;
Factory.ForceSync;
end;

Особенности закрытия объектов при работе через ActiveX, CPP-binding.: 2 комментария

  1. Уведомление: Работа с объектами Cach? из Delphi | writeimagejournal.com

  2. Уведомление: Работа с объектами СУБД Caché на примере Delphi | writeimagejournal.com

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *