3. Подключите базу данных .mdb, созданную в Access на предыдущих занятиях. Для этого используйте свойство ConnectionString компонента TADOQuery.
Используйте ту же последовательность действий, что и на предыдущем занятии при подключении базы данных, для компонента TADOTable.
ПРИМЕЧАНИЕ-----------------------------------------------------------
В отличие от TADOTable класс TADOQuery не имеет свойств, в которых указывается связанная с ним таблица базы данных. При его использовании информация поступает в набор данных в результате выполнения SQL-запроса, заданного в свойстве SQL.
4. Для задания запроса щелкните на кнопке с многоточием в поле ввода свойства SQL в инспекторе объектов компонента ADOQuery1. При этом откроется окно простого текстового редактора, в котором формируется запрос. Сформируйте запрос, как показано на рис. 11.1. Его назначение состоит в возвращении выборки данных, содержащей все поля и все записи таблицы «Товары» базы данных.
5. Щелкните на кнопке Code Editor. Теперь текст запроса будет отображаться в окне редактора кода (рис. 11.2), причем ключевые слова языка SQL будут выделяться полужирным шрифтом, что снижает вероятность ошибок при написании запроса.
Рис. 11.1. Окно редактора SQL-запросов
Рис. 11.2. Текст SQL-запроса в редакторе кода
СОВЕТ-----------------------------------------------------------------—
При использовании компонента доступа к данным TQuery для задания SQL-запроса можно использовать визуальный редактор запросов SQL Builder, который вызывается командой SQL Builder контекстного меню компонента TQuery, помещенного на форму. Однако он плохо работает с базами данных, в которых имена полей заданы кириллицей (выдаются различные малопонятные сообщения об ошибках).
6. Выполните настройку источника данных TDataSource. Она производится так же, как и в случае использования компонента TADOTable — в свойстве DataSet указывается имя объекта доступа к данным (по умолчанию — ADOQuery1).
Далее необходимо разместить на форме необходимые элементы управления и выполнить их настройку.
7. Выберите следующие элементы:
□ компонент Memo, который будет использоваться для отображения и редактирования текста запроса;
□ компонент отображения данных TDBGrid — для отображения результатов выполнения запроса;
□ кнопка TButton — для подачи команды на выполнение запроса (назвать – "Выполнить запрос").
Примерный вариант размещения на форме необходимых компонентов показан на рис.11.3.
8. Для настройки компонента визуализации полей базы данных TDBGrid в его свойстве DataSource укажите имя источника данных (по умолчанию — DataSource1).
9. Следующий этап — реализация процедур открытия и закрытия набора данных. Если в результате выполнения SQL-запроса возвращаются данные, для его выполнения необходимо воспользоваться методом Open класса TADOQuery.
Как и в предыдущем задании, данный метод следует выполнять при запуске приложения, например в обработчике события OnShow главной формы. При этом происходит выполнение запроса, заданного в свойстве SQL, а результаты его выполнения отобразятся в таблице DBGrid1.
10. При закрытии приложения следует, как и в предыдущем упражнении, закрыть и набор данных. Вызовите метод Close в обработчике события OnClose главной формы.
Рис. 11.3. Размещение элементов управления на форме
11. Для кнопки "Выполнить запрос" надо написать обработчик события OnClick. (Это понадобится в дальнейшем для возможности изменения текста запроса с последующим выполнением его без перекомпиляции программы). При нажатии на кнопку должен выполняться запрос (в результате выполнения запроса возвращаются данные). При нажатии на кнопку следует выполнить (запрограммировать) следующие действия:
□ проверить состояние набора данных; если набор данных открыт, то следует закрыть его;
□ передать текст запроса из компонента memSQL в свойство SQL компонента ADOQuery1;
□ открыть набор данных, вызвав метод Open компонента ADOQuery1.
Для справки текст (но не буквально, т.к. используются другие имена и есть незначительные ошибки, которые Вы не должны делать, если владеете предыдущим материалом ) для модуля разработанной формы приведен в листинге 11.1.
12. Сохраните файлы проекта в отдельной вложенной папке и запустите программу на выполнение (напомним, что при этом автоматически откомпилированное приложение будет помещено в эту же папку). После его запуска в компоненте DBGrid1 на форме отобразится информация, содержащаяся в таблице с указанным Вами именем из подключенной базы данных с расширением .mdb. Закройте приложение.
13. Для модификации приложения добавьте кнопку выхода из программы и проверьте работоспособность.
Вопросы к защите:
Листинг 11.1. Главный модуль приложения
unit SQL_main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, Db, AOODB. StdCtrls, ExtCtrls. DBTables;
type
TfrmMain = class(TForm) ADOQueryl: TADOQuery;
DataSource1: TDataSource;
DBGridl: TDBGrid;
memSQL: TMemo: btnExecSQL: TButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure btnExecSQLClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation {$R *.DFM}
procedure TfrmMain.FormShow(Sender: TObject);
begin
memSQL.Lines.Clear;
memSQL.Lines,Assign(AOOQueryl.SQL);
end;
procedure TfrmMain.ForraClose(Sender: TObject;
var Action: TCloseAction);
begin
if ADOQueryl.Active then ADOQueryl.Close;
end;
procedure TfrmMain.btnExecSQLClick(Sender: TObject);
begin
if ADOQueryl.Active then ADOQueryl.Close;
ADOQueryl.SQL.Clear:
ADOQueryl.SQL.Assign(memSQL.Lines);
ADOQueryl.Open;
end;
end.
Упражнения 10-6-2
Введение
Для ограничения отбираемой из базы данных информации оператор SELECT позволяет использовать условие, которое задается с помощью предложения WHERE. В случае реализации условной выборки оператор SELECT имеет следующий вид:
SELECT {* | ALL | DISTINCT fieldl, field2..... fieidN}
FROM tablel {, table2..... tableN}
WHERE условие
Специальные операторы языка SQL, применяемые для задания условия, можно разделить на следующие группы:
□ операторы сравнения;
□ логические операторы;
□ операторы объединения;
□ операторы отрицания.
Результатом выполнения каждого из этих операторов является логическое значение (true или false). Если для некоторой записи оператор возвращает значение true, то запись включается в результат выборки, если false — не включается.
Задание 2