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

Что за FastFirstRow ?

Добавлено: 31 май 2005, 14:35
BorisT
В сообщениях вижу регулярно GetFirst FastFirstRow..., по смыслу вроде что-то интересное.
Попробовал - компилер незнает такой таблички :).
Что это за такое ?

Кста, привет от старых штиблет :)

Добавлено: 31 май 2005, 15:02
Max_Fin
FastFirstRow используется для ускорения запросов к БД. Если не используется этот префикс, то по умолчанию БД кэширует все данные относительно используемого индекса и ждет GetNext. Очень часто необходимо получить данные заведомо только из одной записи, не перебирая остальные.
Пример использования:

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

if GetFirst FastFirstRow SpSopr 
  where ((Word(1) == SpSopr.RrMC and
               cRec == SpSopr.cMCUsl)) = tsOK
{
  Message('Цена товара ' + SpSopr.Price);
}
Помимо этого, существуют ситуация когда необходимо проверить есть ли такая запись в БД или нет. Тогда используется RecordExists.
Пример:

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

if RecordExists SpSopr where ((KatSopr.nRec == SpSopr.cSopr)) <> tsOK
{
  Message('К сожалению, нет ни одной спецификации в выбранной накладной', Error);
}
Но используя RecordExists указатель записи не перемещается, а остается на текущей!

Добавлено: 31 май 2005, 16:22
BorisT
Проверил

Время формирования 00:03:56,07 - просто гетфирст
Время формирования 00:03:26,87 - GetFirst FastFirstRow
Время формирования 00:03:30,98 - снова GetFirst
Время формирования 00:03:14,61 - ещё раз FastFirstRow

Вывод - выигрыш есть, но кеши важней ;)
Отчет реально запускаемый с меньшими периодами конечно по 10 раз на дню, getfirst просто заменил во всём отчете (их там 56) на макроопределение. все сканы _loop where.

упд, чтоб соблюсть так сказать чистоту эксперемента поставил счетчик, в этом тесте на эти самые вызовы -
17:16:40,44 Getfirst-вызовов 161253