Программирование >>  Разработка пользовательского интерфейса 

1 ... 77 78 79 [ 80 ] 81 82 83 ... 147


в ЗалрсиД : запрос на \

Пеле-Имя Tdunujbi

нЛн.

account

Услошв

Рис. 7.15.

Запрос обновления

Запрос обновления, для создания которого необходимо повторить те же шаги, что и для предыдущих типов запросов, служит, как видно из его названия, для обновления данных в таблице или нескольких таблицах. Если сравнивать внешний вид Конструктора с предыдущим типом запросов, то вы увидите только одно изменение - строка Удаление заменилась строкой Обновление. В эту строку вам необходимо заносить новое значение поля, которое оно приобретет после выполнения запроса.

Перекрестный запрос

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

В качестве примера рассмотрим достаточно тривиальную выборку по трем полям account, key customer и summa.

Итоговый запрос будет содержать следующие данные:

account key customer summa

10000

12300

13000

24000

31000

34000

36000

24000

28000

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

Мы можем выбрать для каждой колонки значение в этой строке из набора, который состоит из слов Группировка , Выражение , Условие и набора уже знакомых нам функций агрегирования. Выбор значений в этой строке накладывает определенные обязанности по выбору значений в четвертой строке, так как Access контролирует ошибки только при попытке

колонке нельзя. То есть строка Удаления имеет направляющий смысл, никак не влияющий на сам механизм выборки данных (рис. 7.15).



-КС1ХГ/

Рис. 7.16.

Для поля key customer выбираем пару значений соответственно Группировка/Заголовки столбцов . Поле summa будет давать нам информацию о сумме покупок по конкретному счету, поэтому групповой операцией для него станет функция агрегирования SUM(), а в перекрестной таблице оно будет представлять собой искомое значение (см. рис. 7.16).

В итоге у нас получится следующий результат.

Account

101 102 103 104

10000

12300

13000

55000

70000

52000

Обратите внимание на полученное выражение. Ключевые слова TRANSFORM и PIVOT не поддерживаются в стандарном SQL. Поэтому следующий ниже запрос или ему подобные вы можете построить только в Access. TRANSFORM SUM(Account.summa) AS Sum summa SELECT Account.account FROM Account GROUP BY Account.account PIVOT Account.key customer;

До сих пор мы рассматривали типы запросов, которые легко создать как визуально, так и в окне режима SQL. Но есть несколько типов запросов, которые невозможно создать с помощью Конструктора. В меню Запросы есть пункт Запрос SQL, который дает нам доступ к трем командам.

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

SELECt first,second FROM tableone UNION

SELECT first,second FROM tabletwo

В вышеприведенном примере две таблицы имеют поля одинакового типа (непременное условие), поэтому поочередное выполнение двух запросов и объединение их результатов с помощью оператора UNION дает нам вполне легкое решение, которое и выполняется достаточно

сделать выборку. Иногда бывает очень жаль потраченных усилий.

Таким образом, если мы выбрали для поля account значение Группировка , то значением строки Перекрестная таблица лучше выбрать Заголовки строк или Заголовки столбцов , либо вообще не выводить его, но при этом обязательно добавить еще одно поле, в котором значение строки Групповая операция должно быть Группировка . В нашем примере, как видно из рис. 7.16, мы выбрали значение Заголовки строк .



быстро. В случае отсутствия поля подходящего типа в одной из таблиц запрос можно переписать следующим образом (предполагается, что поле second имеет тип Long):

SELECT first,second From tableone

UNION

SELECT first,0

FROM tabletwo

Как видите, достаточно просто подставить константу подходящего типа.

Следующую команду - К серверу (в англоязычной версии Pass-Through) мы рассмотрим в главе

Команда Управление позволяет нам создавать SQL выражения, которые относятся к DDL разделу SQL.

С помощью Jet SQL нельзя создавать базы данных, но можно создавать таблицы и индексы, а также изменять структуры таблиц и удалять таблицы и индексы.

До сих пор мы использовали визуальные средства и режим SQL для создания запросов. Но очень часто, особенно если вы обращаетесь к базе данных Access из среды приложения, написанного на другом языке, например на Visual Basic или Visual C++, вам придется использовать объекты доступа к данным (DAO).

Типичный запрос с использованием этих объектов выглядит следующим образом:

Dim db As Database, qd AS QueryDef, mySQL As String Set db = DBEngine.Workspaces(0).Databases(0) mySQL = SELECT * FROM Account WHERE account=102 Set qd =db.CreateQueryDef( Mywritebyhandquery ,mySQL)

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

Для того чтобы обратиться к ранее созданному запросу в программе, можно обратиться к коллекции QueryDefs. Вы можете переписать свойство SQL объекта типа QueryDef, то есть фактически переписать содержание запроса, узнать дату последней модификации запроса и т. д. При этом мы просто обращаемся к свойствам и методам объекта QueryDef. В следующем примере для уже существующего объекта переписывается свойство SQL, и с помощью окна сообщений выводится дата последней модификации этого объекта, которая, естественно, будет совпадать с текущей системной датой.

Dim db As DATABASE, qd As QueryDef, mySQL As String

Set db = DBEngine.Workspaces(0).Databases(0)

Set qd = db.QueryDefs( Simplequery )

qd.SQL = SELECT * FROM account WHERE date write >>

& #01/06/96#

MsgBox(Str(qd.LastUpdated))

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

Dim db As DATABASE, qd As QueryDef, mySQL As String Set db = DBEngine.Workspaces(0).Databases(0) Set qd = db.CreateQueryDef( DLquery , CREATE TABLE fromquery (mama TEXT(20),

slava LONG) )

qd.Execute

Последним способом, который позволяет нам выполнять запросы в Access, являются макрокоманда RunSQL или метод RunSQL объекта DoCmd. В табл. 7.4 представлены все виды запросов, которые мы можем запустить с помощью метода RunSQL и ее макроэквивалента RunSQL. В дальнейшем мы будем говорить только о методе RunSQL.

Таблица 7.4. Запросы, доступные для метода RunSQL



1 ... 77 78 79 [ 80 ] 81 82 83 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика