- •4.1. Основные понятия
- •4.2. Создание псевдонима базы данных
- •4.3. Создание таблиц базы данных
- •4.3.1. Объявление полей
- •4.3.2. Изменение языкового драйвера
- •4.3.3. Определение индексов
- •4.3.4. Определение ссылочной целостности между таблицами
- •4.3.5. Изменение структуры таблицы
- •4.4. Открытие и сохранение таблицы
- •4.5. Дополнительные утилиты
- •5.1. Взаимодействие классов, обеспечивающих доступ к таблицам
- •5.2. Классы tField и tTable: основное назначение и свойства
- •5.2.1. Класс tField: основное назначение и свойства
- •5.2.2. Класс tТable: основное назначение
- •5.2.3. Основные свойства класса tTable
- •5.2.4. Основные методы класса tTable
- •1) Доступ к таблице бд
- •2) Перемещение по записям таблицы
- •3) Режим редактирования таблицы
- •4) Доступ к значениям полей по имени
- •5) Добавление, удаление записей
- •6.1. Индексирование таблиц
- •6.2. Поиск записей
- •6.3. Поля компонента Table
- •6.4. Вычисляемые и связанные поля
- •Лекция 7. Запросы.
- •7.1. Запросы
- •7.3. Запросы с параметрами
- •Перед обращением к данному запросу необходимо задать значения двух параметров (типы данных: Country – String, Year- Short), а затем выполнить запрос:
- •7.4. Запросы с операторами delete, insert, update
5.2.4. Основные методы класса tTable
Рассмотрим основные методы класса TTable, необходимые для реализации простейших приложений, и способы их использования.
1) Доступ к таблице бд
Связь между компонентом и реальной таблицей БД обеспечивается методом Open. Доступ к записям таблицы БД через связанный с таблицей компонент возможен только после выполнения этого метода.
Open – открывает доступ к таблице БД через компонент (свойство Active таблицы получает значение True). Обращение имеет вид: Table1.Open.
Close – закрывает доступ к таблице БД через компонент (свойство Active таблицы получает значение False).
2) Перемещение по записям таблицы
Для перехода по записям таблицы БД, связанной с компонентом, используются следующие методы:
First – текущей становится первая запись таблицы;
Last – текущей становится последняя запись таблицы;
Next – текущей становится следующая запись таблицы;
Prior – текущей становится предыдущая запись таблицы.
Для последовательного перехода по записям таблицы можно использовать следующий цикл:
Table1.First;
while not Table1.Eof do // Пока не дошли до конца таблицы
begin
<доступ к текущей записи таблицы>;
// Переход к очередной записи таблицы
Table1.Next
end;
Последовательность переходов осуществляется в соответствии с первичным или установленным вторичным индексом (см. Лекция 6).
3) Режим редактирования таблицы
Для внесения изменений в таблицу БД, связанную с компонентом, используется метод Edit: Table1.Edit. После этого становится возможным изменение значений полей текущей записи таблицы БД. Такой режим называется режимом редактирования. Для выхода из режима редактирования используются методы Post (выход из режима редактирования с внесением произведенных изменений в текущую запись таблицы) или Cancel (выход из режима редактирования без внесения произведенных изменений). Для перехода к другой записи таблицы необходимо выйти из режима редактирования!
4) Доступ к значениям полей по имени
С помощью метода FieldByName компонента Table возможен доступ к полю физической таблицы по имени. Этот способ часто бывает удобнее, чем через свойство Fields, т.к. позволяет не задумываться о последовательности полей в таблице.
Заголовок метода имеет вид:
function FieldByName(const FieldName: string): TField;
В параметре FieldName задается имя поля таблицы БД, к которому происходит доступ.
Метод возвращает значение класса TField.
Пусть таблица БД, представляемая компонентом Table1, содержит поля: F_Date (D) и F_Text (A), а переменные PDate и PText содержат введенные пользователем новые значения полей.
Структура фрагмента программного кода, позволяющего внести изменения в значения полей текущей записи может быть представлена в следующем виде:
Table1.Edit;
//Изменение значений полей
Table1.FieldByName('F_Date').AsDateTime:=PDate;
Table1.FieldByName('F_Text').AsString:=PText;
if MessageDlg('Внести изменения?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
//пользователь подтверждает внесение изменений в таблицу БД
begin
Table1.Post;
ShowMessage('Изменения внесены!')
end
else
//пользователь отменяет внесение изменений в таблицу БД
begin
Table1.Cancel;
ShowMessage('Изменения отменены!')
end;
После выполнения метода Post изменения будут внесены в текущую запись таблицы БД и «откат» (возврат предыдущих значений) будет невозможен. После выполнения метода Cancel поля текущей записи таблицы БД получат прежние значения.
Для последовательного просмотра значений указанных полей таблицы можно использовать следующий фрагмент программного кода:
Table1.First;
while not Table1.Eof do
// Пока не дошли до конца таблицы
begin
//Доступ к значениям полей текущей записи таблицы
ShowMessage('Дата: '+Table1.FieldByName('F_Date').AsString+' 'Текст: '+ Table1.FieldByName('F_Text').Value);
// Переход к очередной записи таблицы
Table1.Next
end;
Существует еще один способ программного доступа к значениям полей текущей записи: по физической таблице БД сформировать массив полей и связать его с компонентом Table1. Для этого необходимо щелкнуть дважды по компоненту Table1, нажать правую кнопку мыши и в меню выбрать пункт меню Add all fields.
После этого сформируется связанный с компонентом массив полей исходной таблицы БД. Имена полей формируются по умолчанию в виде: <Имя таблицы><Имя поля>, типы полей соответствуют типам полей таблицы БД. Например, вывод значений из предыдущего примера в этом случае можно было бы записать так:
ShowMessage('Дата: '+Table1F_Date.AsString+' 'Текст: '+ Table1F_Text.Value);
В некоторых ситуациях такой способ доступа удобен, а в других просто необходим (их мы рассмотрим далее).