Выбор информации из базы данных
Листинг 17.2. База данных "Школа".
unit school2_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Grids, DBGrids, Db, DBTables, ExtCTRLs, DBCTRLs, StdCTRLs; type TForm1 = class(TForm) Table1: TTable; // таблица (вся база данных) Query1: TQuery; // запрос (записи БД, удовлетворяющие критерию выбора) DataSource1: TDataSource; // источник данных – таблица или запрос DBGrid1: TDBGrid; // таблица для отображения БД или результата выполнения запроса DBNavigator1: TDBNavigator; DBText1: TDBText; Button1: TButton; // кнопка запрос Button2: TButton; // кнопка Все записи procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} // щелчок на кнопке Запрос procedure TForm1.Button1Click(Sender: TObject); var fam: string[30]; begin fam: = InputBox('Выборка информации из БД', 'Укажите фамилию и щелкните на OK.', ''); if fam <> '' // пользователь ввел фамилию then begin with form1.Query1 do begin Close; // закрыть файл-результат выполнения предыдущего запроса SQL.Clear; // удалить текст предыдущего запроса // записываем новый запрос в свойство SQL SQL.Add('SELECT Fam, Name, Class'); SQL.Add('FROM ":Школа:school.db"'); SQL.Add('WHERE'); SQL.Add('(Fam = "'+ fam + '")'); SQL.Add('ORDER BY Name, Fam'); Open; // активизируем выполнение запроса end; { *** другой вариант изменения критерия запроса begin Query1.Close; Query1.SQL[3]: = '(Fam="'+ fam + '")'; Query1.Open; DataSource1.DataSet: = Query1; end; } if Query1.RecordCount <> 0 then DataSource1.DataSet: = Query1 // отобразить рез-т выполнения запроса else begin ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.'); DataSource1.DataSet: = Table1; end; end; end; // щелчок на кнопке Все записи procedure TForm1.Button2Click(Sender: TObject); begin DataSource1.DataSet: = Table1; // источник данных – таблица end; // активизация формы procedure TForm1.FormActivate(Sender: TObject); begin DataSource1.DataSet: = Table1; Table1.Active: = True; end; end.
Процедура TForm1.Button1Click запускается щелчком кнопки Запрос. Она принимает от пользователя строку (фамилии) и записью (добавлением) строк в свойство SQL формирует текст запроса. Затем эта процедура вызовом метода Open активизирует выполнение запроса.
Следует обратить внимание на то, что перед изменением свойства SQL-запрос должен быть закрыт при помощи метода close (здесь надо вспомнить, что результат выполнения запроса – это файл данных (таблица), который создается в результате выполнения запроса).
Процедура TForm1.Button2Click, которая запускается щелчком кнопки Все записи, устанавливает в качестве источника данных для компонента DataSourcel компонент Table1, тем самым обеспечивая переход в режим просмотра всей базы данных.
Если запрос записан в свойство SQL во время разработки формы приложения, то во время работы программы критерий запроса можно изменить простой заменой соответствующей строки текста запроса.
Например, для запроса:
SELECT DISTINCT Fam, Name, Class FROM ":Школа:school.db" WHERE (Class= '10а') ORDER BY Name, Fam
Инструкция замены критерия запроса может быть такой:
forml.Query1.SQL[3]: = '(Fam="' + fam+ '")'
Следует обратить внимание на то, что свойство SQL является структурой типа TStrings, в которой строки нумеруются с нуля.