Страница 1 из 1

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

Добавлено: 01 ноя 2004, 19:22
LeShik
Народ потратил просто уйму времени, пытаясь вставить в кэш 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) - всё проходит нормально. Но в этом случае значение подставляется только в первое поле. А мне надо заполнить несколько.

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

Добавлено: 01 ноя 2004, 19:24
kdv
Пожалуйста, с такими вопросами обращайтесь в форум или техническое сопровождение Devrace (FIBPlus).

Добавлено: 02 ноя 2004, 10:21
LeShik
Понял, просто рассчитывал, что тут бывают люди которые сталкивались с такими проблемами

Добавлено: 11 ноя 2004, 19:11
*HELLy*
Я использую CacheAppend, но думаю, что особой разницы нет:

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