Проблеммы с CacheInsert в FIBPlus 5.3.0

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
LeShik
Сообщения: 7
Зарегистрирован: 28 окт 2004, 17:03

Проблеммы с CacheInsert в FIBPlus 5.3.0

Сообщение LeShik » 01 ноя 2004, 19:22

Народ потратил просто уйму времени, пытаясь вставить в кэш DataSet- а пустые записи. Пытался использовать метод FIBDataSeta CacheInsert(int *aFields,int size,Variant *Values, int size). Ниже фрагмент кода

Код: Выделить всё

 
// DS - компонент на форме типа TpFIBDataSet

Variant *StopValues = new Variant[fn];
int fn = DS->FieldCount;

for(int i=0;i<fn;i++)
  {
     StopValues[i]=Null();
     Fields[i]=i;
     if (DS->FieldByFieldNo(i+1)->DataType == ftString)
       StopValues[i]="STOP";
     if (DS->FieldByFieldNo(i)->FieldName == "NUM")
       NumFPos = i-1;
  }

try
{
int CurNum;
while (!DS->Eof)
{
   CurNum = DS->FBN("NUM")->AsInteger;
   if ((DS->FBN("Location")->Value==1)&&!StopPr)
   {
    StopValues[NumFPos]=CurNum;
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    DS->CacheInsert(Fields,fn,StopValues,fn);

    }
DS->Next();
}
}
__finally
  {
    delete [] Fields;
    delete [] StopValues ;
    delete [] EmptyValues ;
  };
Во время выполнения CacheInsert - вылетают ошибки Invalid Variant Operation. Если пользоваться синтаксисом CacheInsert(Variant &Value, bool DoRefresh) - всё проходит нормально. Но в этом случае значение подставляется только в первое поле. А мне надо заполнить несколько.

Выборка в исходном датасете необновляемая из ХП

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 ноя 2004, 19:24

Пожалуйста, с такими вопросами обращайтесь в форум или техническое сопровождение Devrace (FIBPlus).

LeShik
Сообщения: 7
Зарегистрирован: 28 окт 2004, 17:03

Сообщение LeShik » 02 ноя 2004, 10:21

Понял, просто рассчитывал, что тут бывают люди которые сталкивались с такими проблемами

*HELLy*

Сообщение *HELLy* » 11 ноя 2004, 19:11

Я использую CacheAppend, но думаю, что особой разницы нет:

int intArr[4] = {0,1,2,3};
const int* Ar = intArr;
Variant vFields;
vFields = Null();
dmAdmin->dsBlsDescript->CacheAppend(Ar,0,&vFields,0);

Ответить