Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

.Direction = adParamlnput

End With

With cmdVBA

.iarameters.Append prrnDate ' Добавление параметра

.Execute ‘ Выполнение команды

End With

Если вы выполняете запрос, сохраненный в базе данных Jet/Access, используйте значение adCmdTable свойства CommandType объекта Command, а не adCmdStoredProc, относящееся к SQL Server и многим другим серверам баз данных.

Работа с SQL

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

Как избежать SQL

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

Встроенный конструктор запросов Access - один из подобных инструментов. После того как вы создали и протестировали запрос Access, у вас есть два варианта выбора для добавления объекта Command в ваш код VBA для выполнения запросов.

Объект Command может выполнять запрос как хранимую процедуру или же вы можете копировать SQL-код, полученный с помощью конструктора запросов, а затем вставить его в свой код VBA. Для того чтобы воспользоваться последним приемом, сконструируйте запрос в Access и тщательно его проверьте; затем выберите команду

View=SQL View (Вид=Режим SQL), чтобы отобразить соответствующую инструкцию. Скопируйте ее в буфер обмена, переключитесь к редактору VBA, после чего вставьте, заключив в кавычки, в инструкцию VBA, которая определяет значение свойства CcnmandText объекта Command. Подробные сведения о выполнении инструкций SQL и хранимых процедур изложены в разделе "Использование объекта Command" раньше в настоящей главе.

Конструктор запросов Access замечательно справляется с поставленными задачами, но он не может обработать все встречающиеся ситуации. Он не позволяет создавать запросы сложных типов, т.е. подзапросы. Конечно же, его хранимые процедуры работают только с базами данных Jet (однако другие базы данных содержат подобные средства визуального конструирования запросов). Вы можете попробовать конструктор запросов

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

Знакомство с диалектами SQL

Хотя SQL и считается практически универсальным языком создания запросов для систем управления базами данных, многие базы данных понимают только определенные диалекты

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

Вставка инструкций SQL в VBA-код

Фрагменты кола, приведенные раньше в настоящей главе, должны были проиллюстрировать, как добавлять инструкции SQL в код, написанный на VBA. Здесь очень важно не забывать о том, что VBA обрабатывает инструкции SQL как текстовые строки, а не как часть собственно программного кода. Эти строки претерпевают специальную обработку, когда интерпретируются как аргументы методов Open или Execute объектов ADO, но до тех пор они остаются обычными строками VBA, содержащими текст.

По этой причине вам следует заключать каждую инструкцию SQL в двойные кавычки.

Независимо от того, настраиваете вы свойство CommandText объекта Command или указываете аргумент метода Open объекта Recordset, использование двойных кавычек обязательно. И опять, вы найдете много примеров в предыдущих разделах настоящей главы. И не пропустите материал раздела "Настройка набора записей: задаем критерии" дальше в настоящей главе.

Написание инструкций SELECT

Процесс создания объектов Recordset модели ADO я подробно рассмотрел раньше в настоящей главе. В этом разделе основной акцент будет сделан именно на коде SQL, необходимом для определения того, какие записи относятся к набору. Вам необходимо выполнить подобную задачу как можно точнее, поэтому инструкция SELECT - это именно то, что вам нужно.

Простейшая форма инструкции SELECT получает все записи из одной таблицы. Приведенный ниже пример возвращает все поля и все записи из таблицы Toys:

SELECT * FROM Toys

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

Инструкции SELECT извлекают записи из базы данных, но не изменяют при этом хранящиеся там данные. Для внесения подобных изменений вы должны изменить значения полей в наборе записей, после чего использовать такие инструкции SQL, как UPDATE или DELETE.

Связывание нескольких таблиц в инструкциях SELECT

Одна инструкция SELECT может работать с более чем одной таблицей. Просто перечисsiire ULC необходимые таблицы, с которыми должна работать инструкция, как показано ниже:

SELECT * FROM Toys, Clerks

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

Поделиться:
Популярные книги

Мажор. Дилогия.

Соколов Вячеслав Иванович
Фантастика:
боевая фантастика
8.05
рейтинг книги
Мажор. Дилогия.

Эволюция Генри

Ильин Владимир Леонидович
1. Хроники Генри
Фантастика:
героическая фантастика
постапокалипсис
рпг
фэнтези
5.00
рейтинг книги
Эволюция Генри

Белый Волк

Мазин Александр Владимирович
2. Викинг
Приключения:
исторические приключения
9.12
рейтинг книги
Белый Волк

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Кодекс Крови. Книга ХVII

Борзых М.
17. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVII

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

Учитель из прошлого тысячелетия

Еслер Андрей
6. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Учитель из прошлого тысячелетия

Путёвка в спецназ

Соколов Вячеслав Иванович
1. Мажор
Фантастика:
боевая фантастика
7.55
рейтинг книги
Путёвка в спецназ

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Покоривший СТЕНУ 4: Четыре ответа

Мантикор Артемис
4. Покоривший СТЕНУ
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Покоривший СТЕНУ 4: Четыре ответа

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI