Використання мови sql в ms access
Мова SQL не володіє функціями повноцінного мови розробки, а орієнтований на доступ до даних, тому його включають до складу засобів розробки програм. В цьому випадку його називають вбудованим SQL. Стандарт мови SQL підтримують сучасні реалізації наступних мов програмування: PL / 1, Ada, С, COBOL, Fortran, MUMPS і Pascal.
У спеціалізованих системах розробки додатків типу клієнт-сервер середовище програмування, крім того, зазвичай доповнена комунікаційними засобами (встановлення і роз'єднання з'єднань з серверами БД, виявлення і обробка виникають в мережі помилок і т.д.), засобами розробки призначених для користувача інтерфейсів, засобами проектування і налагодження.
Розрізняють два основні методи використання вбудованого SQL: статичний і динамічний.
При статичному використанні мови (статичний SQL) в тексті програми є виклики функцій мови SQL, які жорстко включаються в виконуваний модуль після компіляції. Зміни в викликаються функції можуть бути на рівні окремих параметрів викликів за допомогою змінних мови програмування.
При динамічному використанні мови (динамічний SQL) передбачається динамічна побудова викликів SQL-функцій і інтерпретація цих викликів, наприклад, звернення до даних лише у віддаленій базі, в ході виконання програми. Динамічний метод зазвичай застосовується у випадках, коли в додатку заздалегідь невідомий вид SQL-виклику і він будується в діалозі з користувачем.
Основним призначенням мови SQL (як і інших мов для роботи з базами даних) є підготовка і виконання запитів. В результаті вибірки даних з однієї або декількох таблиць може бути отримано безліч записів, зване поданням.
Подання по суті є таблицею, що формується в результаті виконання запиту. Можна сказати, що воно є різновидом зберігається запиту. За одним і тим же таблиць можна побудувати кілька подань. Саме уявлення описується шляхом вказівки ідентифікатора уявлення і запиту, який повинен бути виконаний для його отримання.
Для зручності роботи з поданнями до мову SQL введено поняття курсору. Курсор являє собою своєрідний покажчик, який використовується для переміщення по наборам записів при їх обробці.
Опис і використання курсору в мові SQL виконується наступним чином. В описовій частині програми виконують зв'язування змінної типу курсор (CURSOR) з оператором SQL (зазвичай з оператором SELECT). У виконуваної частини програми проводиться відкриття курсору (OPEN <имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>. ), Супроводжуване відповідною обробкою, і, нарешті, закриття курсору (CLOSE <имя курсора>).
У реляційних СУБД для виконання операцій над відносинами використовуються дві групи мов, які мають в якості своєї математичної основи теоретичні мови запитів, запропоновані Е. Коддом:
В реляційній алгебрі операнди і результати всіх дій є відносинами. Я зикі реляційної алгебри є процедурними, так як відношення, яке є результатом запиту до реляційної БД, обчислюється при виконанні послідовності реляційних операторів, що застосовуються до відносин. Оператори складаються з операндів, в ролі яких виступають відносини, і реляційних операцій.
Операції реляційної алгебри Кодда можна розділити на дві групи: базові теоретико-множинні і спеціальні реляційні. Перша група операцій включає в себе класичні операції теорії безлічі: об'єднання, різниця, перетин і твір. Друга група є розвиток звичайних теоретико-множинних операцій в напрямку до реальних завдань маніпулювання даними, в її склад входять операції: проекція, селекція, розподіл і з'єднання.
Мови обчислень є непроцедурного (описовими або декларативними) і дозволяють висловлювати запити за допомогою предиката першого порядку (висловлювання у вигляді функції), якому повинні задовольняти кортежі або домени відносин. Запит до БД, виконаний з використанням подібного мови, містить лише інформацію про бажаний результат. Для цих мов характерна наявність наборів правил для запису запитів. Зокрема, до мов цієї групи відноситься SQL.
Особливості застосування запитів SQL
Запитом SQL називають запит, який створюється за допомогою інструкції SQL. Прикладами запитів SQL є запити на об'єднання, запити до сервера, керівники і підлеглі запити.
Запит на об'єднання - такий запит, в якому об'єднуються поля (стовпці) однієї або декількох таблиць або запитів в одне поле або стовпець в результуючому наборі записів. Наприклад, шість продавців щомісяця представляють керівництву опису наявних товарів. Створивши запит на об'єднання, можна об'єднати ці описи в результуючому наборі записів, а потім розробити запит на створення таблиці, заснований на запиті на об'єднання.
Запит до сервера виконує передачу через ODBC команд SQL - сервера, наприклад, Microsoft SQL Server. Запити до сервера дозволяють безпосередньо працювати з таблицями на сервері замість їх приєднання. Результатом виконання запиту до сервера може бути завантаження записів або зміна даних.
Керуючий запит створювати чи змінювати об'єкти бази даних, такі як таблиці Access або SQL Server.
Підлеглий запит складається з інструкції SQL SELECT, що знаходиться всередині іншого запиту на вибірку або запиту на зміну. Ці інструкції вводяться в рядок «Поле» бланка запиту для визначення нового поля або в рядок «Умова відбору» для визначення умови відбору поля. Підлеглі запити використовуються для виконання наступних дій:
- перевірка в підпорядкованому запиті існування деяких результатів за допомогою зарезервованих слів EXISTS або NO EXISTS;
- пошук в головному запиті будь-яких значень, які дорівнюють, більше або менше значень, що повертаються в підпорядкованому запиті (за допомогою зарезервованих слів ANY, IN або ALL);
- створення підлеглих запитів всередині підлеглих запитів (вкладених підлеглих запитів).
Мова SQL в Access може застосовуватися при розробці екранних форм, звітів, а також при створенні макрокоманд і програм на VBA.
Зв'язок мов QBE і SQL
В Access між мовами QBE і SQL є тісний зв'язок. Запитні таблиці (бланки, форми) на мові QBE, які заповнюються користувачем, перед безпосереднім виконанням перетворюються в вирази SQL. Тобто мова SQL є внутрішнім стандартом на виконання запитів. Такий механізм має перевагу, оскільки дозволяє всередині системи Access уніфікувати підготовку запитів до виконання на локальному і віддаленому комп'ютерах. В останньому випадку SQL - повідомлення реально передається до комп'ютера - сервера запиту.
SQL в формах і звітах
Основними джерелами записів в екранних формах і звітах є таблиці і запити. У другому випадку запитом може бути готовий запит до БД або створюваний при розробці форми або звіту.
SQL в макрокомандах
Дії входять до складу макросів, які використовують для автоматизації виконання часто повторюваних дій в роботі з БД. Макрос являє собою одну або кілька макрокоманд з аргументами.
Макроси викликаються з вікна БД або автоматично при настанні певних подій. Подією, по яким викликається макрос, може бути, наприклад, натискання кнопки в області форми або відкриття вікна БД. Поряд з виконання деяких дій над об'єктами БД макроси можуть викликати інші макроси, програми на Visual Basic і зовнішні додатки.
З безлічі макрокоманд з SQL безпосередньо пов'язані дві макрокоманди: ЗапускЗапроса SQL (Run SQL) і ОткритьЗапрос (OpenQuery)
Макрокоманда ЗапускЗапроса SQL запускає запит на зміну або керуючий запит Access за допомогою відповідної інструкції SQL. Ця макрокоманда робить можливим виконання дій в макросі без попереднього збереження запитів. За допомогою макрокоманди можна виконувати і збережені запити.
Запитами на зміну є інструкції SQL, що реалізують такі функції: додавання (INSERT INTO), видалення (DELETE), створення таблиці (SELECT ... INTO) і оновлення (UPDATE)
Керуючими запитами є інструкції SQL, що виконують такі функції: створення таблиці (CREATE TABLE), зміна таблиці (ALTER TABLE), видалення таблиці (DROP TABLE), створення індексу (CREATE INDEX) і видалення індексу (DROP INDEX)
Єдиним і обов'язковим аргументом макрокоманди ЗапускЗапроса SQL є інструкція SQL. Аргумент дії у вигляді тексту SQL - інструкції вводиться вручну у вікні введення макрокоманди або копіюються з вікна SQL, що часто зручніше.
SQL в програмах на VBA
VBA, як і макроси, призначені для автоматизації виконання повторюваних операцій над об'єктами БД Access.
В Access існують такі способи запуску програм VBA:
- включення програми в процедуру обробки події;
- виклик функції в вираженні;
- виклик процедури Sub в іншій процедурі або у вікні налагодження;
- виконання макрокоманди ЗапускПрограмми (RunCode) в макросі.
Функції застосовуються у виразах, що визначають обчислювані поля в формах, звітах або запитах. Вирази використовуються для вказівки умов в запитах і фільтрах, а також в макросах, в інструкціях і методах VBA, а також в інструкціях SQL. В процедуру Sub можна включати загальнодоступні VBA - підпрограми, що викликаються з інших процедур.
Розглянемо виконання запиту до бази даних за допомогою інструкцій SQL в програмі на Visual Basic для додатків.
У запиті проводиться відбір в базі даних записів, які відповідають певним умовам (запит на вибірку), або видається інструкція на виконання зазначених дій з записами, що задовольняють певним умовам (запит на зміну).
Існують наступні способи виконання запитів:
- виклик методу Execute (для виконання запитів SQL на зміну);
- створення і виконання спеціального об'єкта QueryDef;
- використання інструкції SQL як аргумент методу OpenRecordset;
- виконання методу OpenRecordset для існуючого об'єкта QueryDef;
- виклик методів RunSQL і OpenQuery.
Метод Execute використовується, якщо потрібно виконати таку зміну в БД, при якому не повертаються записи. Наприклад, операції вставки або видалення записів.
Об'єкт QueryDef є збережене визначення запиту в базі даних. Його можна розглядати як відкомпільоване інструкцію SQL.
Метод OpenRecordset використовується, щоб відкрити об'єкт типу Recordset для виконання наступних операцій над ним.
Метод RunSQL виконує макрокоманду ЗапускЗапроса SQL в програмі VBA
Вибір варіанту виконання запиту визначається програмістом з урахуванням особливостей розв'язуваної задачі.