Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009 (1084484), страница 66
Текст из файла (страница 66)
10.26).5. Ввести нужные таблицы/запросы в схему запроса-источника записей,получив тем самым формируемый запрос, возможный вид которого показан на рис. 10.27.Часть 3. Современные СУБД и их применение316ИШДобавление таблицыШТаблицы I цР Запросы j |р) Таблицы и запросы |ДобавитьЗакрытьЗаказаноЗаказыКлиентыПоставщикиСотрудникиТипыТоварыРис. 10.26. Окно добавления таблиц и / и л и запросовgjp Инструкция SQL : построт"ель запросовBSDТоварыПоставщикиКоаТовараМаркаКодПоставщКодТипаjiJКодПосганцНазваниеОбращаться!ДолжностьПоле; КодТовараИмя таблицы: ТоварыСортировка:Вывод наэкрай:мУсловие отбора;МаркаТоварыНазваниеПоставщикиимТелефонПоставщики—и•ГШРис.
10.27. Вид формируемого запросаОт этого запроса легко перейти к SQL-выражению одним из описанныхспособов, например, по команде В и д | Р е ж и м S Q L ( V i e w | S Q L ) .10. СУБД Access 2002317SQL вмакрокомандахМакрокоманды входят в состав макросов, которые используются для автоматизации в ы п о л н е н и я часто повторяющихся действий в работе с БД.Макрос представляет собой одну или несколько макрокоманд с аргументами.М а к р о с ы в ы з ы в а ю т с я из окна Б Д или автоматически при н а с т у п л е н и иопределенных событий.
В последнем случае требуется связать макрос сн у ж н ы м с о б ы т и е м . С о б ы т и е м , по к о т о р о м у в ы з ы в а е т с я макрос, м о ж е тбыть, например, н а ж а т и е кнопки в области экранной ф о р м ы или открытие окна Б Д .Наряду с выполнением некоторых действий над объектами Б Д макросымогут вызывать другие макросы, программы на Visual Basic и внешние приложения.И з множества макрокоманд (около 50) с S Q L непосредственно связаныдве макрокоманды: 3 a n y c i < 3 a n p o c a S Q L ( R u n S Q L ) и О т к р ы т ь З а п р о с(OpenQuery).Макрокоманда 3anycK3anpocaSQLзапускает запрос на изменение или управляющий запрос Access с помощью соответствующей инструкции SQL.
Этамакрокоманда делает возможным выполнение действий в макросе без предварительного создания сохраненных запросов. С помощью макрокомандыможно выполнять и сохраненные запросы.Запросами на изменение я в л я ю т с я и н с т р у к ц и и S Q L (подраздел 3.9), реализующие следующие функции: добавление ( I N S E R T I N T O ) , удаление( D E L E T E ) , создание т а б л и ц ы ( S E L E C T . . .
I N T O ) и обновление ( U P D A T E ) .Управляющими запросами являются инструкции SQL, выполняющие следующие функции: создание таблицы (CREATE TABLE), изменение таблицы( A L T E R T A B L E ) , удаление таблицы ( D R O P T A B L E ) , создание индекса( C R E A T E I N D E X ) и удаление индекса ( D R O P I N D E X ) .Единственнымиобязательнымаргументоммакрокоманды3anycx3anpocaSQLявляется инструкция SQL. Максимальная длина инструкции S Q L составляет 255 символов. Д л я выполнения инструкции S Q L длиной более 255 символов следует вызвать метод R u n S Q L объекта DoCmd впрограмме VBA. В программах VBA допускается использование инструкцийS Q L длиной до 32768 символов.Аргумент м а к р о к о м а н д ы в виде текста S Q L - и н с т р у к ц и и вводится вручную в окне ввода м а к р о к о м а н д ы и л и копируется из окна SQL, что частоудобнее.
Д л я в ы п о л н е н и я последней м а н и п у л я ц и и можно поступить так:войти в режим Конструктора запросов, создать запрос, получить эквивал е н т н ы й оператор SQL, в ы д е л и т ь его и поместить в б у ф е р обмена. Пример готовой к в ы п о л н е н и ю м а к р о к о м а н д ы с оператором S Q L приведен нарис. 10.28.Часть 3. Современные318СУБД и ихприменениетшшШ. Макрос! : макросМакрокоманда3anycK3anpocaSQL1Примечание'L|——Аргументы макрокомандыИнструкция SQLSELECT DISTINCTROW TOFСтолбец для ввода примечаний.Рис. 10.28.
Макрокоманда с оператором SQLМакрокоманда ОткрытьЗапрос позволяет открывать запрос на выборкуили перекрестный запрос (в режимах Таблицы, Конструктора и Предварительного просмотра), запускать запрос на изменение или ввод данных. Вызов ее эквивалентен нажатию кнопки О т к р ы т ь ( O p e n ) или К о н с т р у к т о р( D e s i g n ) в окне базы данных после выбора запроса на вкладке З а п р о с ы(Queries).В макрокоманде задаются три аргумента: имя запроса, режим и режим данных. Первый аргумент задает имя открываемого запроса и является обязательным. Второй аргумент задает режим открытия запроса.
Допустимымизначениями являются: «Таблица» (используется по умолчанию), «Конструктор» и «Просмотр».Третий аргумент описывает режим ввода данных в запрос. Аргумент можно применять к запросам, открываемым в режиме таблицы. Допустимые значения: «Добавление» (можно вводить новые записи, нельзя изменять существующие), «Изменение» (можно вводить новые и изменять существующиезаписи; действует по умолчанию) и «Только чтение» (разрешается просматривать записи).Для ускоренного создания макроса с этой макрокомандой можно воспользоваться следующим приемом. Выбрать запрос в окне базы данных и переместить с помощью мыши в строку макрокоманды в макросе. При этом в макросавтоматически добавляется макрокоманда О т к р ы т ь З а п р о с , открывающаязапрос в режиме таблицы.Для вызова макрокоманды О т к р ы т ь З а п р о с в программе VBA используют метод O p e n Q u e r y объекта D o C m d .10.
СУБД Access 2002319SQL в программахна VBAНапомним, что программы на VBA, как и макросы, предназначены для автоматизации выполнения повторяющихся операций над объектами БД Access.Д л я выполнения программы следует запустить содержащую ее процедуру Subи л и ф у н к ц и ю F u n c t i o n .
П р о г р а м м а з а п и с ы в а е т с я в п р о ц е д у р е к а к н а б о р ин-струкций и методов, с помощью которых выполняются требуемые действия.Процедуры, как известно, хранятся в модулях и выполняются в ответ на события или вызываются из выражений, макросов и других процедур.В Access существуют следующие способы запуска программ VBA:• включение программы в процедуру обработки события;• вызов функции в выражении;• вызов процедуры Sub в другой процедуре или в окне отладки;• выполнение макрокоманды З а п у с к П р о г р а м м ы ( R u n C o d e ) в макросе.Например, чтобы вызвать программу выполнения определенных действийпри открытии формы, нужно включить ее текст в процедуру обработки события Н а ж а т и е к н о п к и ( C l i c k ) для кнопки, при нажатии которой будет открываться форма.Ф у н к ц и и применяются в выражениях, определяющих вычисляемые поляв формах, отчетах или запросах.
Выражения используются для указания условий в запросах и фильтрах, а также в макросах, в инструкциях и методахVBA, а также в инструкциях SQL. В процедуру Sub можно включать общедоступные VBA-подпрограммы, вызываемые из других процедур.Рассмотрим выполнение запроса к базе данных с помощью инструкцийS Q L в программе на Visual Basic для приложений.В запросе производится отбор в базе данных записей, удовлетворяющихопределенным условиям (запрос на выборку), либо выдается инструкция навыполнение указанных действий с записями, удовлетворяющими определенным условиям (запрос на изменение).Если запрос S Q L используется для возвращения данных, ядром базы данных Microsoft J e t создается объект R e c o r d s e t .
После создания этого объекта можно использовать методы поиска ( F i n d ) и перемещения по записямнабора.Существуют следующие способы выполнения запросов:• вызов метода E x e c u t e (для выполнения запросов S Q L на изменение);• создание и выполнение специального объекта Q u e r y D e f ;• и с п о л ь з о в а н и е инструкции SQL в качестве аргумента методаOpen Recordset;• в ы п о л н е н и е методаOpenRecordsetQueryDef;• вызов методовRunSQLиOpenQuery.для существующего объектаЧасть 3. Современные СУБД и их применение320Метод E x e c u t e используется, если требуется выполнить такое изменениев БД, при котором не возвращаются записи.
Это, например, операции вставки или удаления записей.В качестве простейшего примера приведем команды Visual Basic для приложений выполнения запроса на изменение, в котором выполняется обновление записей таблицы «Должности», не имеющих значение в столбце ISBN.При возникновении ошибки все изменения отменяются.Dim strSQL as StringstrSQL = «DELETE FROM Должности WHERE ISBN IS NULL»dbsBiblio.Execute strSQL, dbFailOnErrorОбъект Q u e r y D e f представляет собой сохраненное определение запроса вбазе данных.
Его можно рассматривать как откомпилированную инструкциюSQL.Приведенная ниже программа выполняет создание нового объекта Q u e r y D e f ,после чего соответствующий запрос открывается в режиме таблицы.Sub NewQueryQ' Объявление переменныхDim dbs As Database, qdf As QueryDef, strSQL As String' Установка значения переменной типа Database,' представляющей текущую базу данныхSet dbs = CurrentDb' Строка запросаstrSQL = «SELECT * FROM Сотрудники WHERE[ДатаНайма ]>= # 1-1 -95 # »' Создание нового объекта QueryDefSet qdf = dbs.CreateQueryDef(«HoebieCompydHUKU»,strSQL)' Открытие запросаDoCmd.OpenQueryqdf.NameEnd SubМетод OpenRecordSet используется, чтобы открыть объект типа RecordSetдля выполнения последующих операций над ним.В следующей процедуре с помощью инструкции SQL создается объектRecordset типа динамического набора записей.
В предложение WHERE инструкции SQL включена функция Y e a r , определяющая отбор заказов, размещенных в 1998 году.SubOrders98()Dim dbs As Database, rstAs Recordset, strSQL As String10. СУБД Access 2002321Dim fid As FieldSet dbs = CurrentDbstrSQL = «SELECT DISTINCTROW«FROM Заказы WHERESet rst = dbs.OpenRecordset(strSQL,rst.MoveLastDebug.Printrst.RecordCountEnd SubЗаказ, ДатаРазмещения« &((Уеаг([ДатаРашещения])=1998));»dbOpenDynaset.)Метод R u n S Q L выполняет макрокоманду 3 a n y c K 3 a n p o c a S Q L ( R u n S Q L )в программе VBA.