Использование языка SQL в Delphi
Ранее мы построили следующую цепочку (на самом деле упрощенную) от данных на диске до таблицы на экране (рис.1):
Рис.1
Вспомним, что мы имели возможность выбора полей, которые будут представлены на экране в таблицах, имели средства для улучшения внешнего вида таблиц, но не имели возможности выполнения поисковых операций и сортировки. Для использования языка SQL в Delphi необходимо заменить объект Table на Query и получим следующую цепочку (рис.2):
Рис.2
Объект Query находится в палитре Data Access и его легко узнать по буквам SQL и вопросительному знаку. На создаваемой форме должны быть компоненты Query, DataSource, DBGrid и/или DBEdit. Работа со знакомыми нам объектами ничем не отличается от описанного в ранее, за исключением того, что свойству DataSet объекта DataSource вместо значения Table1 (2, 3, …) дадим значение Query1 (2, 3,…) путем выбора из выпадающего списка. Поэтому можем ограничиться рассмотрением лишь компоненты Query. Для нас существенны следующие его свойства (как и для Table, они должны быть заданы в строго определенной очередности):
1. DataВaseName – значением является, как и при Table, путь до файла с данными.
2. SQL – содержит программу.
3. Active – имеет два возможных значения: True и False.
Если в программе на SQL допущена ошибка, то при попытке дать значение True свойству Active выдается диагностическое сообщение о программе. Свойство SQL имеет три точки, что означает наличие диалогового окна для написания программы. Повторим приведенную рекомендацию: операторы SQL пишем большими буквами и каждый оператор с новой строки, все остальное маленькими буквами и за оператором, к которому оно относится.
При возникновении необходимости внесения изменений в программу на SQL, необходимо сначала переключить значение свойства Active на False, внести необходимые изменения и затем снова переключить на True. Для улучшения внешнего вида таблицы на экране поступим точно так, как при работе с Table: делаем двойной щелчок по иконке Query: откроется знакомое нам диалоговое окно Form1.Query1; работа с ним ничем не отличается от описанного выше. Для DBEdit можно из списка выбрать для представления поля из списка полей после оператора SELECT.
Описанный только что способ включения в наше приложение программы на SQL является простейшим, но и весьма ограниченным: для внесения любого изменения придется остановить приложение, менять программу в свойстве SQL объекта Query и запустить приложение снова. Имеется возможность изменить программу на SQL не останавливая приложение.
Для этого на форму необходимо перенести следующие компоненты: Query, DataSource, DBGrid (или DBEdit); Memo и Button из палитры Standard (рис.3). Memo отличается от знакомой нам компоненты Edit только тем, что может содержать несколько строк текста. Нетрудно догадаться, что Memo нужно для представления текста программы на SQL, а кнопка для запуска этой программы.
Рис.3. Окно для программы на языке SQL
Правила написания программы на SQL ничем не отличаются от описанных выше и поэтому мы на них останавливаться не будем. Реализация кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
with Query1 do {Работаем с Query1}
begin
close; {Свойство Active получит значение False,}
{ как всегда перед внесением изменений}
SQL.Clear; {стираем старую программу на SQL}
SQL.Add(Memo1.Text);{подключаем новую программу на SQL}
Open; {свойство Active получит значение True,}
{ как всегда после внесения изменений}
end;
end;
Этими средствами можно менять программу на SQL во время выполнения приложения. Если мы пользуемся только динамическими полями, то никаких сложностей при этом не ожидается. При работе со статическими полями возникают те же проблемы, которые мы обсуждали ранее при работе с Table.