Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
LeShik
- Сообщения: 7
- Зарегистрирован: 28 окт 2004, 17:03
Сообщение
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);