
- •1. Наборы данных
- •Var I: integer;
- •1.1. Состояния наборов данных
- •If not CheckBoxl.Checked then Abort;
- •If not CheckBoxl.Checked then begin
- •If CheckBox2.Checked then
- •If CheckBox2.Checked then begin
- •1.2. Режимы наборов данных
- •1.3. Доступ к полям
- •Var n: integer;
- •Var X: integer;
- •Var X: integer;
- •1.4. Особенности набора данных Table
- •If OpenDialogl.Execute then begin
- •Var n: integer;
- •If Editl.CanFocus then Editl.SetFocus;
- •1.5. Особенности набора данных Query
- •Interface
- •Implementation
- •2. Объекты поля
- •2.1 Редактор полей
- •2.2. Операции с полями
- •Var X: integer;
- •Var s: string;
- •X: real;
- •Var s: string;
- •X: real;
- •If not Tablel.Fields[2].IsValidChar(Editl.Text[1]) then
- •If (TablelCode.Required) and (TablelCode.IsNull)
- •3. Источник данных
- •Var n: integer;
- •1. Отображение и редактирование значения логического поля
- •2. Отображение и выбор значения поля
- •3. Отображение и выбор значения поля из списка
- •3.1. Простой и комбинированный списки
- •3.2. Списки, сформированные по значениям поля набора данных
- •4. Представление записей в табличном виде
- •4.1 Характеристики сетки
- •Var r :tRect;
- •4.2. Столбцы сетки
- •Var c, n :integer;
- •4.3. Использование модифицированной сетки
- •5. Использование навигационного интерфейса
- •6. Вывод графических изображений
- •Interface
- •Implementat ion
- •If OpenPictureDialogl.Execute then
- •If SavePictureDialogl.Execute then
- •7. Построение диаграмм
- •Var n: integer;
Лекция 7
Компоненты доступа к данным
1. Наборы данных
1.1. Состояния наборов данных
1.2. Режимы наборов данных
1.3. Доступ к полям
1.4. Особенности набора данных Table
1.5. Особенности набора данных Query
2. Объекты поля
2.1 Редактор полей
2.2. Операции с полями
3. Источник данных
Приложение к лекции 7. Визуальные компоненты для работы с данными
Компоненты доступа к данным являются невизуальными. В этой лекции мы рассмотрим основные компоненты доступа к данным, которые используются при работе с локальными и удаленными БД.
Компоненты Session и Database, применяемые для управления соединениями с БД и транзакциями, будут изучены далее.
1. Наборы данных
Таблицы БД располагаются на диске и являются физическими объектами. Для операций с данными, содержащимися в таблицах, используются наборы данных. В терминах системы Delphi набор данных представляет собой совокупность записей, взятых из одной или нескольких таблиц БД. Записи, входящие в набор данных, отбираются по определенным правилам, при этом в частных случаях набор данных может включать в себя все записи из связанной с ним таблицы или не содержать ни одной записи. Набор данных является логической таблицей, с которой можно работать при выполнении приложения. Взаимодействие таблицы и набора данных напоминает взаимодействие физического файла и файловой переменной.
Замечание
В отличие от Delphi, многие СУБД вместо термина набор данных используют термины выборка или таблица.
В Delphi для работы с наборами данных служат такие компоненты, как Table, Query, UpdateSQL, DecisionQuery или StoredProc. Компонент StoredProc используется для вызова хранимых процедур при организации взаимодействия с удаленными БД, а компонент UpdateSQL обеспечивает работу с кэшированиями изменениями в записях. Эти компоненты рассматриваются при описании удаленных БД. Компонент DecisionQuery применяется при построении систем принятия решений.
Наиболее универсальными и, соответственно, часто используемыми являются компоненты Table и Query, задающие наборы данных. Они будут подробно описаны немного ниже.
Базовые возможности доступа к БД обеспечивает класс TDataSet, представляющий наборы данных в виде совокупности строк и столбцов (записей и полей). Этот класс содержит в себе основные средства навигации (перемещения) и редактирования наборов данных.
Компоненты Table и Query являются производными от класса TDBDataSet — потомка класса TDataSet (через класс TBDEDataSet). Они демонстрируют схожие с базовыми классами характеристики и поведение, но каждый из них имеет и свои особенности. Здесь мы рассмотрим наиболее общие характеристики наборов данных. Большая часть свойств, методов и событий изучается на примере операций с наборами данных.
Расположение БД, с таблицами которой выполняются операции, указывает свойство DatabaseName типа string. Значением свойства является имя каталога, в котором находится БД (файлы ее таблиц), или псевдоним, ссылающийся на этот каталог. Если для БД определен псевдоним, то его можно выбрать через Инспектор объектов в раскрывающемся списке.
Замечание
Желательно задавать имя БД через псевдоним. Это заметно облегчает перенос приложения и файлов БД в другие каталоги и на другие компьютеры, т. к. для обеспечения работоспособности приложения после изменения расположения БД достаточно изменить название каталога, на который ссылается псевдоним БД.
Для компонента Table использование свойства DatabaseName является единственной возможностью задать местонахождение таблиц БД. Для компонента Query дополнительно можно указать в запросе SQL путь доступа к каждой таблице.
Замечание
При задании расположения БД программным способом набор данных предварительно необходимо закрыть, установив его свойству Active значение False. В противном случае генерируется исключительная ситуация.
Вот пример, иллюстрирующий, как задается расположение БД:
Table1.Active:=false;
Table1.DatabaseName:='BDPlace';
Table2.Active:=false;
Table2.DatabaseName: ='С:\SALE\BD' ;
Для набора данных Tablel таблицы БД расположены в каталоге, на который указывает псевдоним BDPlace. Таблицы БД для набора данных Table2 расположены в каталоге C:\SALE\BD. Для определения и изменения псевдонима и его параметров удобно использовать такие программы, как Database Desktop или BDE Administrator (рассматриваются в лекции, посвященной инструментальным средствам).
В зависимости от ограничений и критерия фильтрации один и тот же набор данных в разные моменты времени может содержать различные записи. Число записей, составляющих набор данных, определяет свойство RecordCount типа Longint. Это свойство доступно для чтения при выполнении приложения. Управление числом записей в наборе данных осуществляется косвенно — путем отбора записей тем или иным способом, например, с помощью фильтрации или SQL-запроса (для компонента Query).
В приводимом примере производится перебор всех записей набора данных: