18.05.2019
Разработан класс, реализующий прямую работу с btrieve API. Стандартно в среде разработки Clarion взаимодействие с btrieve/pervasiveSQL/actian Zen осуществляется через встроенный драйвер, который позволяет манипулировать одиночными записями в базе данных. Он также работает через btrieve API, но не использует возможности расширенных операций - пакетное чтение записей за один запрос, чтение только заданных полей записей, фильтрацию записей на стороне сервера. Расширенные операции повышают скорость получения информации из базы, что может быть полезно при построении некоторых отчетов. Новый класс позволяет легко задействовать в приложении расширенные операции, используя объектный интерфейс. По проведенному тестированию прирост скорости по сравнению со стандартным чтением отдельных записей на объемных выборках составляет примерно 6-7 раз.
Код:
form_r routine
DATA
FsBtrieveApiL FsBtrieveApi
lor:queue queue, pre()
lor:nameK string(20)
end
lor:filtrVal long
CODE
FsBtrieveApiL.init(TestBtrv,TBtr:key1) !параметрами передаем ссылку на таблицу и ключ
clear(TBtr:record) !устанавливаем значения для ключа
TBtr:ID=1
FsBtrieveApiL.GetEqual() !встаем на запись с ид=1
if FsBtrieveApiL.StatusOk=1 !запись найдена
lor:filtrVal=1
FsBtrieveApiL.AddFilter('TBtr:ID','>','',0, lor:filtrVal ,0,0) !добавляем фильтрацию ид>1
FsBtrieveApiL.GetNextExt(lor:queue,100,0,0) !читаем одно поле в очередь порцией 100 записей
fsViewQueue('',lor:queue) !смотрим результат
free(lor:queue)
end
FsBtrieveApiL.kill
Результат работы примера.