Создание SQL запросов к базе данных созданной в MS Access 2003 – 2007 из Delphi с помощь компонента ADOQuery.
Эта статья будет посвящена новичкам, которые хотят научиться создавать базы данных в Delphi, но не знают языка SQL запросов. Частично, можно выйти из положения используя компоненты ADOTable и фильтрацию, но не все задачи можно решить с помощью них. Как быть? Я предлагаю составлять запросы с помощью конструктора SQL запросов в MS Access 2003 – 2007, и переносить их в компонент ADOQuery или любой другой, позволяющий работать SQL запросами. Понятно, что если вы хотите профессионально заняться программированием баз данных, то без изучения языка запросов SQL вам не обойтись, но на первых порах конструктор SQL запросов в MS Access 2003 – 2007 может послужить вам хорошим другом.
Сейчас я попытаюсь рассказать, как работать с этим конструктором. Предполагается, что вы уже умеете создавать саму базу данных в MS Access 2003 – 2007.
Итак, приступим…
Пусть у нас имеется некая база данных bd.mdb имеющая три таблицы products, ed_izmer, storage. Скачать базу.
И мне необходимо составить запрос к базе на выборку всех продуктов из таблицы storage с подстановкой наименования продукта, единицы измерения, количества, цены и суммы.
Открываем базу в MS Access 2003 – 2007, переходим на вкладку Создание->Конструктор запросов
и видим следующее окно.
В этом окне необходимо выбрать таблицы, которые будут использоваться в запросе. В нашем случае добавляем все три таблицы и закрываем окно.
Теперь создаем связи между таблицами, делается это перетаскивание соответствующего пункта из одной таблицы на соответствующий пункт другой таблицы. В нашем случае мы перетаскиваем поле id из ed_izmer на поле id_ed_izmer таблицы storage. Аналогично поле id из products на поле id_product таблицы storage.
Далее жмем правую кнопку мыши на полученной связи, и выбираем пункт «Параметры объединения».
Устанавливаем нужный вариант объединения и жмем OK. Делаем аналогичную операцию с другой связью.
Теперь переходим к нижней части конструктора запросов
И заполняем, как показано на рисунке
В первый столбец вводим имя таблицы -> products, поле product_name.
Во второй имя таблицы -> ed_izmer, поле ed_name.
В третий имя таблицы -> storage, поле quantity.
В четвертый имя таблицы -> storage, поле price.
В пятый столбец вводим формулу для вычисления суммы.
Формулы вводятся следующим образом: в начале идет имя поля (придумываем сами), затем двоеточие, а затем формула в виде [имя таблицы1].[имя поля]знак операции[имя таблицы2].[имя поля].
В нашем случае вводим следующую формулу:
сумма: [storage].[quantity]*[storage].[price]
на этом запрос готов жмем на крестик и сохраняем запрос.
Жмем на созданном запросе и проверяем работоспособность.
Если все работает, переходим в режим SQL, для этого нажимаем правой кнопкой мыши на вкладке Запрос1 и выбираем Режим SQL.
Копируем полученный запрос и вставляем его в поле SQL -> TStrings компонента ADOQuery в Delphi. Или используем программно:
ADOQuery.Active:=false;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('SELECT products.product_name, ed_izmer.ed_name, storage.quantity, storage.price, [storage].[quantity]*[storage].[price] AS сумма
FROM ed_izmer RIGHT JOIN (products RIGHT JOIN storage ON products.id=storage.id_product) ON ed_izmer.id=storage.id_ed_izmer;');
ADOQuery.Active:=True;
Если запрос очень длинный то его можно разбить, например, так:
ADOQuery.SQL.Add('SELECT products.product_name,'+
' ed_izmer.ed_name, storage.quantity, storage.price,'+
' [storage].[quantity]*[storage].[price] AS сумма'+
' FROM ed_izmer RIGHT JOIN (products RIGHT JOIN storage ON products.id=storage.id_product)'+
' ON ed_izmer.id=storage.id_ed_izmer;');
Либо использовать ADOQuery.SQL.Add('части запроса') несколько раз.
Можно делать и обратное преобразование запроса SQL. Берем готовый SQL запрос, копируем его в конструктор запросов MS Access в режиме SQL, затем переключаемся в режим конструктора и изучаем какие таблицы, поля, связи, выражения входят в запрос. Если надо, то вносим изменения.
Ну и на последок немножко о синтаксисе запроса:
Слово select в запросе означает создание выборки. Эта команда имеет вот такой синтаксис:
select [список полей] from [список таблиц и их соединения]
Поля в списке полей перечисляются через запятую.
Синтаксис описания поля такой:
[Имя таблицы].[Имя поля] AS [Имя поля в выборке]
После последнего поля из списка запятая не ставиться.
Нравится
Спасибо за внимание.
Скачать материалы к уроку можно здесь.
Автор xaramamburu. Сайт автора basicsprog.ucoz.ru.
|