Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Наборы данных

CuBook05

Таблицы БД располагаются на диске и являются физическими объектами. Для операций с данными, содержащимися в таблицах, используются наборы данных. В С++ Builder набор данных представляет собой совокупность записей, взятых из одной или нескольких таблиц БД. Записи, входящие в набор данных, отбираются по определенным правилам, при этом в частных случаях набор данных может включать в себя все записи из связанной с ним таблицы или не содержать ни одной записи. Набор данных является логической таблицей, с которой можно работать при выполнении приложения. Взаимодействие таблицы и набора данных напоминает взаимодействие физического файла и файловой переменной.
В отличие от С++ Builder, многие СУБД вместо термина набор данных используют термины выборка или таблица.
 
В С++ Builder для работы с наборами данных при использовании механизма BDE служат такие компоненты, как Table, Query, UpdateSQL, DecisionQuery или storedProc. В случае других механизмов доступа для работы с наборами данных служат аналогичные компоненты ADOTable, ADOQuery и ASOStoredProc (для механизма ADO), SQLTable, SQLQuery и SQLStoredProc (для механизма dbExpress), iBTable, IBQuery, IBUpdateSQL и IBStoredProc (для механизма InterBase). Отличительные особенности последних мы рассмотрим при описании соответствующих механизмов доступа. Здесь остановимся на изучении компонентов для механизма доступа BDE.
 
Компонент storedProc используется для вызова хранимых процедур при организации взаимодействия с удаленными БД, а компонент updateSQL обеспечивает работу с кэшированными изменениями в записях. Эти компоненты рассматриваются при описании удаленных БД. Компонент DecisionQuery применяется при построении систем Принятия решений. Наиболее универсальными и, соответственно, часто используемыми являются компоненты Table и Query, задающие наборы данных.
 
Базовые возможности доступа к БД обеспечивает класс TDataset, представляющий наборы данных в виде совокупности строк и столбцов (записей и полей). Этот класс содержит основные средства навигации (перемещения) и редактирования наборов данных.
 
Компоненты Table и Query являются производными от класса TDBDataSet потомка класса TDataset (через класс TBDEDataSet). Они имеют схожие с базовыми классами характеристики и поведение, но у каждого из них есть и свои особенности. Здесь мы рассмотрим наиболее общие характеристики наборов данных. Большая часть свойств, методов и событий изучается на примере операций с наборами данных.
 
Расположение БД, с таблицами которой выполняются операции, указывает свойство DatabaseName типа Ansistring. Значением свойства является имя каталога, в котором находится БД (файлы ее таблиц), или псевдоним, ссылающийся на этот каталог. Если для БД определен псевдоним, то его можно выбрать в раскрывающемся списке окна Инспектора объектов.
 
Желательно задавать имя БД через псевдоним. Это облегчает перенос приложения и файлов БД в другие каталоги и на другие компьютеры, т.к. для обеспечения работоспособности приложения после изменения расположения БД достаточно изменить название каталога, на который ссылается псевдоним БД.
 
Для компонента Table использование свойства DatabaseName является единственной возможностью задать местонахождение таблиц БД. Для компонента Query дополнительно можно указать в запросе SQL путь доступа к каждой таблице.
При задании расположения БД программным способом набор данных предварительно необходимо закрыть, установив его свойству Active значение false. В противном случае генерируется исключение.
Вот пример, иллюстрирующий, как задается расположение БД:
Table1->Active = false;
Table1->DatabaseName = "BDPlace";
Table2->Active = false;
Table2->DatabaseName = "c:\Program Files\Borland\CBuilder\Examples\Data";
Для набора данных Table1 таблицы БД расположены в каталоге, на который указывает псевдоним BDPlace. Таблицы БД для набора данных Table2 расположены в каталоге c:\Program Files\Borland\CBuilder\Examples\Data. Для определения и изменения псевдонима и его параметров удобно использовать такие программы, как Database Desktop или BDE Administrator.
 
В зависимости от ограничений и критерия фильтрации один и тот же набор данных в разные моменты времени может содержать различные записи. Число записей, составляющих набор данных, определяет свойство RecordCount типа int. Это свойство доступно для чтения при выполнении приложения. Управление числом записей в наборе данных осуществляется косвенно путем отбора записей тем или иным способом, например, с помощью фильтрации или SQL-запроса (для компонента Query).
 
В приводимом примере при обработке события нажатия кнопки Button1 производится перебор всех записей набора данных:
void __fastcall TForm1::ButtonlClick(TObject *Sender)
Table1->First();
for (int i = 1; i <= Table1->RecordCount; i++)
{
// Инструкции, выполняющие обработку очередной записи:
ListBox1->Items->Add(Table1->Fields->Fields[0]->AsString);
Table1->Next();
}
Перебор всех записей набора данных осуществляется в цикле, для чего переменная i цикла последовательно принимает значения от 1 до RecordCount. Перед началом цикла вызовом метода First выполняется переход к первой записи набора данных. В цикле для перехода к следующей записи вызывается метод Next. В качестве инструкции обработки очередной записи используется заполнение списка (компонент ListBox1) значениями первого поля таблицы (Table1->pields->Fields[0]).
 
Для локальных таблиц dBase или Paradox составляющие набор данных записи последовательно нумеруются, отсчет начинается с единицы. Номер записи в наборе данных определяет свойство RecNo типа int, которое доступно во время выполнения программы.
 
Номер текущей записи можно узнать, например, так:
Edit1->Text = IntToStr(Table1->RecNo);
При изменении порядка записей при сортировке или фильтрации нумерация записей также изменяется.
 
Для таблиц Paradox свойство RecNo можно использовать для перехода к требуемой записи, установив в качестве значения свойства номер записи. Так, в операции
Table1->RecNo = StrToInt(Edit1->Text);
выполняется переход к записи, номер которой содержится в поле ввода Edit1. Указанная запись становится текущей.
 
Для выполнения операций с наборами данных используются два способа доступа к данным:
1. Навигационный.
2. Реляционный (SQL-ориентированный).
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий