bannerbannerbanner
полная версияБазы данных на Delphi 7

Сергей Николаевич Талипов
Базы данных на Delphi 7

Полная версия

2. ФИЛЬТРАЦИЯ ЗАПИСЕЙ ДЛЯ КОМПОНЕНТА «ADOTABLE»

Для включения режима фильтрации необходимо установить в «True» значение свойства «Filtered» у компонента «AdoTable». Значение «False» свойства «Filtered» выключает режим фильтрации базы данных. Перед включением режима фильтрации необходимо указать условие («фильтр») для отбора записей. Для установки фильтра служит свойства «Filter».

Фильтр может содержать символ «%», означающий любое количество любых символов. Кроме этого в фильтре допускаются операторы «AND» и «OR» и оператор «LIKE».

AdoTable1.Filtered:=false;

AdoTable1.Filter:=’name like ’’Сер%’’’;

AdoTable1.Filtered:=true;

for i:=1 to AdoTable1.recordcount do …

 …

3. ПОИСК ДАННЫХ В БД

У компонента «Table» имеются специальные команды для поиска нужной записи, удовлетворяющей заданному условию. Наиболее удобные функции поиска – «Locate» и «Lookup». Если поиск для функции «Locate» будет произведен успешно, то найденная запись в БД станет текущей, иначе текущая запись не изменится и ошибка не возникнет. Функция «Lookup» не меняет номера текущей записи при поиске, но если информация не будет найдена, то возникнет ошибка. Функция «Lookup» обычно используется для считывания значения нужного поля после поиска нужной записи, а функция «Locate» для установки новой текущей позиции в БД.

Пример точного поиска (а не фрагмента) с учетом регистра букв:

if Table1.Locate( 'famil', 'Petrov', [] ) then s:=Table1 ['name'] else s:='???';

try s:=Table1.Lookup( 'famil', 'Petrov', ‘name’ ); except s:=’???’; end;

Пример точного поиска (а не фрагмента) без учета регистра букв:

if Table1.Locate( 'famil', 'petrov', [loCaseInsensitive] ) then s:= Table1 ['name'] else s:='???';

Пример поиска по фрагменту без учета регистра букв:

Table1.Locate( 'famil', 'P', [loPartialKey, loCaseInsensitive] );

Пример поиска по фрагменту с учетом регистра букв:

if Table1.Locate( 'Company; Phone', VarArrayOf ( ['Micro', '408-'] ), [loPartialKey]) then

s:=Table1['code'] else s:='???';

Пример точного поиска с учетом регистра букв:

try s:=Table1.Lookup ( 'Company; Phone', VarArrayOf ( ['Microsoft', '408-431-1000'] ), 'code' );

except s:=’???’; end;

ЛЕКЦИЯ № 6

1. РЕЛЯЦИОННЫЙ ДОСТУП К БАЗЕ ДАННЫХ

Компоненты BDE, рассмотренные раннее, позволяют получить доступ к базам данных по технологии, разработанной фирмой Borland под названием Borland Database Engine. Эта технология устарела и поставляется только для совместимости со старыми версиями. Не смотря на это, она хорошо работает со старыми типами баз данных, такими как Paradox и dBase.

На смену BDE технологии пришла DBExpress – это новая технология доступа к данным фирмы Borland. Она отличается большей гибкостью и хорошо подходит для программирования клиент – серверных приложений, использующих базы данных. Компоненты с одноимённой закладки хорошо использовать с базами данных, построенных по серверной технологии, например, Oracle, DB2 или MySQL.

ADO (Active Data Objects) – технология доступа к данным, разработанная корпорацией Microsoft. Очень хорошая технология, но ее рекомендуется использовать только с базами данных Microsoft, а именно MS Access или MS SQL Server. Её так же можно использовать, если имеется специфичный сервер баз данных, который может работать только через ODBC.

ODBC – это набор драйверов в операционной системе Windows для доступа к базам данных. Через программный интерфейс ODBC приложения могут получать доступ к информации из СУБД, основанных на языке SQL. Для просмотра и конфигурирования ODBC драйверов необходимо вызвать из меню Windows программу администрирования «Источники данных (ODBC)».

Технология ADO использует драйверы Windows ODBC для доступа к БД, поэтому драйвера DBE не требуются. Для работы с базами MS Access лучше всего использовать ODBC-драйвер «Microsoft Jet 4.0 OLE DB Provider.

Рис.1. Схема доступа к данным через ADO

Компонент “Query” является более мощным аналогом компонента «Table» и имеет практически те же свойства, события и методы, что и компонент «Table». Компонент “Query”, в отличие от компоненты «Table», использует для открытия таблицы данных не имя файла и каталога с таблицей, а так называемый SQL-текст с запросом. В тексте SQL-запроса с помощью специальных команд указывается, какой файл нужно открыть, по какому полю его отсортировать, какие поля и записи должны быть видимыми (условия отбора), а какие нет и др.

Компонент “Query” позволяет:

Открывать, просматривать данные и производить поиск в таблицах БД, подобно компоненту «Table»

Создавать виртуальные обобщенные (сцепленные) таблицы из нескольких таблиц данных во время работы программы

Выбирать и находить записи по сложным критериям отбора

Сортировать данные по любым полям без наличия индексных файлов

Группировать данные с нужным условием для подсчета общих сумм, средних значений и др.

Текст SQL-запроса имеет следующий синтаксис:

SELECT [DISTINCT] * или <список_полей>

FROM <список_таблиц>

[WHERE <условие_отбора_записей>]

[ORDER BY <список_полей_для_сортировки>]

[GROUP BY <список_полей_для _ группировки>]

[HAVING <условие_группирования>]

[UNION <вложенный_оператор_SELECT>]

При написании команд в тексте SQL-запроса необходимо следовать той последовательности, которая указаны выше. Регистр символов в тексте запроса не важен. Рассмотрим использование компоненты “Query” и команд SQL-запроса на конкретных примерах.

2. СОЗДАНИЕ ПРОСТЕЙШЕЙ ПРОГРАММЫ ДЛЯ ДОСТУПА К БАЗАМ ДАННЫХ ЧЕРЕЗ ADO

Рис.2. Схема простейшей программы ADO

Простейшая программа состоит из формы, кнопки и следующих компонент:

ADOConnection1 – компонент (из вкладки «ADO») связи с драйвером ODBC и базой данных. Под базой данных понимается настоящая база данных типа MS Access, в которой находится одна или несколько таблиц данных. База данных MS Access сохраняется на диске в виде одного файла с расширением «mdb»;

ADOTable1 – компонент связи с таблицей данных из базы данных. Данный компонент является аналогом компонента Table из BDE;

DBGrid1 – сетка для отображения и работы с таблицей данных;

DBNavigator1 – навигатор по таблице БД;

DataSource1 – компонент-посредник между компонентами отображения таблицы БД и компонентом ADOTable1.

Рис.3. Простейшая программа с ADO-компонентами

procedure TForm1.FormCreate(Sender: TObject);

{ Инициализация программы }

begin

  ADOConnection1.ConnectionString:='Data Source=db/Database.mdb'; // локальный каталог БД

  ADOConnection1.Provider:='Microsoft.Jet.OLEDB.4.0'; // Имя драйвера доступа к БД

  ADOConnection1.LoginPrompt:=false; // Отключить запрос имени и пароля доступа к БД

  ADOConnection1.Connected:=true; // Подключаемся к БД

  ADOTable1.TableName:='Справочник'; // Указываем таблицу БД

  ADOTable1.Connection:=ADOConnection1; // Указываем компонент связи с БД

  DataSource1.DataSet:=ADOTable1; // Связываем компоненты DataSource1 и ADOTable1

  DBGrid1.DataSource:=DataSource1; // Связываем компоненты DBGrid1 и DataSource1

  DBNavigator1.DataSource:=DataSource1; // Связываем компоненты DBNavigator1 и DataSource1

  ADOTable1.Open; // Открываем таблицу

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

{ Закрытие программы }

begin

  ADOConnection1.Connected:=false; // Отключаемся от БД

end;

procedure TForm1.Button1Click(Sender: TObject);

{ Обновление таблицы }

begin

    ADOTable1.Requery; // Обновляем данные из таблицы БД

end;

Рейтинг@Mail.ru