Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7927

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Добавление полной строки данных

Еще один распространенный вариант команды INSERT предполагает задание пол-

ного списка значений полей новой записи. Порядок перечисления значений должен
соответствовать перечню полей

 используемому при ее создании командой

CREATE TABLE. Синтаксическая формула в этом случае становится более краткой вви-

ду отсутствия списка наименований полей.

INSERT INTO

VALUES

 [, Значение2, ...])

Порядок следования значений, указанных после служебного слова VALUES, и их

типы должны соответствовать структуре таблицы. В качестве символического обозна-

чения величины, заносимой в поле AutoNumber, используется литерал 0; Access само-
стоятельно позаботится о том, чтобы вычислить и сохранить в поле AutoNumber нуж-
ное значение. Например:

INSERT INTO Music

VALUES (0,

 OF

Я всегда записываю текст SQL именно так, разбивая длинные команды

на отдельные строки, соответствующие основным предложениям. Так,
заголовок команды INSERT INTO удобно расположить в одной строке,
предложение

 — в следующей и т.д.

Фраза INSERT INTO Music означает, что данные будут добавлены в таблицу

MUSIC. После имени таблицы список полей не приводится — вместо него сразу сле-
дуют слово VALUES и полный список значений.

Вызов

 Insert с параметрами

Версия SQL, которая реализуется в Access, допускает формат команды INSERT, со-

держащий параметры и предполагающий динамический интерактивный ввод их зна-

чений. Параметры размещаются в списке VALUES и обозначаются именами, заклю-

ченными в квадратные скобки. Возможность задания параметров поддерживается в

обоих рассмотренных выше вариантах INSERT — со списком полей и без такового.

Единственной синтаксической особенностью параметрической версии INSERT яв-

ляется наличие аргументов, взятых в квадратные скобки. Приведенные ниже примеры

демонстрируют использование параметров в обоих вариантах INSERT — с заданием

полной строки данных (листинг 16.4) и указанием списка имен полей (листинг 16.5).

Листинг 16.4. Пример параметрической команды INSERT с заданием полной

строки данных

INSERT INTO Music

VALUES (0,

 [Компания] )

Листинг 16.5. Пример параметрической команды INSERT с указанием списка

имен полей

INSERT INTO Music

 Title, Format, Publisher)

VALUES

Команда INSERT листинга 16.4 содержит пять параметров. При ее вы-
полнении система последовательно откроет пять диалоговых окон с за-

16-й час. Применение языка SQL

285


background image

просами на ввод соответствующих значений (окно, предлагающее ввести
значение параметра Имя, показано на рис. 16.1). Обратите внимание:
число параметров с учетом литерального значения 0, отвечающего полю

ID, равно числу столбцов в таблице MUSIC.

Рис. 16.1. Так выглядит диалоговое окно, в

котором предлагается ввести значение пара-

метра, указанного в команде INSERT

В команде INSERT листинга 16.5 приведены только те поля, которые подлежат ин-

терактивному заполнению.

В пределах одной и той же команды INSERT могут задаваться как литеральные

значения, так и параметры — в любых сочетаниях. Например, заведомо зная значе-
ния, которые следует сохранить в большинстве полей, вы можете указать параметры
только для одного или двух — именно так чаще всего и происходит.

Добавление записи с помощью SELECT

Весьма полезный способ применения команды INSERT связан с задачей копирова-

ния данных из одной таблицы в другую. В этом случае вместо предложения VALUES
используется вложенный запрос на основе SELECT. Ниже приведена соответствующая
синтаксическая формула.

INSERT INTO

 [,

SELECT

FROM ИмяТаблицыИсточника

Практически, все осталось на месте, кроме предложения VALUES, в котором указы-

вается выражение SELECT. Напомним, что перечни полей SELECT и INSERT INTO

должны совпадать по типам и количеству элементов.

Предположим, у вашего друга также есть коллекция музыкальных записей и собст-

венная база данных с таблицей MUSIC, поля которой в точности совпадают с полями
одноименной таблицы вашей базы данных. Как создать базу данных для объединен-
ной коллекции? Используйте SELECT и INSERT INTO, как показано в листинге 16.6.

Листинг 16.6. Пример команды INSERT INTO с вложенным запросом, выполняющим

импорт полей из идентичной базы данных

INSERT INTO MUSIC (ID, ARTIST, TITLE, FORMAT, PUBLISHER)
SELECT 0, ID, ARTIST, TITLE, FORMAT, PUBLISHER FROM MUSIC2

Команда INSERT INTO не претерпела изменений до списка полей. По-

 скольку в качестве первичного ключа используется автоматически созда-

ваемый счетчик, первый элемент команды SELECT равен 0. После лите-
рального значения 0 каждое поле исходной таблицы (во вложенном за-
просе) помещается в список полей команды SELECT.

Команда INSERT (теперь вы согласитесь) демонстрирует немалую гибкость. Выра-

жение SELECT само по себе "незаурядно", но в сочетании с INSERT способно творить
чудеса.

286

Часть V. Программирование и базы данных Access


background image

Обновление данных

Команда UPDATE применяется для одновременного изменения содержимого полей

одной или нескольких записей. Основной вариант выражения позволяет обновить
значения всех столбцов таблицы. Расширенная версия дает возможность сузить набор

записей, подвергающихся воздействию, с помощью предложения WHERE. Ниже приве-

дена общая синтаксическая формула команды UPDATE.

UPDATE

SET

 =

 [,

 = Значение2, ...]

[WHERE Предложение]

Служебные слова SQL в соответствии с общепринятым соглашением вводятся в

верхнем регистре — так, как в данном случае набраны UPDATE, SET и WHERE. Предло-
жение SET должно включать, по меньшей мере, один предикат вида ИмяПоля = Зна-
чение, и их количество не ограничено. Знакомое вам предложение WHERE, как всегда,
необязательно. Листинг 16.7 демонстрирует несколько примеров употребления коман-

ды UPDATE для изменения данных в таблице MUSIC.

Листинг 16.7. Примеры использования команды UPDATE

1: UPDATE Music SET Title =

 TITLE

2: UPDATE Music SET First_Name =

 [First_Name]

 UPDATE Music SET Publisher =

WHERE Publisher =

Каждая из строк листинга 16.7 содержит отдельную команду SQL.
В строке 1 используется встроенная

 функция UCase, переводящая

содержимое поля TITLE всех записей таблицы MUSIC в верхний регистр.
Строка 2 иллюстрирует применение пользовательской функции
предназначенной для преобразования первого символа переданной стро-
ки (в данном случае — значения поля FIRST_NAME) в верхний регистр.
Текст функции

 приведен в листинге 16.8. Строка 3 демонстрирует

команду UPDATE, содержащую предложение WHERE и обновляющую толь-
ко те записи таблицы MUSIC, в поле PUBLISHER которых хранится значе-
ние "Columbia".

Листинг 16.8. Пример пользовательской

 которую можно вызвать

в команде SQL

1: Function

 As String ) As String

2: ICap =

 &

3 : End Function

 ICap достаточно проста. Первая буква строки FieldValue,

 в качестве аргумента, с помощью стандартной функции UCase

переводится в верхний регистр, а остальные символы, посредством
LCase, — в нижний. Как мы уже неоднократно говорили, функции и
процедуры не должны быть пространными и сложными.

При более внимательном рассмотрении вы могли бы обратить внимание,
что текст функции, приведенной в листинге 16.8, нуждается в дополнениях.

Что случится, например, если переданная в виде параметра строка окажется
пустой? Да-да, это наша с вами ошибка — выполнение функции будет

16-й час. Применение языка SQL

287


background image

прервано. В данном случае необходимо принять меры, способные
предотвратить аварийный сброс программы (подробнее об этом — в главе

"18-й час. Обработка ошибок во время выполнения программы").

 данных

о

О

Т

Информацию, попавшую в базу данных, когда-либо наверняка придется

удалить. Эта обязанность в языке SQL возложена на команду DELETE.

Она довольно проста (впрочем, ничего удивительного — как говорится,
"ломать — не строить"). Синтаксис выражения DELETE таков:

DELETE FROM

 [WHERE Предложение]

Предполагая использовать команду DELETE в прикладной программе,

будьте внимательны. Подумайте о возможности открытия окна преду-

преждающего сообщения (функция MsgBox придется как раз кстати),
которое позволит пользователю подтвердить свои зловещие намерения
или вовремя от них отказаться.

Изучением технологий программирования на SQL и управления базами

данных нельзя заниматься между прочим, в часы беззаботного досуга. В
понятие "хорошей программы" входит достаточно большое число
различных составляющих. Характерный пример. Записи в таблице
MUSIC отвечает несколько строк таблицы TRACKS — это понятно. Мы
удалили эту запись. Что делать с соответствующей информацией
таблицы TRACKS? (Другими словами, если нет сведений о музыкальном
альбоме, зачем нужны эдакие "сиротские" строки о его композициях?)

При удалении записей одной таблицы зачастую следует позаботиться об

изъятии логически взаимосвязанных записей из других таблиц. То же
справедливо и в отношении операций изменения данных.

Во многих системах управления базами данных поддерживаются
процедуры каскадного удаления и обновления информации. Имеется в

виду, что система самостоятельно следит за логической целостностью

данных. Для реализации возможностей каскадного выполнения опера-

ций обычно необходимы дополнительные действия со стороны адми-
нистратора базы данных и авторов приложений. Если необходимая
настройка не произведена, ответственность за целостность данных
возлагается на код прикладной программы SQL или VBA.

Заметно упрощают работу также хорошие средства программирования и

администрирования баз данных. Не бойтесь обращаться за помощью к

литературе, информационным источникам в Internet и квалифицирован-

ным специалистам, способным подсказать решения в трудных ситуациях.

Многие известные эксперты с пониманием откликнутся на ваши
просьбы, если вы обратитесь к ним по электронной почте или с помощью
средств ведения виртуальных дискуссий.

Нескольких простых примеров будет вполне достаточно. Введя команду DELETE

FROM Music, вы заставите Access полностью очистить таблицу MUSIC — вряд ли это

может входить в ваши планы. Зато команда DELETE с предложением WHERE применя-
ется весьма часто.

288

Часть V. Программирование и базы данных Access


background image

Вызов функций из команд SQL

В листинге 16.7, рассмотренном выше, были приведены примеры обращения и к

стандартным функциям Access VBA (скажем, UCase), и к пользовательским функци-
ям, определенным в прикладной программе (таким как

 Если создаваемый

SQL-код проявляет тенденцию к усложнению, попробуйте воспользоваться сущест-
вующими функциями или написать собственные, чтобы упростить выражение SQL.

Язык SQL, несомненно, "прекрасен и могуч", но подчас вам придется сталкиваться с
определенными ограничениями и сложностями при попытке решения некоторых за-
дач (например, подобных рассмотренной ранее операции изменения регистра первого

символа строки, хранящейся в поле таблицы).

SQL предлагает целый ряд встроенных функций — достаточно назвать COUNT, предна-

значенную для подсчета числа записей, или

 — для суммирования числовых значений.

Примеры использования некоторых функций ранее уже приводились в листингах этой

главы (скажем, листинг 16.3 демонстрирует способы применения функций SUM и CDATE).

Правила обращения к функциям в SQL практически не отличаются от тех, кото-

рые приняты в VBA. Необходимо задать имя функции и передать ей верное количест-
во значений параметров требуемых типов. Время, практика и готовность обращаться
за помощью ко всем доступным информационным источникам — это все, что вам по-
требуется для овладения механизмами использования функций SQL.

Хранимые процедуры

С появлением средств ActiveX Data Objects арсенал программиста, использующего

Access, пополнился возможностями создания и применения хранимых процедур.

 Хра-

нимая процедура

 в SQL равнозначна функции. Аппарат хранимых процедур в таких

крупномасштабных системах управления базами данных, как, например, Oracle, суще-
ствует с давних пор. (В Oracle имеется даже самостоятельный процедурный язык
программирования под названием PL/SQL.)

Среди многочисленных достоинств, присущих хранимым процедурам, достаточно

отметить два основных: хранимые процедуры выполняются на серверах баз данных и

позволяют определять интерфейсы. Понятно, что при запуске процедур на сервере

(который, как правило, намного более производителен по сравнению с персональны-

ми станциями) прикладная программа будет выполняться существенно быстрее. Этот
вывод справедлив даже в том случае, если Access 2002 работает на том же компьютере,

что и ваше приложение, поскольку хранимые процедуры выполняются непосредст-
венно ядром Access. А именованные интерфейсы обеспечивают настолько же простые

возможности обращения к хранимым процедурам, как и при использовании обычных
функций. Вы передаете значения аргументов, затем определенные вами операции вы-

полняются и возвращают требуемые результаты.

Процедуры хранятся в базе данных, в коллекции Procedures, входящей в состав

объекта Catalog. Каждый элемент коллекции Procedures — это объект класса Pro-

cedure. Объект Procedure содержит атрибуты DateCreated, DateModified, Name и
Command. Command — это объект данных, содержащий собственно код тела процедуры.

Хотя хранимые процедуры, на самом деле, физически располагаются в од-
ной из системных таблиц базы данных, беспокоиться о подобных деталях
сейчас вам вовсе не обязательно — доступ к процедурам вы получаете с
помощью коллекции Procedures объекта Catalog. Прежде чем восполь-

§

 процедурой, ее необходимо создать и добавить в объект Catalog.

 Ниже приведен синтаксис определения хранимой процедуры.

PARAMETERS

 Тип {, [Параметр2] Тип,

 Текст SQL

 час. Применение языка SQL 289