Шаг 13 - Пробег записей TDataSet

Компонент TDbf является стандартным потомком TDataSet, а это значит, что большинство методов и свойств, которые ниже будут рассмотрены, одинаково переносимы также и на любой другой объект доступа к таблице.

Для обозначения номера текущей записи в таблице используется свойство только по чтению ActiveRecord. Вообще, строго говоря, позиционирование при помощи прямого изменения свойств изначально в TDataSet не предусмотрено. Вместо этого используется набор функций: First, Last, Next, Previous. Я думаю, общий смысл этих функций понятен. В качестве примера приведу заполнение обычного TListView из таблицы:

//**** начальная инициализация
Dbf1->Active = true;
Dbf1->First();
grid->Items->BeginUpdate();
//**** количество записей в таблице
ProgressBar1->Max = Dbf1->RecordCount;
while(!Dbf1->Eof)
{
	TListItem* i = grid->Items->Add();
	i->caption = Dbf1->Fields->Fields[1]->AsString;
	i->SubItems->Add(Dbf1->Fields->Fields[2]->AsString);
	vec[i]->size = Dbf1->Fields->Fields[5]->AsInteger;
	i++;
	ProgressBar1->Position++;
	Dbf1->Next();
}
Dbf1->First();
Dbf1->Active = false;
grid->Items->EndUpdate();

Необходимо отметить, что при выполнении такого рода пробега необходимо отключить все связанные с этим источником данных таблицы, поскольку изменение номера текущей записи автоматически меняет позиционирование курсора TDBGrid. Это очень сильно замедляет работу алгоритма.

Обратите внимание, что во многих случаях использование TDBGrid предпочтительнее, скажем, той же TStringGrid, в связи с тем, что таблица не загружается сразу и полностью, а только та часть, которая в данный момент видна на экране. Это дает ощутимую экономию процессорного времени и памяти. С другой стороны, явным недостатком TDBGrid является отсутствие операций сортировки по полю. К этой теме в следующих шагах я еще собираюсь вернуться.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 05.02.2004