Основы работы с базами данных

         

Назначение экранных форм


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

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

На рис. 5.1 - 5.5 приведены в качестве примера экранные формы нескольких основных видов в одной из наиболее крупных систем автоматизации управления предприятиями - BaanERP.


Рис. 5.1.  Множество записей в одной экранной форме, редактирование - в отдельном окне (см. рис. 5.4)


увеличить изображение
Рис. 5.2.  Множество записей в одной экранной форме с кнопками, но без меню и панели инструментов, с редактированием данных в таблице


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


увеличить изображение
Рис. 5.4.  Одна запись на многостраничной экранной форме с кнопками без меню и панели инструментов


Рис. 5.5.  Экранная форма с командными кнопками

При работе с экранными формами существует два принципиально разных подхода:

    Стиль, принятый в системе FoxPro - на главной экранной форме представлена информация одной записи главной таблицы и связанные с ней данные; полный список записей можно увидеть, нажав кнопку Поиск на этой форме (см. пример рис. 5.3).Стиль, основанный на показе таблицы данных - главный экран содержит список (не редактируемых в строке) записей главной таблицы, из него можно перейти на другой экран для редактирования одной записи (см. пример рис. 5.1).

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



Объекты экранных форм и их основные свойства


На экранной форме (объект базового класса Form) присутствуют объекты следующих классов (см. рис. 5.9):

Label - надпись на форме, обычно не изменяющаяся (но может изменяться программно);

Line - линия на форме, обычно не изменяющаяся, но, в принципе, тоже может изменяться;

Text Box - поле редактирования, служит для отображения и редактирования информации поля таблицы базы данных или переменной, его главное свойство: ControlSourse - с каким источником данных связан этот объект (см. далее рис. 5.10);

Grid - сложный объект, состоящий из столбцов, которые имеют заголовок (Header) и, обычно, редактируемые данные в виде объекта Text Box (можно заменить при необходимости на Combo Box - раскрывающийся список, Spinner - счетчик и пр.);

Container - контейнер-объект, который служит для объединения других объектов в одну группу, для которой можно задать общие свойства и события;

Command Button - командная кнопка, связанная с выполнением определенной процедуры, находится внутри контейнера.

Следует отметить, что многие из этих объектов имеют базовый класс (свойство BaseClass), соответствующий приведенному названию (из библиотеки классов Standard), а реально происходят из Wizembss.vcx - библиотеки классов, которую использует Мастер разработки экранных форм. Эта библиотека основана на стандартных объектах, но они модифицированы (добавлены и описаны новые свойства и события), что необходимо для работы Мастера.

Для создания объектов экранных форм используется панель инструментов Form Controls, для выравнивания объектов полезна панель Layout (см. рис. 5.10).


Рис. 5.10.  Панели инструментов для работы с объектами экранной формы

Полный список стандартных объектов экранных форм, присутствующих на панели Form Controls, приведен в табл. 5.1

Таблица 5.1.

НаименованиеКнопкаГлавное свойствоПример использования
Label

Caption

Text box

Control Sourse

Edit box

Control Sourse

Command button

Click Event

Option Group

Control Sourse

Check box

Control Sourse

Combo box

ControlSourse,RowSourseTip,RowSourse



List box

ControlSourse,RowSourseTip,RowSourse

Spinner

Control Sourse

Grid

см. рис. 5.9
Image Picture

Picture

Timer

Timer Event, Intervalневидимый объект
Page Frame

Многостраничная форма
ActiveX (OLE) Container

Ole ClassОбъект ActiveX
ActiveX (OLE) Bound

Control SourseОбъект поля General
Line

Shape

Curvature

Сontainer

Группа объектов
Hyperlink

Используется с объектами библиотек _hyperlink.vcx и _internet.vcxНевидимый объект
< Свойства формы и всех ее объектов можно просматривать и изменять в окне Properties (рис. 5.11). Если это окно отсутствует, его можно открыть, щелкнув правой кнопкой мыши на любом объекте и выбрав в контекстном меню слово Properties.


Рис. 5.11.  Окно свойств объекта

В верхней части окна присутствует раскрывающийся иерархический список объектов, ниже - несколько страниц групп свойств объектов:

Data - данные, важнейшее свойство в этом разделе - Control Sourse для объектов, связанных с редактированием каких-либо данных;

Metods - методы, т.е. процедуры (программные модули), выполняющиеся для объекта, чаще всего, при наступлении определенных событий (Events). Примеры событий: Load Event - происходит перед созданием объекта (но после открытия таблиц, если это задано в Data Environment для формы); Activate Event - при активизации объекта; When Event - перед тем, как курсор переместится на текущий объект, выбранный мышкой, или при переходе на него с предыдущего объекта с использованием клавиш TAB или Enter; Valid Event - перед тем, как курсор переместится c текущего на другой объект; Click Event - при щелчке мышкой на объекте и пр.;

Layout - все, что связано с внешним видом объекта: расположение, размеры, шрифт, цвет, тип выравнивания, ShowTips - показывать или нет всплывающие подсказки, ScrollBars - показывать или нет полосы скроллинга и пр.;

Other - прочие свойства;

Favorites - избранное, раздел, куда можно помещать список самых важных свойств объекта (в версии VFP 9.0).

Следует отметить важность события Valid Event для всех объектов, связанных с редактированием данных, - оно не только позволяет выполнить проверку правильности ввода данных, но, что особенно ценно, позволяет автоматизировать выполнение расчетов после редактирования данных и выхода из поля редактирования.

Для использования экранной формы нужно запустить ее в работу, что можно сделать из системы FoxPro несколькими способами: нажатием на кнопку Run


на стандартной панели инструментов, горячими клавишами Ctrl+E, командой Run Form в пункте меню Form (этот пункт присутствует в меню только при активном окне Form Designer) или командой Do Form Spisok, написанной в окне Command (при этом папка, в которой расположены файлы экранной формы Spisok.scx и Spisok.sct должна быть Default Directory или в команде нужно указать полный путь и название файла).После чего начинает работать программа, отображающая на экране тот вид, что описан вами с использованием Конструктора форм, дающая возможность редактировать данные в полях формы и выполнять процедуры, связанные с объектами этой формы (рис. 5.12).


Рис. 5.12.  Экранная форма, запущенная в работу с базой данных

Как мы видим, на форме отсутствуют названия факультетов, специальностей и предметов. В объекте Grid Мастер не показал имеющиеся в таблице Ocenki заголовки полей таблицы (Caption). Следует устранить эти недостатки и создать возможность выбора факультетов, специальностей и предметов из соответствующих справочников.


Пример простейшего расчета при работе с базой данных


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

Дополним экранную форму новой кнопкой для выполнения небольшого расчетного примера.

На рис. 5.20. приведен текст процедуры метода ClickEvent новой кнопки для расчета и показа средней оценки студента.


увеличить изображение
Рис. 5.20.  Процедура метода ClickEvent кнопки расчета средней оценки

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

Результат выполнения процедуры расчета показан на рис. 5.21..


Рис. 5.21.  Результат работы кнопки "Расчет средней оценки"

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



Работа с базой данных с использованием экранной формы


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

Назначение кнопок, на которых вместо надписей мы задали показ картинок (см. рис. 5.7.), поясняется подсказками у курсора мыши (ToolTipText) и на строке состояния (StatusBarText), однако эти сообщения в библиотечном объекте написаны на английском языке. Если использовать в дальнейшем библиотеки из папки VFP Wizards, следует перевести на русский язык сообщения и надписи на экранных формахэтих библиотек. В табл. 5.2. приведено назначение стандартных кнопок экранной формы.

Таблица 5.2. Назначение кнопок базового класса pictbtns библиотеки wizbtns.vcx

№НазначениеToolTipTextStatusBarText
1.Перейти к первой записиTop recordGo to top of table
2.Перейти к предыдущей записиPrevious recordSkip to previous record
3.Перейти к следующей записиNext recordSkip to next record
4.Перейти к последней записиBottom recordGo to bottom of table
5.Поиск записейFind recordsSearch for records
6.Напечатать отчетPrint reportPrint to report
7.Добавить/сохранить записьAdd/Save recordAdd new record/Save edits
8.Редактировать/отменить измененияEdit/Revert recordEdit existing record/Revert edits
9.Удалить записьDelete recordDelete existing record
10.Выйти из формыExit formExit input form

Как видно из табл. 5.2., кнопки 7 и 8 имеют двойное назначение, которое изменяется после нажатия на кнопку. Текст процедур, связанных с методом ClickEvent для кнопок, находится в классе txtbtns библиотеки wizbtns.vcx, где его можно изучить. Если для кнопки 7 возникнет необходимость использовать нестандартную команду добавления данных, нужно скопировать процедуру библиотечного объекта в метод ClickEvent своей кнопки и отредактировать фрагмент программы (в фигурных скобках - комментарии к программе):


IF THIS.Parent.EditMode {если нажата кнопка и мы в режиме редактирования} THIS.Parent.UpdateRows() { сохранить запись, процедура группы кнопок - родительского объекта} ELSE IF !THIS.Parent.AddRec() {иначе - к процедуре добавления записей} RETURN ENDIF ENDIF THIS.Parent.EditMode = !THIS.Parent.EditMode {изменение свойства EditMode } THIS.Parent.AddMode = THIS.Parent.EditMode {изменение свойства AddMode } THIS.Parent.TopFile = .F. THIS.Parent.ButtonRefresh() {обновление параметров кнопок 5 -10 } THIS.Parent.NavRefresh() {обновление параметров кнопок 1-4 и объектов формы}

Наиболее сложные функции - у кнопок 7 в режиме добавления данных, кнопок 5 и 6. Эти кнопки вызывают запуск в работу библиотечных экранных форм для добавления, поиска записей и вывода отчетов, вид которых в Конструкторе (после перевода надписей на русский язык и модификации формы поиска) приведен на рис. 5.17-5.19.


Рис. 5.17.  Экранная форма GridAddForm библиотеки wizbtns.vcx


Рис. 5.18.  Экранная форма SearchForm библиотеки wizbtns.vcx(добавлен объект Grid1 для показа таблицы, в которой выполняется поиск)


Рис. 5.19.  Экранная форма вывода отчета библиотеки _report.vcx

Порядок ввода новых данных с использованием разработанной формы следующий:

    запускаем в работу экранную форму;нажимаем кнопку 7 - "Добавить запись", выбираем, что будем добавлять - нового студента (главная таблица) или оценку студента (дочерняя таблица); в последнем случае значение ключевого поля в дочернюю таблицу заносится автоматически;выполняем ввод новых данных;нажимаем кнопку 7, которая изменила картинку и превратилась в команду "Сохранить запись";при необходимости повторяем все со второго пункта.



Команды для работы с базами данных, таблицами, индексами, связями


Создать базу CREATE DATABASE [DatabaseName | ?]Создать таблицу базы данных (SQL-команда) CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] [CODEPAGE = nCodePage] ( FieldName1 FieldType [( nFieldWidth [, nPrecision] )] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]] [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] [, FieldName2... ] [, PRIMARY KEY eExpression2 TAG TagName2 |, UNIQUE eExpression3 TAG TagName3 [COLLATE cCollateSequence]] [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] [COLLATE cCollateSequence] REFERENCES TableName3 [TAG TagName5]] [, CHECK lExpression2 [ERROR cMessageText2]] ) | FROM ARRAY ArrayName Открыть базу данных, представление (View) или таблицу базы USE [[DatabaseName!]Table | SQLViewName | ?] [IN nWorkArea | cTableAlias] [ONLINE] [ADMIN] [AGAIN] [NOREQUERY [nDataSessionNumber]] [NODATA] [INDEX IndexFileList | ? [ORDER [nIndexNumber | IDXFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]]] [ALIAS cTableAlias] [EXCLUSIVE] [SHARED] [NOUPDATE] [CONNSTRING cConnectionString | (m.nStatementHandle) ] Функция ALIAS([nWorkArea]) возвращает алиас для текущей или заданной рабочей зоны. Выбрать свободную рабочую зону (0), заданную рабочую зону или выбрать таблицу SELECT([ 0 | 1 | cTableAlias ]) SELECT(0) - возвращает номер выбранной рабочей зоны SELECT(1) - возвращает наибольший номер свободной зоны SELECT 0 - выбор свободной зоны с наименьшим номером Создать индексный файл INDEX ON eExpression TO IDXFileName | TAG TagName [COLLATE cCollateSequence] [OF CDXFileName] [FOR lExpression] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE] [BINARY] Открыть индекс SET INDEX TO [IndexFileList | ? ] ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [ADDITIVE] Установить порядок по индексу SET ORDER TO [nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [IN nWorkArea | cTableAlias][ASCENDING | DESCENDING]] Установить связь между таблицами SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1 [, eExpression2 INTO nWorkArea2 | cTableAlias2 ] [IN nWorkArea | cTableAlias] [ADDITIVE]] Установить множественную связь между таблицами (используется при формировании отчетов) SET SKIP TO [TableAlias1 [, TableAlias2] ...]


Команды перемещения по таблице, поиска и отбора данных

Перейти к записи... GO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias] GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias] (вместо GO можно использовать GOTO) Переместиться по таблице (вперед или назад) SKIP [nRecords] [IN nWorkArea | cTableAlias]

Для nRecords>0 - перемещение далее по таблице, для nRecords<0 - назад к предыдущим записям.

Функция BOF() возвращает .T., если текущая запись - первая и Вы пытаетесь выполнить команду SKIP -1, аналогично для последней записи - EOF()=.T.

Поиск для заданного логического условия LOCATE [FOR lExpression1] [Scope] [WHILE] [NOOPTIMIZE]

(Найти следующую запись, соответствующую условию - команда CONTINUE)

Поиск по значению индекса SEEK eExpression ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [IN nWorkArea | cTableAlias]Установить фильтр SET FILTER TO [lExpression] [IN nWorkArea | cTableAlias]Выполнить запрос (SQL-команда) SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [, ...] FROM [FORCE] Table_List_Item [, ...] [[JoinType] JOIN DatabaseName!]Table[[AS] Local_Alias] [ON JoinCondition [AND | OR [JoinCondition | FilterCondition] ...] [WITH (BUFFERING = lExpr)] [WHERE JoinCondition | FilterCondition [AND | OR JoinCondition | FilterCondition] ...] [GROUP BY Column_List_Item [, ...]] [HAVING FilterCondition [AND | OR ...]] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, ...]] [INTO StorageDestination | TO DisplayDestination] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]

В качестве StorageDestination можно использовать одно из следующих предложений:

ARRAY ArrayName - в массив переменных памяти;CURSOR CursorName - в курсор;DBF TableName | TABLE TableName - в таблицу.

В качестве DisplayDestination можно использовать одно из следующих предложений:

FILE FileName [ADDITIVE] - ASCII текстовый файл;PRINTER [PROMPT] - вывод на принтер;SCREEN - в главное окно системы VFP.



Команды для добавления, модификации и удаления данных

Открыть окно для работы в табличном формате с таблицей базы данных: BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize]] [STYLE cFontStyle] [FOR lExpression1 [REST]] [FORMAT] [FREEZE FieldName] [KEY eExpression1 [, eExpression2]] [LAST | NOINIT] [LOCK nNumberOfFields] [LPARTITION] [NAME ObjectName] [NOAPPEND] [NOCAPTIONS] [NODELETE] [NOEDIT | NOMODIFY] [NOLGRID] [NORGRID] [NOLINK] [NOMENU] [NOOPTIMIZE] [NOREFRESH] [NORMAL] [NOWAIT] [PARTITION nColumnNumber [LEDIT] [REDIT]] [PREFERENCE PreferenceName] [SAVE] [TIMEOUT nSeconds] [TITLE cTitleText] [VALID [:F] lExpression2 [ERROR cMessageText]] [WHEN lExpression3] [WIDTH nFieldWidth] [WINDOW WindowName1] [IN [WINDOW] WindowName2 | IN SCREEN] [COLOR SCHEME nSchemeNumber]

При описании полей (в параметре FIELDS) список может содержать следующие параметры:

FieldName (имя поля) [:R] (только чтение) [:nColWidth] (ширина поля) [:V = lExpr1 [:F] [:E = cTxt]] (функция, выполняемая при выходе из поля) [:P = cFormatCodes] (формат) [:B = eMin, eMax [:F]] (диапазон данных) [:H = cHeadingText] (заголовок) [:W = lExpr2] (функция,выполняемая перед входом в поле)

Близкий синтаксис имеют команды EDIT и CHANGE для работы с таблицей при построчном расположении полей.

Добавление записей APPEND [BLANK] [IN nWorkArea | cTableAlias] [NOMENU] APPEND FROM FileName | ? [FIELDS FieldList] [FOR lExpression][[TYPE] [DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB | WITH CHARACTER Delimiter] | DIF | FW2 | MOD | PDOX | RPD | SDF | SYLK | WK1 |WK3 | WKS | WR1 | WRK | CSV | XLS | XL5 [SHEET cSheetName]| XL8 [SHEET cSheetName]]] [AS nCodePage]

APPEND FROM ARRAY ArrayName [FOR lExpression] [ FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]

SQL-команда INSERT INTO - добавить запись с заданными значениями полей:

INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])] VALUES (eExpression1 [, eExpression2, ...]) INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR | FROM NAME ObjectName INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])] SELECT SELECTClauses [UNION UnionClause SELECT SELECTClauses ...]Занести данные в поля таблицы REPLACE FieldName1 WITH eExpression1 [ADDITIVE] [, FieldName2 WITH eExpression2 [ADDITIVE]] ...[Scope][FOR lExpression1][WHILE lExpression2] [IN nWorkArea | cTableAlias][NOOPTIMIZE]Копировать данные текущей записи в массив переменных SCATTER [FIELDS FieldNameList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO] TO ArrayName | TO ArrayName BLANK | MEMVAR | MEMVAR BLANK | NAME ObjectName [BLANK]



параметр MEMVAR означает - используются переменные с теми же именами, что и имена полей записи; имя переменной в программе следует писать как m.<имя поля>).

Копировать данные из массива переменных в текущую запись GATHER FROM ArrayName | MEMVAR | NAME ObjectName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO]Копирование данных таблицы в массив COPY TO ARRAY ArrayName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [Scope] [FOR lExpr1a] [WHILE lExpression2] [NOOPTIMIZE]Выполнить обновление данных (SQL-команда) UPDATE Target SET Column_Name1 = eExpression1 [, Column_Name2 = eExpression2 ...] [FROM [FORCE] Table_List_Item [[, ...] | [JOIN [ Table_List_Item]]] WHERE FilterCondition1 [AND | OR FilterCondition2 ...]

Здесь Target - таблица (table), курсор (cursor) или их алиас или файл для обновления.

Пометить записи таблицы для удаления записи DELETE [Scope] [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias] [NOOPTIMIZE]Удалить помеченные для удаления записи из файла PACK [MEMO | DBF] [Tablename ] [IN nWorkarea | cTableAlias]Выполнить удаление записей (SQL-команда) DELETE [Target] FROM [FORCE] Table_List [[, Table_List ...] | [JOIN [ Table_List]]] [WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

Команды вычислений по данным таблиц

CALCULATE eExpressionList [Scope] [FOR lExpression1] [WHILE lExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE] [IN nWorkArea | cTableAlias]

где для eExpressionList - можно использовать следующие функции:

AVG(nExpression) - среднее значение CNT( ) - количество MAX(eExpression) - максимальное значение MIN(eExpression) - минимальное значение NPV(nExpression1, nExpression2 [, nExpression3]) - банковская функция STD(nExpression) - стандартное отклонение SUM(nExpression) - сумма VAR(nExpression) - статистическая функция

SUM [eExpressionList] [Scope] [FOR lExpression1] [WHILE lExpression2][TO MemVarNameList | TO ARRAY ArrayName] [NOOPTIMIZE]

AVERAGE [ExpressionList] [Scope] [FOR lExpression1] [WHILElExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE]


Некоторые команды и функции для работы с базой данных


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

Полный список команд и функций с разъяснением их параметров и примерами использования можно найти в справочной системе VFP в разделе Language Reference.



Отбор данных из базы с использованием SQL-запросов


Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована команда SET FILTER TO <условие> - установить фильтр для открытой таблицы базы данных.

Однако большими возможностями обладает так называемый SQL-запрос - команда SELECT :, сформированная в соответствии с правилами языка запросов SQL (Structured Query Language).

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

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

В VFP и других системах фирмы Microsoft (Word, Excel) можно использовать Конструктор запросов, что упрощает и ускоряет написание запросов. Кроме того, в VFP есть Мастер для разработки запросов разного вида. Однако использование этих средств не позволяет реализовать все возможности языка запросов. Максимальные возможности - при написании запроса в текстовом виде в любом программном модуле в соответствии с синтаксисом команды SELECT (полный синтаксис будет описан далее).

Принцип формирования запросов наиболее легко освоить при использовании Мастера запросов.

Поставим задачу отобрать информацию по экзаменационным оценкам студентов по факультету № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1 ("Математика" в справочной таблице) с сортировкой данных по группам, в группах - в порядке уменьшения оценки.

Для этого выбираем на стандартной панели или в меню команду New, далее выбираем Query и нажимаем кнопку Query Wizard. В появившемся списке из трех пунктов: Cross-Tab Wizard, Graph Wizard и Query Wizard выбираем последний вариант - стандартный запрос.


Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована команда SET FILTER TO <условие> - установить фильтр для открытой таблицы базы данных.

Однако большими возможностями обладает так называемый SQL-запрос - команда SELECT :, сформированная в соответствии с правилами языка запросов SQL (Structured Query Language).

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

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

В VFP и других системах фирмы Microsoft (Word, Excel) можно использовать Конструктор запросов, что упрощает и ускоряет написание запросов. Кроме того, в VFP есть Мастер для разработки запросов разного вида. Однако использование этих средств не позволяет реализовать все возможности языка запросов. Максимальные возможности - при написании запроса в текстовом виде в любом программном модуле в соответствии с синтаксисом команды SELECT (полный синтаксис будет описан далее).

Принцип формирования запросов наиболее легко освоить при использовании Мастера запросов.

Поставим задачу отобрать информацию по экзаменационным оценкам студентов по факультету № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1 ("Математика" в справочной таблице) с сортировкой данных по группам, в группах - в порядке уменьшения оценки.

Для этого выбираем на стандартной панели или в меню команду New, далее выбираем Query и нажимаем кнопку Query Wizard. В появившемся списке из трех пунктов: Cross-Tab Wizard, Graph Wizard и Query Wizard выбираем последний вариант - стандартный запрос.




На первом шаге Мастера необходимо выбрать таблицы и поля, которые следует включить в запрос. Если предварительно база данных не была открыта, следует ее выбрать с помощью кнопки рядом с полем списка Databases and tables. Выбор полей может быть выполнен из нескольких таблиц базы (рис. 6.12.).


Рис. 6.12.  Мастер запросов - шаг 1

На шаге 2 следует добавить в список связей выражение SPISOK.NZ = OCENKI.NZ, что Мастер сам предложит вам сделать.

На шаге 2а вам нужно ответить на вопрос, какие записи при объединении таблиц следует включать в результаты (join conditions - условия объединения):

only matching rows - отбираются только записи при их одновременном присутствии в обеих связанных таблицах для заданных условий отбора и связей (условие объединения Inner Join);

all rows from table SPISOK - отбираются все записи таблицы SPISOK, соответствующие условиям отбора, и связанные записи другой таблицы при их наличии (Left Outer Join);

all rows from table OCENKI- отбираются все записи таблицы OCENKI, соответствующие условиям отбора, и связанные записи другой таблицы при их наличии (Right Outer Join);

all rows from both tables - отбираются все записи таблиц SPISOK и OCENKI, соответствующие условиям отбора, независимо от наличия связанных записей другой таблицы (Full Join).

Выбираем первый вариант для нашего запроса.

На шаге 3 могут быть заданы условия отбора данных (количество условий - не более двух, в Конструкторе запросов или в тексте запроса можно увеличить их количество). Зададим условия - SPISOK.N_FCLT=1 and OCENKI.SEMESTR=1 (рис. 6.13.). В Мастере нельзя задать больше двух условий, в Конструкторе или тексте SQL-программы количество условий не ограничено.


Рис. 6.13.  Мастер запросов - шаг 3

Шаг 4 - задание условий сортировки данных. Здесь можно выбрать последовательно 3 поля таблиц, по которым следует сортировать данные, например, n_grup, ball - упорядочить по группам, внутри групп - по баллу в порядке уменьшения (Descending).

На шаге 4а можно задать процент или количество рассматриваемых записей, здесь мы оставим без изменений условие all records - все записи.



На последнем шаге 5 выберем вариант Save query and modify it in Query Designer - Сохранить запрос и модифицировать его в Конструкторе запросов, зададим путь и имя для сохранения файла запроса.

В результате на диске будет создан текстовый файл запроса с расширением *.qpr (например, query_s1.qpr), который может быть открыт как текстовый файл или в Конструкторе запросов с отображением всех условий запроса.

Как видим на рис. 6.14., в верхней половине Конструктора запросов показаны таблицы, используемые для отбора данных и связи между ними, в нижней части - присутствуют страницы для выбора полей таблиц (Fields), условий объединения (Join), отбора данных (Filter), упорядочения (Order By), группировки (Group By) и разное (Miscellaneous). Щелчок правой кнопкой мыши в окне вызовет контекстное меню, в котором можно выбрать позицию Output settings и задать тип сохранения результата отбора данных - Browse, Cursor, Table, Screen. По умолчанию используется режим Screen - данные сохраняются в курсоре (временной таблице, доступной только для чтения, автоматически уничтожающейся при завершении работы системы) и показываются на экране как Browse.


увеличить изображение
Рис. 6.14.  Конструктор запросов

Модифицируем запрос для отбора данных только по экзаменационным оценкам за 1 семестр 2005/2006 учебного года. Для этого на странице Filter добавим новые условия: semestr = 1, val(Ocenki.ball)>1, val(Ocenki.ball)<6 и YEAR(Ocenki.data_b) = 2006 (см. рис. 6.15.).


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

Текст запроса на языке SQL будет выглядеть следующим образом (в контекстном меню можно воспользоваться командой View SQL):

SELECT Spisok.n_fclt, Spisok.n_grup, Spisok.fio, Ocenki.semestr,; Ocenki.n_predm, Ocenki.ball; FROM ; STUDENTS!SPISOK ; INNER JOIN STUDENTS!OCENKI ; ON Spisok.nz = Ocenki.nz; WHERE Spisok.n_fclt = 1; {для всех условий задан одинаковый } AND Ocenki.semestr = 1; {приоритет (Pri.) равный 0} AND Ocenki.n_predm = 1; AND val(Ocenki.ball) > 1; AND val(Ocenki.ball) < 6; AND YEAR(Ocenki.data_b) = 2006; ORDER BY Spisok.n_grup, Ocenki.ball DESC



Выполнив запрос (кнопка Run на стандартной панели), мы получим результат отбора данных (рис. 6.16.).


Рис. 6.16.  Результаты отбора данных по запросу

Более сложный вариант - запрос с группировкой данных и расчетом групповых итогов. Поставим задачу показать средний балл для студенческих групп по экзаменационным оценкам для факультета № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1. Сделать это можно путем модификации в Конструкторе предыдущего запроса.

Далее уберем лишние поля на странице Fields. При группировке данных допускается отображение только сгруппированных или итоговых данных, таких как следующие:

значения столбцов группировки (входящих в предложение GROUP BY);расчетные значения для групп, такие, как SUM(°), AVG(°) и пр.

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

Оставим в списке полей только поле группировки - n_grup, и добавим новое поле - выражение для расчета средней оценки - AVG(VAL(ball). На странице Order By запишем одно условие - упорядочить по новому расчетному полю в порядке убывания. На странице Filter оставим все прежние условия отбора. Введем вывод результатов запроса в таблицу query_s2.dbf1)

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

SELECT Spisok.n_grup, AVG(VAL(Ocenki.ball)); FROM ; STUDENTS!SPISOK ; INNER JOIN STUDENTS!OCENKI ; ON Spisok.nz = Ocenki.nz; WHERE Spisok.n_fclt = 1; AND Ocenki.semestr = 1; AND Ocenki.n_predm = 1; AND VAL(Ocenki.ball) > 1; AND VAL(Ocenki.ball) < 6; AND YEAR(Ocenki.data_b) = 2006; GROUP BY Spisok.n_grup; ORDER BY 2 DESC; INTO TABLE query_s2.dbf

Результаты отбора данных по запросу показаны на рис. 6.17.


Рис. 6.17.  Отбор данных по запросу с группировкой

Результаты отбора данных могут быть показаны в виде диаграммы (объект Microsoft Graph). Для этого можно воспользоваться мастером построения диаграмм в VFP - в меню системы Tools - Wizards - All Wizards:, далее в окне полного списка Мастеров выбрать GraphWizard (см.


табл. "Полный список Wizard-ов в VFP 9.0"). Результат построения столбчатой диаграммы показан на рис. 6.18. (после дополнительного редактирования объекта в системе VFP).

"Полный список Wizard-ов в VFP 9.0"
Application Builder
Application Wizard
Cross-Tab Wizard
Database Wizard
Documenting Wizard
Form Wizard
Graph Wizard
Import Wizard
Label Wizard
Local View Wizard
Mail Merge Wizard
Microsoft SQL Server Upsizing Wizard
One-to-Many Form Wizard
One-to-Many Report Wizard
One-to-Many Report Wizard
Query Wizard
Remote View Wizard
Report Wizard
Table Wizard
Web Publishing Wizard
Web Services Publisher

Рис. 6.18.  Диаграмма, построенная по результатам запроса

Запрос может иметь несколько уровней группировки данных. Добавим в запроссправочные таблицы для показа названий факультетов и предметов. Усложним предыдущий запрос, добавив внешние уровни группировок по названиям факультетов и предметов, и уберем условия отбора данных по номерам факультетов и предметов. Расчет итогов будет выполняться с учетом всех уровней группировки, как показано в следующем примере запроса:

SELECT Fclt.name_f, Spisok.n_grup, Predmets.name_p,; AVG(VAL(Ocenki.ball)); FROM ; STUDENTS!SPISOK ; INNER JOIN STUDENTS!OCENKI ; ON Spisok.nz = Ocenki.nz ; INNER JOIN students!fclt ; ON Fclt.n_fclt = Spisok.n_fclt ; INNER JOIN students!predmets ; ON Predmets.n_predm = Ocenki.n_predm; WHERE Ocenki.semestr = ( 1 ); AND VAL(Ocenki.ball) > ( 1 ); AND VAL(Ocenki.ball) < ( 6 ); AND YEAR(Ocenki.data_b) = ( 2006 ); GROUP BY Fclt.name_f, Spisok.n_grup, Predmets.name_p; ORDER BY Fclt.name_f, Spisok.n_grup, Predmets.name_p, 4 DESC; INTO TABLE query_s3.dbf

Результаты отбора данных по запросу показаны на рис. 6.19.


Рис. 6.19.  Отбор данных по запросу с группировкой

На основе таблицы query_s3.dbf можно построить перекрестный запрос(Cross-Tab Wizard) для отображения в последующем данных на одной трехмерной диаграмме с осями X (Row) - группа, Y (Column) - предмет, Z (Data) - средний балл.


Страница 3 мастера с заданием этих параметров показана на рис. 6.20.


Рис. 6.20.  Страница 3 мастера Cross-Tab Wizard

Текст запросав системе VFP будет выглядеть следующим образом:

SELECT Query_s3.n_grup, Query_s3.name_p, AVG(Query_s3.avg_exp_4); FROM ; QUERY_S3.DBF; GROUP BY Query_s3.n_grup, Query_s3.name_p; ORDER BY Query_s3.n_grup, Query_s3.name_p; INTO TABLE q_cross.dbf DO (_GENXTAB) WITH 'Query' BROWSE NOMODIFY

Результат выполнения перекрестного запроса показан на рис. 6.21.


Рис. 6.21.  Данные перекрестного запроса

Для полученной таблицы можно построить трехмерную диаграмму с помощью Мастера GraphWizard, показанную на рис. 6.22. (после дополнительного редактирования ее в системе VFP).


Рис. 6.22.  Диаграмма, построенная по данным перекрестного запроса


Разработка отчетов


Для разработки отчетов - печатных документов, отражающих информацию базы данных, в системе VFP существует Конструктор отчетов (Report Designer) и Мастер отчетов (Report Wizard). Важным свойством отчетов является возможность группировки данных и получения итоговых данных для групп и всего отчета. При формировании отчетов можно задавать фильтр отбора необходимых данных либо формировать отчет на основе данных SQL-запроса или представления данных (View).

Наиболее просто для разработки основы отчета воспользоваться Мастером отчетов с последующей модификацией и дополнением отчета в Конструкторе.

Существует 2 типа Мастера отчетов:

One-to-Many Report Wizard - Мастер отчета, в котором для одной записи главной таблицы существует множество записей связанной с ней дочерней таблицы.

Report Wizard - Мастер простого отчета, но с возможностью задания группировки данных.

Поставим задачу разработать отчет, в котором показаны экзаменационные оценки всех студентов за зимнюю сессию 2005-2006 учебного года (с 10.01.2006 по 06.02.2006) с группировкой данных по факультетам, курсам, группам и в группе - по фамилиям студентов.

Как обычно, создание нового объекта начинаем, нажав кнопку New на стандартной панели инструментов, затем выбираем Report - Wizard - One-to-Many Report Wizard.

Далее на первом шаге Мастера (рис. 6.1) выбираем базу Students и поля главной таблицы базы (Spisok), которые мы хотим показать в отчете.


Рис. 6.1.  Шаг 1 Мастера разработки отчета

На втором шаге (рис. 6.2) выбираем поля дочерней таблицы - Ocenki.


Рис. 6.2.  Шаг 2 Мастера разработки отчета

Третий шаг - подтверждаем, что эти таблицы связаны по значению поля NZ.

На четвертом шаге необходимо задать порядок сортировки данных в отчете. Мастер позволяет задать не более трех значений полей для сложной сортировки (с созданием соответствующего сложного индекса). Выберем поля N_fclt, Kurs, N_grup с сортировкой в порядке возрастания (Ascending).

Пятый шаг (рис. 6.3) - задаем стиль отчета, расположение его на листе (вертикальный лист - Portrait или горизонтальный - Landscape) и суммарные параметры - расчет среднего значения (Avg) для поля Ball.



Рис. 6.3.  Шаг 5 Мастера разработки отчета

На последнем, 6- м шаге задаем заголовок отчета, выбираем команду Сохранить отчет и модифицировать его в Конструкторе отчетов - Save report and modify it in Report Designer и после нажатия на кнопку Finish задаем имя (Spisok) и место сохранения файлов отчета (будут созданы два файла с одинаковым именем и расширениями *.frt и *.frx).

В окне Report Designer мы увидим отчет, показанный на рис. 6.4.


увеличить изображение
Рис. 6.4.  Окно Конструктора отчетов

В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз (Title и Summary), в начале каждой страницы (Page Header) или в конце каждой страницы (Page Footer), в начале каждой группы (Group Header, групп может быть много) и в конце каждой группы (Group Footer), а также зона показа информации каждой записи таблицы (Detail).

Особенность отчета, созданного Мастером, - в нем присутствуют зоны итогов для группы NZ и всего отчета, но поля для расчета средней оценки в них нет, хотя мы просили Мастера это сделать (см. рис. 6.3.). Заданное условие не было выполнено, т.к. поле ball имеет текстовый тип, а мы задали функцию для работы с числами. Для вычисления средней оценки придется самим добавить новое поле в отчет с расчетом средней оценки после преобразования в этом поле текстового значения в числовое с использованием функции Val(ball).

Контекстное меню для Конструктора отчетов (щелчок правой кнопкой мыши на пустом месте окна Report Designer ) содержит следующие пункты (рис. 6.5.):


Рис. 6.5.  Контекстное меню

Paste - вставить;Run Report: - напечатать отчет на принтере;Print Preview - предварительный просмотр отчета на экране и печать на принтере;Data Environment: - окно данных, связанных с отчетом;Optional Bands: - страница свойств зон Title, Summary и Detail в окне свойств отчета;Data Grouping: - страница группировки данных в окне свойств отчета;Variables: - страница переменных в окне свойств отчета;Properties: - окно свойств отчета.



Для использования в отчете названий факультетов, специальностей и предметов необходимо открыть окно Data Environment, добавить в него справочные таблицы базы и правильно установить связи между ними, как показано на рис. 6.6. (для постоянных связей базы иногда возникает неправильное направление, связь должна идти от поля главной таблицы к индексу дочерней).


Рис. 6.6.  Окно данных отчета

Для связи между таблицами Spisok и Ocenki должно быть установлено свойство OneToMany = .T.

Для таблицы Spisok в окне Properties для Data Environment зададим фильтр VAL(Ocenki.ball)>1 AND VAL(Ocenki.ball)<6 AND Ocenki.data_b=>{^2006/01/10} AND Ocenki.data_b<={^2006/02/06} - условие отбора студентов, у которых есть оценки (от 2 до 5, среди баллов могут быть отметки о неявке (Н), незачете (1), зачете (6) и пр.) в заданном периоде (в фильтре используется формат даты в виде {^ГГГГ/ММ/ДД}). Установленный фильтр имеет особенность: фильтр задан для таблицы Spisok, а его логическое выражение построено из значений полей таблицы Ocenki, что не совсем обычно, но допустимо при наличии связи между этими таблицами. Если данное выражение написать как фильтр для таблицы Ocenki, в отчет могут попасть студенты, у которых нет оценок за заданный период, и средняя оценка будет рассчитана неправильно.

Для дальнейшего оформления отчета необходимо присутствие на экране двух панелей инструментов - Report Controls и Layout.

Первая панель содержит те объекты, которые можно располагать на отчетах (рис. 6.7.).


Рис. 6.7.  Панель объектов отчета

Так как наша задача - представить отчет с группировкой и расчетом средних оценок по факультетам, курсам, группам, необходимо добавить новые группы в отчет и модифицировать, соответственно, индексный файл главной таблицы. Выбрав пункт Data Grouping в контекстном или главном меню (раздел Report), добавим необходимые группы (рис. 6.8.).


Рис. 6.8.  Страница группировки данных в окне свойств отчета

Далее перенесем номера факультетов, курсов и групп в зоны заголовков соответствующих групп, добавим поля с названиями из справочников факультетов, специальностей и предметов, добавим итоговые поля для расчета средних оценок (val(ocenki.ball)).


Новые поля можно создать с использованием соответствующей кнопки на панели Report Controls (рис. 6.7.) или копированием имеющихся в отчете полей (для сохранения заданного шрифта) с изменением данных, которые показывает поле (свойство Expression поля).

В свойствах итоговых полей (окно свойств выбранного поля открывается двойным кликом на нем, или выбором пункта Properties в его контекстном меню, или на клавиатуре Alt+Enter) в разделе Calculate следует правильно указать в пункте Calculation Type - Average (среднее) и в пункте Reset based on - соответствующую группу или End of Report для зоны Summary (см. рис. 6.9.).




Рис. 6.9.  Окно свойств поля отчета. Страницы General и Calculate

Для таблицы Spisok следует модифицировать созданный Мастером сложный индекс с именем WIZARD_1 - добавить в него поле FIO: STR(n_fclt,2,0) + STR(kurs,1,0) + n_grup + fio.

Отчет в Конструкторе будет иметь вид, показанный на см. рис. 6.10..


увеличить изображение
Рис. 6.10.  Окончательный вид отчета в Конструкторе

При предварительном просмотре (Preview) или после печати на принтере мы получим отчет, показанный на рис. 6.1. (примечание: перед формированием отчета откройте таблицу Ocenki, иначе заданный фильтр для таблицы Spisok вызовет сообщение об отсутствии алиаса Ocenki).


увеличить изображение
Рис. 6.11.  Фрагмент отчета, напечатанного на принтере


Разработка проекта и исполняемой программы


Основой разработки программ для операционной системы Microsoft Windows в большинстве современных систем (VFP, Delphi, Visual C++, Visual Basic и пр.) является проект (Project).

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

Создать новый проект можно с помощью Мастера разработки проекта или самостоятельно. Более целесообразно использовать Мастер, зачастую с этого и следует начинать при разработке сложной системы (после разработки базы данных - сразу создать проект с помощью Мастера системы VFP 6.0 -7.0 - этот Мастер при генерации стандартного проект предложит создать также необходимые вам экранные формы, панели инструментов, отчеты, меню и пр.).

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

Создаем новый файл проекта (New - Project - New file), выбираем для нее папку и даем имя Students.pjx. В соответствующие группы пустого окна проекта добавляем созданные нами ранее экранную форму и отчет. Если вы хотите добавить в проект базу данных, она должна быть помечена как внешняя (

Exclude). После этого окно проекта будет иметь вид, приведенный на рис. 6.23. (форма Spisok.scx выделена в нем жирно как головная программа).


Рис. 6.23.  Диаграмма, построенная по данным перекрестного запроса

На странице All представлены все виды компонентов, которые могут входить в состав проекта. При работе с большими проектами удобнее пользоваться отдельными страницами проект (Data, Documents, Classes, Code, Other).

Справа в окне проект расположена группа кнопок, нижняя из которых - Build: - компиляция проекта. Если мы нажмем на нее, появится список для выбора типа компиляции проекта (для тех, кто забыл: компиляция - перевод исходного текста программы на машинный язык, исполняемый в данной операционной системе).


Use navigation menu - показывать навигационное меню;

Appear in File New dialog - форма появляется в пункте New меню и панели инструментов;

Appear in File Open dialog - форма появляется в пункте Open

На странице 5 Reports следует указать Name - название, которое будет показано для отчета в окне Start, и Appears in Print Report dialog - показывать или нет отчет в диалоге печати отчетов.

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

Как правило, экранные формы и отчеты в дальнейшем подвергаются автором значительной модификации.

Особенность разработанной таким образом программы: на экранной форме нет навигационных кнопок и кнопок редактирования. Эти функции берут на себя панели инструментов (стандартная и навигационная), которые взаимодействуют с формами. Недостаток данного типа проекта - большой размер исполняемого файла в результате использования значительного количества дополнительных библиотек VFP.



Если скомпилировать такой проект в exe-файл (рис. 6.24.), на диске появится файл students.exe, но для данного состава проекта запускаться и нормально работать он будет только из системы VFP (из Windows он запустится и тут же завершит свою работу), т.к. в нем нет головной программы с командой запуска процесса обработки событий read events.


Рис. 6.24.  Компиляция проекта

Для получения программы, работающей в операционной системе Windows, нужно сделать следующее:

    в окне проекта выбираем раздел Code - Programs (программные файлы), нажимаем New:, в чистом окне программы пишем 2 строки: do form spisok; read events

    сохраняем файл в своей папке с названием program1 или с другим названием и указываем в проекте, что это головная программа (правый клик на файле и выбрать команду Set Main); открываем форму Spisok и окно свойств, в окно события формы Destroy Event вписываем фразу: clear events (чтобы после закрытия формы завершался процесс обработки событий и завершалась работа программы) - рис. 6.25.



Рис. 6.25.  Процедура Destroy Event для формы Spisok

Далее снова компилируем программу и проверяем ее работу, запуская ее из папки Windows. Мы увидим, что окно экранной формы при запуске программы появляется внутри другого окна, имеющего некоторое стандартное меню. Если вы хотите, чтобы на экране было только окно вашей формы Spisok, можно изменить свойство формы ShowWindow на 2-As Top-Level Form и добавить первой строкой в головной файл проекта команду: _SCREEN.Visible=.F. (Вместо 2-го пункта можно создать в папке программы файл config.fpw и в нем написать строку SCREEN = OFF). В результате мы получим небольшую по размеру (около 250 Кб) программу, имеющую все основные возможности для работы с базой данных. Для запуска такой программы на другом компьютере потребуется сама база данных, файл этой программы (с расширением *.exe) и в доступном каталоге (например, Windows - System32) библиотечные файлы VFPVersionNumberR.dll and VFPVersionNumberRRUS.dll (для 9-й версии Vfp9r.dll - размер 4,49 Мб и Vfp9rrus.dll - 1,18 Мб).

Использование запросов


Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована возможность установить фильтр для таблицы базы данных или формы (в пункте меню Записи). В том же пункте меню есть раздел Расширенный фильтр, который открывает окно Конструктора запросов. Кроме того, Конструктор запросов фактически уже использовался при описании источника записей для отчета (см. рис. 7.25.).

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

Запросы в системе Access бывают нескольких видов:

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

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

На первом шаге следует выбрать таблицы и поля, которые нужно включить в запрос. Выбор полей может быть выполнен из нескольких таблиц базы.
Закроем окно конструктора и выполним запрос командой Открыть или двойным щелчком мышью. Результат отбора данных будет показан на экране в виде таблицы (рис. 7.32.). Следует помнить, что редактирование данных этой таблицы приведет к изменению информации в таблицах базы данных!


увеличить изображение
Рис. 7.32.  Результаты выполнения запроса

Результаты выполнения запроса или данные таблиц можно представить в виде диаграмм и графиков. Создадим запрос, в котором покажем в графическом виде средний балл по студенческим группам по предмету "Математика" (№ предмета = 1). Для группировки данных, как отмечалось выше, в пункте "Вид" меню системы ставим галочку у строки "Групповые операции".

Получим следующий текст запроса:

SELECT Spisok.N_GRUP, OCENKI.N_PREDM, Avg(OCENKI.BALL) AS [Avg-BALL] FROM Spisok INNER JOIN OCENKI ON Spisok.NZ = OCENKI.NZ GROUP BY Spisok.N_GRUP, OCENKI.N_PREDM HAVING (((OCENKI.N_PREDM)=1));

Для представления данных в виде графика в меню Вид выбираем пункт Сводная диаграмма, после чего открывается окно Построителя диаграмм. Методы оформления диаграмм аналогичны использованию объекта Диаграмма Microsoft Graph в программах Microsoft Word или Excel. На рис. 7.33. показана диаграмма для приведенного выше запроса. На рис. 7.34. приведена трехмерная диаграмма для запроса следующего вида:

SELECT DISTINCTROW FCLT.NAME_F, PREDMETS.NAME_P, Avg(OCENKI.BALL) AS [Avg-BALL] FROM PREDMETS INNER JOIN ((Spisok INNER JOIN OCENKI ON Spisok.NZ = OCENKI.NZ) INNER JOIN FCLT ON Spisok.N_FCLT = FCLT.N_FCLT) ON PREDMETS.N_PREDM = OCENKI.N_PREDM GROUP BY FCLT.NAME_F, PREDMETS.NAME_P;


Рис. 7.33.  Результаты выполнения запроса с группировкой данных, представленные в виде диаграммы


Рис. 7.34.  Результаты выполнения запроса с группировкой данных, представленные в виде трехмерной диаграммы

С использованием запросов других видов одной командой можно изменять (команда SQL UPDATE) либо удалять (команда SQL DELETE) данные множества записей таблицы, отобранных по какому-либо условию, а также добавлять записи из других таблиц (команда SQL INSERT).


Компиляция базы данных (MDE-файл)


База данных Microsoft Access может быть сохранена в виде MDE-файла.

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

При сохранении базы в формате MDE будут скомпилированы все программные модули, удалены все исходные тексты программ, будет сжата. Программы Visual Basic будут по-прежнему выполняться, но их нельзя будет просматривать или изменять. Из-за удаления исходных кодов уменьшится размер базы данных, т.е. будет оптимизировано использование памяти, что повысит быстродействие базы данных .

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

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

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

Создание, просмотр, изменение форм, отчетов, модулей с использованием Конструкторов и Мастеров.Создание и изменение программных модулей.Создание, удаление и изменение ссылок на библиотеки объектов или базы данных.



Общая характеристика системы


Система Microsoft Access является одним из основных компонентов Microsoft Office и предназначена для работы с реляционными базами данных. Особенность данной СУБД: вся информация базы данных хранится в одном файле (*.mdb). Кроме информации таблиц, в этом же файле сохраняются компоненты приложения для работы с базой данных - экранные формы, отчеты, запросы, программные модули.

Для работы с базой данных система использует Microsoft Jet database engine - систему управления базами данных, извлекающую и сохраняющую данные в пользовательских и системных задачах. Ядро базы данных Microsoft Jet можно рассматривать как компонент диспетчера данных, с помощью которого строятся остальные системы доступа к данным, такие как Microsoft Access и Microsoft Visual Basic.

Язык написания программных модулей для работы с базой данных - Microsoft Visual Basic for Applications (VBA).

Основные возможности системы при работе с базами данных приведены в табл. 7.1.

Таблица 7.1. Спецификации системы Microsoft Office Access 2003

АтрибутМаксимальное значениеБаза данныхТаблицаЗапросФорма и отчетМакрос
Размер файла базы данных (*.mdb)2 Гбайт за вычетом места, необходимого системным объектам
Число объектов в базе данных32 768
Модули (включая формы и отчеты), свойство Наличие модуля (HasModule) которых имеет значение True)1 000
Число знаков в имени объекта64
Число знаков в пароле14
Число знаков в имени пользователя или имени группы20
Число одновременно работающих пользователей255
Число знаков в имени таблицы64
Число знаков в имени поля64
Число полей в таблице255
Число открытых таблиц2048 (фактическое число может быть меньше из-за внутренних таблиц, открываемых Microsoft Access)
Размер таблицы2 Гбайт за вычетом места, необходимого системным объектам
Число знаков в текстовом поле255
Число знаков в поле MEMO65 535 при вводе данных через интерфейс пользователя;1 Гбайт для хранения знаков при программном вводе данных
Размер поля объекта OLE1 Гбайт
Число индексов в таблице32
Число полей в индексе10
Число знаков в сообщении об ошибке255
Число знаков в условии на значение записи2048
Число знаков в описании таблицы или поля255
Число знаков в записи (кроме полей MEMO и полей объектов OLE)2000
Число знаков в значении свойства поля255
Число установленных связей32 на одну таблицу за вычетом числа индексов, находящихся в таблице для полей или сочетаний полей, которые не участвуют в связях
Число таблиц в запросе32
Число полей в наборе записей255
Размер набора записей1 Гбайт
Предел сортировки255 знаков в одном или нескольких полях
Число уровней вложения запросов50
Число знаков в ячейке на бланке запроса1024
Число знаков для параметра в запросе с параметрами255
Число операторов AND в предложении WHERE или HAVING99
Число знаков в инструкции SQLприблизительно 64000
Число знаков в надписи2048
Число знаков в поле65535
Ширина формы или отчета22 дюйма (55,87 см)
Высота раздела22 дюйма (55,87 см)
Высота всех разделов плюс заголовки разделов (в режиме конструктора)200 дюймов (508 см)
Число уровней вложения форм или отчетов7
Число полей или выражений, которые можно отсортировать или сгруппировать в отчете10
Число заголовков и примечаний в отчете1 заголовок/примечание отчета; 1 заголовок/примечание страницы; 10 заголовков/примечаний групп
Число печатных страниц в отчете65536
Число элементов управления и разделов, которые можно добавить за время существования формы или отчета754
Число знаков в инструкции SQL, работающей в качестве свойства Источник записей (RecordSource) или Источник строк (RowSource) формы, отчета или элемента управления (оба .mdb и .adp)32750
Число макрокоманд в макросе999
Число знаков в условии255
Число знаков в комментарии255
Число знаков в аргументе макрокоманды255


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

Таблица 7.2. Типы данных системыТип данных полейТип данных в VBAИспользованиеРазмер
ТекстовыйStringТекст, состоящий из любых символов в кодировке Unicode (2 байта на символ)До 255 символов
Поле МЕМОStringТекст в кодировке UnicodeДо 64000 символов
Числовой(Байт, Целое, Длинное целое, Одинарное с плавающей точкой, Двойное с плавающей точкой, Код репликации, Действительное)Byte, Integer,Long,Single,DoubleЧисловые данные1, 2, 4 или 8 байтов. 16 байтов только для кодов репликации (GUID)
Дата/времяПолный формат даты. Длинный формат даты. Средний формат даты. Краткий формат даты. Длинный формат времени. Средний формат времени. Краткий формат времениDateДаты и время. 31.12.04 23:55:5931 декабря 2004 г.31-дек-0431.12.0423:55:5911:5523:558 байтов(при активации поля всегда показывает полный формат даты)
ДенежныйCurrencyЗначения валют. Денежный тип используется для предотвращения округлений во время вычислений. Предполагает до 15 символов в целой части числа и 4 - в дробной8 байтов
СчетчикАвтоматическая вставка последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи.4 байта. 16 байтов только для кодов репликации (GUID)
ЛогическийBooleanПоля, содержащие только одно из двух возможных значений, таких как Да/Нет, Истина/Ложь, Вкл/Выкл.1 бит
Поле объекта OLEStringОбъекты (например, документы Microsoft Word, электронные таблицы Microsoft Excel, рисунки, звуки и другие двоичные данные), созданные в программах, использующих протокол OLE. Объекты могут быть связанными или внедренными.До 1 гигабайта (ограничено объемом диска)
ГиперссылкаStringПоле, в котором хранятся гиперссылки. Гиперссылка может иметь вид пути UNC, либо URL-адресаДо 64000 символов
Мастер подстановокСоздает поле, позволяющее выбрать значение из другой таблицы или из списка значений, используя поле со списком. При выборе данного типа запускается Мастер для определения этого поляТот же размер, который имеет первичный ключ, являющийся полем подстановок


Система Microsoft Access имеет собственные средства для разграничения прав доступа пользователей к базе данных.

Простейшим способом ограничения доступа к базе данных является установка пароля для открытия базы данных (*.mdb). После установки пароля при каждом открытии базы данных будет появляться диалоговое окно, в которое требуется ввести пароль. Этот способ достаточно надежен (Microsoft Access шифрует пароль, поэтому к нему нет доступа при непосредственном чтении файла базы данных), но он действует только при открытии базы данных. После открытия базы все объекты становятся доступными для пользователя (пока не определены другие типы защиты, описанные ниже в этом разделе). Для базы данных, которая совместно используется небольшой группой пользователей или на автономном компьютере, обычно оказывается достаточно установки пароля.

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

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

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

При запуске Microsoft Access от пользователя требуется идентифицировать себя и ввести пароль. Microsoft Access по умолчанию создает две группы: администраторы (группа Admins) и простые пользователи (группа Users). Допускается определение других групп и пользователей.

Члены группы Admins имеют разрешения на доступ ко всем объектам базы данных. Другим группам и пользователям могут предоставляться разрешения на доступ только к отдельным объектам базы данных. Типовые разрешения на доступ для группы Users могут включать "Чтение данных" и "Обновление данных" для таблиц и запросов, а также "Открытие/запуск" для форм и отчетов.


Проект Microsoft Access (ADP)


Проект Microsoft Access (*.adp) является файлом данных Microsoft Access, обеспечивающим эффективную работу с базами данных Microsoft SQL Server. Используя проект Microsoft Access, можно создавать приложения в архитектуре "клиент/сервер" так же легко, как приложения файлового сервера.

Приложение в архитектуре "клиент/сервер" может быть традиционным решением, основанным на формах и отчетах, или решением на базе Интернета, использующим страницы доступа к данным.

Проект Microsoft Access можно подключить к удаленной базе данных Microsoft SQL Server, локальной базе данных Microsoft SQL Server или к локальной установке Microsoft SQL Server 2000 Desktop Engine (MSDE).

Файл проекта не содержит данные или объекты определения данных, такие как таблицы и представления.

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

Краткие сведения о работе с проектом Microsoft Access будут даны в следующей лекции, которая посвящена системе Microsoft SQL Server.



Разработка экранных форм для работы с базой данных


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

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

Для разработки экранной формы в окне базы данных выбираем объект Формы и на странице форм - режим Создание формы с помощью Мастера. Далее следует ответить на ряд вопросов Мастера:

    выберите поля для формы - выбираем все поля таблицы SPISOK и все поля таблицы OCENKI (для последней таблицы поле NZ расположим в конце списка, оно будет заполняться автоматически; добавляем его, чтобы убедиться, что на экране мы видим оценки только одного студента);выберите вид представления данных - выбираем подчиненные формы, т.е. расположение данных главной таблицы и связанной с ней на одной форме;выберите внешний вид подчиненной формы - выбираем ленточный;выберите требуемый стиль - выбираем стандартный стиль;задайте имена форм - задаем для главной формы название Студенты, для подчиненной формы Оценки студента и на том же экране ниже выбираем пункт Изменить макет формы, после чего нажимаем на кнопку Готово.

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


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

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

Для разработки экранной формы в окне базы данных выбираем объект Формы и на странице форм - режим Создание формы с помощью Мастера. Далее следует ответить на ряд вопросов Мастера:

    выберите поля для формы - выбираем все поля таблицы SPISOK и все поля таблицы OCENKI (для последней таблицы поле NZ расположим в конце списка, оно будет заполняться автоматически; добавляем его, чтобы убедиться, что на экране мы видим оценки только одного студента);выберите вид представления данных - выбираем подчиненные формы, т.е. расположение данных главной таблицы и связанной с ней на одной форме;выберите внешний вид подчиненной формы - выбираем ленточный;выберите требуемый стиль - выбираем стандартный стиль;задайте имена форм - задаем для главной формы название Студенты, для подчиненной формы Оценки студента и на том же экране ниже выбираем пункт Изменить макет формы, после чего нажимаем на кнопку Готово.

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





Рис. 7.10.  Экранная форма, созданная с помощью Мастера

На полученной форме не все надписи полностью видны, расположение полей тоже можно улучшить.

Для формы и всех ее элементов можно открыть окно Свойства, щелкнув правой кнопкой мыши на любом объекте и выбрав в контекстном меню слово Свойства (рис. 7.11.). Кроме того, в контекстном меню присутствуют такие важные при оформлении объектов возможности, как "Выровнять" - полезно для выравнивания группы объектов, "Размер", "Цвет:", "Оформление", "Условное форматирование".




Рис. 7.11.  Окно свойств для объекта Форма, страницы Макет и Данные

Все свойства в окне разбиты на группы:

Макет - расположение, шрифт, цвет и прочее, связанное с внешним видом объекта;

Данные - в этом разделе важнейшее свойство - Данные или Источник записей - для объектов, связанных с редактированием каких-либо данных;

События - методы, т.е. процедуры (программы), выполняющиеся для объекта при наступлении определенных событий (Загрузка, Открытие, До обновления, После обновления и пр.);

Другие - прочие свойства.

На экранной форме присутствуют элементы (объекты) следующих типов: Надпись - текст на форме, обычно не изменяющийся. Главные свойства этого объекта присутствуют на странице Макет окна свойств (рис. 7.12.).

Поле - поле редактирования, связанное с полем базы данных или переменной. Главное свойство этого объекта - строка Данные на странице Данные окна свойств (рис. 7.13.).


Рис. 7.12.  Окно свойств объекта типа Надпись


Рис. 7.13.  Окно свойств объекта типа Поле

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

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


рис. 7.14.).


Рис. 7.14.  Окно свойств объекта типа Поле со списком


Рис. 7.15.  Панель элементов экранной формы

Кроме того, на форме могут присутствовать и другие объекты, которые можно добавлять, используя кнопки Панели элементов (рис. 7.15.), список типов объектов приведен ниже.

Группа переключателей, Выключатель, Переключатель, Кнопка - кнопки и группы кнопок разного вида, связанные с выполнением определенных процедур (5-7 и 11 кнопки на Панели). При выборе объекта Кнопка запускается Мастер, который предложит вам набор стандартных кнопок перехода по записям таблицы, обработки записей (восстановить, дублировать, печатать и пр.), работы с формой, с отчетами (печатать, просмотреть, отправить в файл или по почте), работы с приложениями и разное. Кнопки можно создать с помощью Мастера, при этом программный код, связанный с их действием, уже будет присутствовать (рис. 7.16.).


Рис. 7.16.  Окно Мастера создания кнопок

Флажок - поле, связанное обычно с полем таблицы логического типа, в котором стоит галочка или нет (6-й элемент Панели).Список - список данных для выбора одного из значений (10).Рисунок - вставка рисунка в форму (12).Свободная рамка объекта - любой объект Windows-приложений, редактирование которого будет возможно вызовом соответствующего приложения (13).Присоединенная рамка объекта - для работы с полями таблиц типа "поле объекта OLE" (14).Набор вкладок - многостраничная форма (16).Линия, Прямоугольник - элементы оформления (18, 19).

Для использования экранной формы нужно запустить ее в работу. Для этого закроем окно конструктора и выберем команду Открыть формы Студенты. Вид формы при работе с базой данных приведен на рис. 7.17.


Рис. 7.17.  Работа с базой данных с использованием экранной формы

В данном режиме можно редактировать существующие записи, добавлять новые в список студентов и список оценок для каждого студента. Для удаления записей можно добавить с помощью Мастера кнопку категории Обработка записей с действием Удалить запись на основную форму.


Разработка отчетов


Для разработки печатных форм - отчетов, отражающих информацию базы данных - в системе Access можно использовать режим Создание отчета с помощью Мастера раздела базы Отчеты, с усовершенствованием отчета в дальнейшем в режиме Конструктора отчетов. Отчеты могут быть созданы на основе всей информации, присутствующей в таблицах базы, но чаще для отчетов необходимо отобрать нужную информацию из базы с использованием SQL-запроса и на основе его создать отчет. Важным свойством отчетов является возможность группировки данных и получения итоговых данных для групп и всего отчета.

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

Для этого выбираем раздел Отчеты и режим Создание отчета с помощью Мастера. На первом шаге Мастера выбираем поля главной таблицы базы (SPISOK), которые мы хотим показать в отчете, и все поля дочерней таблицы оценок (OCENKI) (рис. 7.20.).


Рис. 7.20.  Выбор полей для отчета в Мастере отчетов

На втором шаге Выберите вид представления данных - выбираем первый вариант, когда выделена таблица SPISOK.

На третьем шаге задаем группировку данных по факультетам, курсам и группам. Более трех уровней группировки Мастер задать не позволяет (рис. 7.21.).


Рис. 7.21.  Группировка данных в отчете

Сортировку на следующем шаге не задаем.

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

Полученный отчет в режиме Конструктора представлен на рис. 7.22.


увеличить изображение
Рис. 7.22.  Отчет, созданный с помощью Мастера

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

В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз (Заголовок отчета и Примечание отчета), в начале и в конце каждой страницы (Верхний колонтитул и Нижний колонтитул), в начале и в конце каждой группы (Заголовок группы и Примечание группы, групп может быть много) и для каждой записи таблицы (Область данных).
Зоны Примечания: более правильно было бы назвать Итоги:, т.к. здесь можно поместить поля общих итогов (сумма, среднее и пр.) для группы или всего отчета.

Полученный отчет можно просмотреть на экране, отправить на принтер (например, с использованием соответствующих кнопок на стандартной панели инструментов), в Microsoft Word или Excel (из режима предварительного просмотра).

Вид отчета в режиме предварительного просмотра приведен на рис. 7.23.


Рис. 7.23.  Отчет в режиме предварительного просмотра

Созданный Мастером отчет весьма несовершенен и излишне приукрашен жирными линиями, крупным шрифтом. В отчет необходимо добавить названия факультетов, специальностей и предметов и изменить их подписи. Для добавления новых объектов следует использовать "Панель элементов" или окно "Список полей" (главное меню "Вид" - "Список полей"), для модификации - окно свойств объекта и контекстное меню, для настройки параметров страницы (полей и размера бумаги) следует воспользоваться соответствующим пунктом в разделе Файл главного меню системы.

Для использования в отчете данных справочных таблиц их следует включить в Источник записей окна свойств отчета (см. рис. 7.24.). После нажатия на кнопочку с изображением трех точек откроется окно Построителя запросов, которое после добавления нужных таблиц будет иметь вид, показанный на рис. 7.25. Для добавления таблиц в запрос (показаны в верхней части экрана Построителя) можно воспользоваться контекстным меню. После этого нужно добавить 3 поля - NAME_F, NAME_P и NAME_S в список используемых полей в нижней части экрана. Далее следует закрыть окно Построителя запросов с сохранением изменений.


Рис. 7.24.  Окно свойств отчета, страница Данные


Рис. 7.25.  Построитель запросов для свойства "Источник записей" отчета

После добавления новых таблиц в окне "Список полей" станут доступны для использования новые поля данных. Нам необходимо добавить поля названий из справочных таблиц.


Для этого можно использовать 3 способа:

    Перетащить мышкой названия поля из окна "Список полей" в нужное место отчета в Конструкторе.Выбрать кнопку "Поле" в Панели элементов, щелкнуть мышкой на том месте отчета, где должно располагаться новое поле, задать его главное свойство (в окне Свойства) - "Данные" (выбором из раскрывающегося списка) - соответствующее поле таблицы базы данных и другие свойства, связанные с внешним видом; подпись для данных следует удалить.Скопировать существующее поле отчета (например, N_FCLT) и задать для него новое свойство "Данные".


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

Кроме того, в окне "Сортировка и группировка" (его можно открыть из контекстного меню или пункта "Вид" главного меню) зададим наличие Примечаний для всех групп (см. рис. 7.26.).


Рис. 7.26.  Окно "Сортировка и группировка" отчета

В зоны примечаний поместим вычисляемые поля, которые будут показывать средние оценки для студента, группы, факультета и для всего отчета. При создании вычисляемых полей проще всего скопировать поле BALL из зоны "Область данных" в зону "Примечание группы:", далее перейти в окно свойств этого объекта и в пункте Данные нажать на кнопку с многоточием, после чего откроется окно Построителя выражений, где можно найти в списке функций AVG (среднее) и задать выражение AVG (BALL) (рис. 7.27.).


Рис. 7.27.  Создание вычисляемого поля для зоны примечаний отчета

Далее следует поместить в отчет Надпись "средняя оценка студента", после чего скопировать это поле и надпись в другие зоны отчета. Вид отчета после модификации приведен на рис. 7.28.


увеличить изображение
Рис. 7.28.  Отчет после его модификации в Конструкторе

Отчет при печатании на бумаге будет выглядеть, как показано на рис. 7.29.


увеличить изображение
Рис. 7.29.  Окончательный вариант отчета, напечатанный на принтере


Создание базы данных


Процесс создания базы данных рассмотрим на примере описанной ранее (лекция 3) модели базы данных информационной системы "Контингент студентов университета".

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


Рис. 7.1.  Создание файла

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

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

Далее необходимо задать структуру таблиц в соответствии с описанной ранее концептуальной моделью. Можно также воспользоваться сгенерированной ранее системой Case Studio - программой создания таблиц базы данных, однако, далее описан режим создания таблиц с помощью Конструктора. Умение использовать этот режим необходимо каждому пользователю для создания новых таблиц и модификации структуры уже существующих.

Выберем пункт Создание таблицы в режиме конструктора (рис. 7.2) и опишем структуру главной таблицы базы данных, т.е. зададим имя, тип, размер каждого поля таблицы, а также первичный ключ (если необходимо), индексированные поля и подпись (рис. 7.3). Имена полей лучше писать латинскими буквами, в одно короткое слово - для удобства использования их в запросах и программах, работающих с базой данных; задание подписей для полей облегчает разработку экранных форм и отчетов.


Рис. 7.2.  Окно базы данных


Рис. 7.3.  Описание структуры таблицы в конструкторе

Структура таблицы SPISOK приведена в табл. 7.3.

Таблица 7.3. Структура таблицы SPISOK

Имя поляТип данныхРазмер поляИндексированное полеПодпись
NZТекстовый8Да (Совпадения не допускаются)№ зачетки
FIOТекстовый45Фамилия, имя, отчество
DATA_PДата/времяКраткий формат датыДата поступления
N_FCLTЧисловойБайтДа (Совпадения допускаются)Факультет
N_SPECTТекстовый7Да (Совпадения допускаются)Специальность
KURSЧисловойБайтКурс
N_GRUPТекстовый10Группа
N_PASPТекстовый10Номер паспорта


Для поля NZ следует задать свойство "Ключевое поле", т.к. номер зачетки - уникальный для каждого студента и однозначно его идентифицирует в таблице базы. По окончании описания структуры таблицы даем команду Сохранить (на стандартной панели инструментов, в меню - раздел Файл, или при закрытии окна конструктора) и задаем название таблицы - SPISOK.

Аналогичным образом создаем в базе данных справочник факультетов с именем файла FCLT, структура его приведена в табл. 7.4.

Таблица 7.4. Структура таблицы FCLTИмя поляТип данныхРазмер поляИндексированное полеПодпись
N_FCLTЧисловойБайтДа (Совпадения не допускаются)Номер факультета
NAME_FТекстовый120Название факультета
Таблица 7.6. Структура таблицы OCENKIИмя поляТип данныхРазмер поляИндексированное полеПодпись
NZТекстовый7Да (Совпадения допускаются)Номер зачетки
SEMESTRЧисловойБайтСеместр
N_PREDMЧисловойЦелоеДа (Совпадения допускаются)Предмет
BALLТекстовый1Оценка
DATA_BДата/времяКраткий форматДата
PREPODТекстовый45Преподаватель
Таблица 7.7. Структура таблицы PREDMETSИмя поляТип данныхРазмер поляИндексированное полеПодпись
N_PREDMЧисловойЦелоеДа (Совпадения не допускаются)Номер предмета
NAME_PТекстовый120Название предмета
Далее задаем связи Один ко многим между таблицами в базе, открыв окно Схема данных (выбрав эту команду в контекстном меню для окна базы данных) и перетаскивая название поля первичного ключа к аналогичному полю другой таблицы (см. рис. 7.4.). При этом задаем в окне Изменение связей (см. рис. 7.5.) условия соблюдения ссылочной целостности данных: каскадное обновление связанных полей и каскадное удаление связанных записей.


Рис. 7.4.  Схема базы данных


Рис. 7.5.  Задание условий соблюдения ссылочной целостности данных


Стандартный режим работы с таблицами


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

Для работы с информацией таблицы базы данных (добавление, редактирование и удаление записей) следует выбрать ее в разделе объектов базы данных "Таблицы" (см. рис. 7.6.) и двойным щелчком мыши открыть.


Рис. 7.6.  База данных

Таблица откроется в стандартном режиме работы с информацией, как показано на рис. 7.7.


Рис. 7.7.  Стандартный режим работы с таблицей базы данных

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

В системе Microsoft Access существуют также дополнительные возможности использования в таблицах режима "Подстановка" для показа и выбора данных из раскрывающихся списков ("тип источника строк" - таблица или запрос, список значений или список полей). Этот режим можно создать с помощью Мастера, если выбрать тип поля "Мастер подстановок" или описать самому на странице "Подстановка".
В примере этот режим задан для поля N_FCLT таблицы Spisok (см. рис. 7.8.). В дальнейшем для поля с описанными свойствами раздела "Подстановка" на экранной форме будет автоматически создаваться объект типа "Поле со списком".


Рис. 7.8.  Параметры страницы "Подстановка" в Конструкторе

Вид таблицы Spisok с использованием поля со списком для поля N_FCLT показан на рис. 7.9.


увеличить изображение
Рис. 7.9.  Таблица с использованием режима "Подстановка"

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

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


Страницы доступа к данным


Страницы доступа к данным представляют специальный тип Web-страниц, предназначенный для просмотра и работы через Интернет или интрасеть с данными, хранящимися в базах данных Microsoft Access или в базах данных Microsoft SQL Server. Страница доступа к данным может также включать данные из других источников, например, Microsoft Excel.

Использование страниц доступа для работы с данными аналогично использованию экранных форм: пользователь имеет возможность просматривать, редактировать, добавлять и удалять записи в таблицах базы данных. Однако страницу можно использовать и за пределами системы Microsoft Access, предоставляя пользователям возможность обновлять или просматривать данные через Интернет или интрасеть с использованием браузера Microsoft Internet Explorer 5.01 с пакетом SP2 или более поздних версий. Страницы могут распространяться в электронном виде с помощью электронной почты; получатели будут видеть текущие данные при каждом открытии сообщения.

На рис. 7.35. показана страница доступа к данным "Оценки студентов", разработанная в системе Microsoft Access с помощью Конструктора. Для переходов между записями, а также для добавления, удаления, сохранения, сортировки и отбора записей и для вызова справки предназначен стандартный набор кнопок.


Рис. 7.35.  Страница доступа к данным в режиме работы с информацией базы

В Конструкторе страница доступа состоит из групп, которые подразделяются на разделы (Section): подпись, верхний колонтитул, нижний колонтитул, кнопки перехода (см. рис. 7.36.).


Рис. 7.36.  Страница доступа к данным в Конструкторе

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

Страница представляет собой отдельный файл, хранящийся за пределами Access. При создании этого файла Microsoft Access добавляет его ярлык в окно базы данных. Разработка страниц доступа к данным аналогична разработке форм и отчетов: используется список полей, панель элементов и т.д. Тем не менее, приемы разработки страниц доступа к данным имеют ряд существенных отличий от разработки форм и отчетов.

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



Использование Microsoft Access для работы с базой данных системы Microsoft SQL Server


В базе данных Microsoft Access можно установить связь с таблицами базы данных системы SQL Server. Для этого следует выбрать команду Связь с таблицами: (в контекстном меню базы) и создать новое соединение с базой данных системы SQL Server (или выбрать существующее) с выбором драйвера SQL Server.

Для этого выбираем для связи "тип файлов" - "Базы данных ODBC" и в появившемся окне выбираем команду "New:". В следующем окне "Create New data Source" выбираем драйвер "SQL Server" и задаем имя соединения - Students_SQL. После этого в окне "Create a New Data Source to SQL Server" задаем имя SQL-сервера (для установки по умолчанию это имя local и выбираем из списка имя базы данных, с которой устанавливается соединение - Students.

В последнем окне SQL Server ODBC Data Source Test должны получить сообщение TESTS COMPLETED SUCCESSFULLY!

Далее можно выбрать таблицы базы SQL Server для использования в Microsoft Access (рис. 8.26).


Рис. 8.26.  Окно выбора таблиц базы данных

В результате в списке таблиц базы Microsoft Access мы увидим связь с выбранными таблицами базы Microsoft SQL Server. При этом существует возможность редактирования, добавления и удаления информации в этих таблицах, после команды Сохранить данные переписываются в базу SQL Server.

Работа с данными системы Microsoft SQL Server может быть организована с использованием проекта Microsoft Access.

Проект Microsoft Access (*.adp) представляет собой новый тип файлов Access, предоставляющих эффективный, естественный доступ к базам данных Microsoft SQL Server с помощью архитектуры компонентов OLE DB. В архитектуре OLE DB приложения, получающие доступ к данным, называют потребителями данных (например, Microsoft Access 2000 или Microsoft Visual Basic 6.0), а программы, обеспечивающие внутренний доступ к данным, называют средствами доступа к базам данных (например, Microsoft OLE DB Provider для SQL Server или Microsoft Jet 4.0 OLE DB Provider).
С помощью проекта Access можно легко создать приложение типа "клиент-сервер". Для этого выбираем команду "Новый проект с имеющимися данными" и выбираем связь с базой данных Students на SQL-сервере (см. рис. 8.27).


Рис. 8.27.  Окно задания связи с базой данных для нового проекта Microsoft Access

Полученное окно проекта (рис. 8.28) внешне почти ничем не отличается от окна базы данных Microsoft Access. В окне присутствует новый раздел - "Схемы баз данных", в окне Конструктора таблиц используются типы данных системы SQL Server, схема базы данных имеет тот же вид, что и в системе SQL Server.


Рис. 8.28.  Окно проекта Microsoft Access

Работа с проектом Microsoft Access очень похожа на работу с базой данных Access. Процесс создания форм, отчетов, страниц доступа к данным, макросов и модулей одинаков. Подключившись к базе данных SQL Server, можно просматривать, создавать, изменять и удалять таблицы, представления, сохраненные процедуры и схемы баз данных. В проекте можно применять Мастер для разработки форм, отчетов и Web-страниц доступа к данным.

Проект Microsoft Access использует MSDE (Microsoft Data Engine) - новую технологию, обеспечивающую совместимость локального хранения данных с Microsoft SQL Server. MSDE можно рассматривать как ядро обработки данных в архитектуре "клиент-сервер", альтернативное ядру базы данных Microsoft Jet для файлового сервера. Технология MSDE разработана и оптимизирована для применения на малых компьютерах, таких как рабочие станции пользователей или малые серверы рабочих групп.

Для экспорта данных и объектов Microsoft Access в формат SQL Server может быть использован мастер преобразования в формат SQL Server. Мастер преобразует базу данных Microsoft Access (.mdb) в новую или существующую базу данных Microsoft SQL Server либо в новый проект Microsoft Access (.adp) путем преобразования данных, описаний данных и переноса объектов базы данных.


Использование Visual FoxPro для работы с базой данных системы Microsoft SQL Server


В Visual FoxPro 8.0 и 9.0 существуют два способа установления связи и выполнения обмена данными с системой Microsoft SQL Server:

    Создать объект Connection в проекте VFP в составе базы данных (рис. 8.29), затем удаленное представление (Remote View) с заданным параметром обновления данных (Send SQL Updates) - рис. 8.30.


    увеличить изображение
    Рис. 8.29.  Установление связи с базой данных SQL Server в проекте Visual FoxPro


    увеличить изображение
    Рис. 8.30.  Задание параметров обновления данных удаленного представления для базы системы SQL Server

    Добавить в Data Environment экранной формы объект CursorAdapter для связи с базой SQL Server (рис. 8.31) и описать его основные свойства с помощью Построителя объектов (Builder). Предварительно необходимо в системе Windows в программе ODBC Data Source Administrator добавить новую строку в User DSN - "SQL_Students" с драйвером SQL Server, сервером (local) и базой данных "Students" для использования описания этого соединения в объекте CursorAdapter. На первой странице построителя следует задать связь через ODBC для созданного файла DSN "SQL_Students", на второй странице - с помощью кнопки Build: (см. рис. 8.31) выбрать нужную таблицу и ее поля, на третьей странице можно задать режим автоматического или командного обновления для всех полей и индексов таблицы.


    Рис. 8.31.  Создание объекта CursorAdapter для связи с базой SQL сервера

    Далее с созданными временными таблицами можно работать как с обычными таблицами баз данных Visual FoxPro в режиме оптимистической буферизации данных.



Общая характеристика системы


Microsoft SQL Server - одна из наиболее мощных систем работы с базами данных в архитектуре "клиент-сервер". Особенность системы - работа сервера только в операционных системах ряда Microsoft Windows NT - NT Server 4.0, 2000 Server, Server 2003, при этом клиентская часть может взаимо-действовать с сервером из Microsoft Windows 98 и других операционных систем. Рекомендуемая файловая система для SQL Server - NTFS, хотя возможна работа и в системе FAT.

В своем составе система имеет средства создания баз данных, работы с информацией баз данных, перенесения данных из других систем и в другие системы, резервного копирования и восстановления данных, развитую систему транзакций, систему репликации данных, реляционную подсистему для анализа, оптимизации и выполнения запросов клиентов, систему безопасности для управления правами доступа к объектам базы данных и пр. (см. рис. 8.1). Система не содержит средств разработки клиентских приложений. В таблицах 8.1-8.3 приведены некоторые максимальные возможности системы.


Рис. 8.1.  Основные компоненты в архитектуре системы

Таблица 8.1. Максимальные параметры баз данных

НаименованиеВеличина
Размер базы данных1 048 516 TB
Количество объектов в базе данных2 147 483 647
Количество экземпляров сервера на одном компьютере16
Количество баз данных в одном экземпляре сервера32767
Количество файлов в базе данных32767
Количество таблиц в базе данныхограничено количеством объектов в базе
Количество полей в таблице базы1024
Размер файла данных32 TB
Длина идентификаторов128 символов
Уровень вложенных хранимых процедур32
Уровень вложенных запросов32
Количество некластерных индексов для одной таблицы базы249
Количество полей в одном индексе16
Количество байт в одном индексе800
Количество таблиц в одном запросе256
Количество байт в одной строке таблицы8060

Таблица 8.2. Максимальное количество процессоров, поддерживаемых различными версиями системы в режиме симметричной мультипроцессорной обработки данных (SMP)

Операционная системаВерсия Microsoft SQL Server 2000Enterprise EditionStandard EditionPersonal EditionDeveloper EditionDesktop EngineSQL Server CEEnterprise Evaluation Edition
Microsoft Windows 2000 DataCenter3242323-32
Windows 2000 Advanced Server84282-8
Windows 2000 Server44242-4
Windows 2000 Professional--222-2
Microsoft Windows NT®4.0 Server, Enterprise Edition88282-8
Windows NT 4.0 Server44242-4
Windows NT 4.0 Workstation--222-2
Microsoft Windows 98--1Use Desktop Engine1--
Windows CE-----1-

Таблица 8.3. Максимальный размер физической памяти (RAM), поддерживаемой различными версиями системы (Гб)

Операционная системаВерсия Microsoft SQL Server 2000Enterprise EditionStandard EditionPersonal EditionDeveloper EditionDesktop EngineSQL Server CEEnterprise Evaluation Edition
Windows 2000 DataCenter6422642-64
Windows 2000 Advanced Server82282-8
Windows 2000 Server42242-4
Windows 2000 Professional--222-2
Windows NT 4.0 Server, Enterprise Edition32232-3
Windows NT 4.0 Server22222-2
Windows NT 4.0 Workstation--222-2



Работа с информацией баз данных в программе Enterprise Manager


Для добавления новых записей в таблицы, редактирования и удаления информации можно использовать команду Open table для выбранной таблицы (рис. 8.23).


увеличить изображение
Рис. 8.23.  Выбор режима работы

При этом можно представить в окне таблицы все данные или отобрать необходимые данные с заданием условий в запросе (рис. 8.24).


Рис. 8.24.  Окно конструктора запросов



Разработка клиентских приложений


Основной язык работы с базой данных в системе Microsoft® SQL Server™ 2000 - Transact-SQL.

Программы на этом языке генерируют такие системы, как Microsoft Visual C++®, Microsoft Visual Basic®, Microsoft Visual J++® и другие, использующие при разработке клиентских приложений программный интерфейс общего назначения (Application Programming Interface - API) ADO, OLE DB или ODBC:

ADO - Microsoft ActiveX® Data Objects поддерживает быструю разработку сложных приложений и имеет доступ к большинству компонентов системы SQL Server.

По архитектуре ADO - интерфейс прикладного уровня, который использует OLE DB, библиотеку интерфейсов COM. Использование ADO ограждает прикладного разработчика от потребности программирования COM интерфейсов.

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

OLE - связывание и внедрение объектов.

COM - технология Windows - Component Object Model.

Компоненты системы SQL Server, необходимые большинству приложений, поддерживают ADO при использовании Microsoft OLE DB Provider for SQL Server.

При разработке приложений в системе Microsoft Visual Studio .NET используется объект доступа к данным ADO .NET, предоставляющий новые возможности по работе в режиме отрыва от источника данных (соединение только на время получения и пересылки данных) [7].

OLE DB для средств, основанных на COM.

OLE DB Provider for SQL Server использует специфичные свойства провайдера, интерфейсы и методы компонентов SQL Server, не включенные в OLE DB-спецификации. Большинство этих определенных провайдером компонентов не доступно через ADO.

ODBC (Open Database Connectivity) - стандартный интерфейс, позволяющий приложениям Windows обращаться к тем источникам данных, для которых установлен драйвер базы данных.

SQL Server устанавливает свой драйвер для работы приложений с его базами.

Второй язык работы с базой данных в системе Microsoft® SQL Server™ 2000 - Xpath - язык, описанный в стандарте W3C (World Wide Web Consortium), использует XML-формат документов. Интерфейс взаимодействия с системой SQL Server - ADO API, OLE DB API.

Схема взаимодействия клиентских компонентов и сервера показана на рис. 8.25.


Рис. 8.25.  Схема взаимодействия клиентских компонентов с сервером

Работу с базой данных можно также организовать с использованием Microsoft Access или Visual FoxPro с использованием ODBC (драйвер SQL Server).



Создание базы данных


Для создания новой базы данных пользователь должен иметь права администратора или роль Database Creators.

Как и многие другие операции, создание базы данных проще всего выполнить с использованием программы SQL Server Enterprise Manager.

Можно также воспользоваться программой создания базы данных, написанной на языке Transact-SQL, которую можно запустить из программы SQL Query Analyzer. Программа создания базы данных и ее таблиц может быть сгенерирована с использованием средств моделирования баз данных, например, Case Studio, как описывалось в лекции 3.

Создание базы данных в программе Enterprise Manager выполняется следующим образом. В окне этой программы (см. рис. 8.17) в папке Databases следует выбрать в меню окна, контекстном меню или на панели инструментов команду New. Можно также воспользоваться мастером создания баз данных, вызываемым и пункте меню Tools окна консоли сервера.

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


увеличить изображение
Рис. 8.17.  Создание новой базы данных

В результате будет создана новая база по шаблону базы model. В ней будут присутствовать все группы объектов этого шаблона:

Diagrams - схемы, отображающие связи между таблицами базы;Tables - папка таблиц, в которых хранится информация о таблицах базы и их индексах;Views - папка представлений - описаний наборов данных, объединенных из нескольких таблиц в одну виртуальную таблицу;Stored Procedures - хранимые процедуры - список процедур на языке Transact-SQL;Users - сведения о владельце базы (owner) и правах пользователей, имеющих доступ к базе;Roles - описание типов групп пользователей;Defaults - описание значений по умолчанию базы и их связей с колонками таблиц;User Defined Data Types - описания типов данных пользователя;User Defined Functions - описания функций пользователя;Full-Text Catalog - папка для сохранения полнотекстовых индексов.



Создание таблиц базы данных


В программе Enterprise Manager в папке Table базы данных выбрать команду New (рис. 8.18).


Рис. 8.18.  Создание новой таблицы в базе данных

В появившемся окне с названием New Table in <имя базы> оn <имя SQL сервера> описать структуру таблицы, т.е. имена колонок - Column Name, тип данных в колонке - Data Type, длину данных - Length и возможность существования не заполненного информацией поля - Allow Nulls (рис. 8.19).


Рис. 8.19.  Описание структуры новой таблицы

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

Для модификации ее структуры в дальнейшем можно выбрать команду Design Table, после чего снова откроется окно описания структуры таблицы.

Для создания индексов в окне Design Table следует выбрать кнопку панели инструментов Manage Indexes/Keys, после чего откроется окно свойств таблицы Properties, где на третьей странице нужно описать индексы, которые могут быть уникальными или нет, кластерными (физический порядок в таблице на диске соответствует индексу) или нет (рис. 8.20).


Рис. 8.20.  Описание индексов таблицы

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

После создания всех таблиц базы, в том же окне свойств необходимо создать связи между таблицами (на второй странице окна Properties для таблиц, имеющих связи с другими таблицами), затем в папке Diagrams базы можно создать графическое представление связей между таблицами (рис. 8.21).


увеличить изображение
Рис. 8.21.  Схема базы данных

Для связей можно задать условия соблюдения ссылочной целостности (см. рис. 8.22). Эти же условия можно задать и при работе в окне Design Table (рис. 8.20).


Рис. 8.22.  Окно свойств связи для таблицы



Типы данных системы


Для правильного проектирования баз данных необходимо знание типов данных, которые могут использоваться для полей таблиц в базе. В табл. 8.4. приведены типы данных в системе Microsoft SQL Server с разбивкой их на группы по видам.

Таблица 8.4. Типы данных системы

НаименованиеОписание типа данныхДвоичные данныеСимвольные данныеСимвольные данные в кодировке UnicodeЧисловые целые данныеЧисловые данные с дробной частью числаТип дата и времяДенежный типДанные специальных типов
binary [ ( n ) ]максимальная длина 8 000 байт (n)
varbinary [ ( n ) ]данные переменной длины, максимальная длина 8 000 байт (n)
imageмаксимальная длина 2 147 483 647 байт
bitтип данных, который принимает значения 1 или 0
сhar [(n)]максимальная длина 8 000 символов (n)
varchar [(n)]тип переменной длины, максимально 8 000 символов (n)
textмаксимальная длина 1 073 741 823 символов
nchar (n)максимальная длина 4 000 символов (n)
nvarchar (n)переменной длины в кодировке Unicode максимальная длина 4 000 символов (n)
ntextмаксимальная длина 1 073 741 823 символов
bigintдиапазон от -922 337 203 685 4775808 до 922 337 203 685 4775807
Intдиапазон от -2 147 483 648 до 2 147 483 647
smallintдиапазон от - 32 768 до 32 767
tinyintдиапазон от 0 до 255
decimal[(p[, s])]диапазон от -1038-1 до 1038-1 с задание фиксированного количества знаков (p - всего и s -дробной части), максимальное общее количество знаков 38
numericто же, что и decimal
float [ ( n ) ]диапазон от +2.29*10-308 до +1.79*10308
realчисла с 7-значной точностью в диапазоне от +1.18*10-38 до +3.40*1038.
datetimeдиапазон от 1.01.1753 до 31.12.9999 с точностью 3.33 мс
smalldatetimeдиапазон от 1.01.1900 до 6.06.2079 с точностью 1 мин.
moneyдиапазон от -7 203 685 477.5808 до +922 337 203 685 477.5807
smallmoneyдиапазон от -214 748.3648 до +214 748.3647
timestampсчетчик, автоматически увеличивающийся, имеющий уникальное значение для базы данных (тип binary(8) или varbinary(8))
uniqueidentifierтип, который содержит уникальный идентификационный номер (GUID), сохраняемый как 16-битная двоичная строка
sql_variantтип, который сохраняет значения различных типов, кроме text, ntext, timestamp и sql_variant.
sysnameтип - синоним nvarchar , используется для ссылок на имена объектов базы данных



Установка системы


Установка системы Microsoft SQL Server выполняется с дистрибутивного диска запуском файла AUTORUN.EXE (который, в свою очередь, запускает программу \Sql\x86\setup\setupsql.exe). При этом начинает работать Мастер установки, который пошагово предлагает вам выбрать параметры установки системы.

Первый шаг (рис. 8.2) - выбор компьютера для установки:

    установить SQL Server на локальном компьютере;установить на удаленном компьютере;создать либо настроить виртуальный сервер.


Рис. 8.2.  Шаг 1 мастера установки системы

Следующей шаг - выбор вида инсталляции (рис. 8.3.


Рис. 8.3.  Выбор вида инсталляции "сервер"

Возможные варианты:

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

Далее программа установки попросит ввести имя пользователя и название организации, а также предложит принять лицензионное соглашение. После этого откроется окно Installation Definition. Оно содержит три варианта установки программного обеспечения (рис. 8.4):

Client Tools Only - установка сетевых библиотек и средств администрирования SQL Server. Эта опция выбирается для компьютеров, которые будут использоваться для удаленного управления сервером;Server and Client Tools - полная установка SQL Server. Эта опция выбрана по умолчанию;Connectivity Only - установка сетевых библиотек и компонентов для доступа к данным (Microsoft Data Access Components, MDAC), но не средств администрирования сервера. Эта опция устанавливается для компьютеров, которые должны взаимодействовать с системой SQL Server, но не будут использоваться для администрирования SQL Server.


Рис. 8.4.  Выбор варианта установки программных средств

Далее следует задать установку по умолчанию или имя для именованного сервера (рис. 8.5).


Рис. 8.5.  Задание имени сервера


Далее выбирается вариант установки: типичная, минимальная или установка пользователя (с возможностью выбора компонентов для установки) и каталог на диске компьютера для установки (рис. 8.6).


Рис. 8.6.  Выбор варианта установки сервера

При выборе установки пользователя будет показано окно со списком компонентов системы и составом каждого компонента (рис. 8.7).


Рис. 8.7.  Выбор компонентов для установки

Далее необходимо задать учетные записи для запуска служб SQL Server, это может быть локальный пользователь или пользователь, зарегистрированный в домене сети и для работы с SQL Server (рис. 8.8).


Рис. 8.8.  Задание учетной записи для запуска служб сервера

Далее выбирается система аутентификации Windows или SQL Server (рис. 8.9).


Рис. 8.9.  Задание метода аутентификации

Следующее окно - задание кодовой страницы и параметров сортировки данных. Здесь можно задать параметры, установленные на компьютере или отдельно заданные для системы SQL Server (рис. 8.10).


Рис. 8.10.  Задание кодовой страницы и параметров сортировки данных

Следующее окно - задание используемых сервером сетевых библиотек (рис. 8.11).


Рис. 8.11.  Задание используемых сервером сетевых библиотек

Далее следует задать тип клиентских лицензий и их количество (рис. 8.12).


Рис. 8.12.  Выбор типа лицензирования

После этого начинается копирование файлов, и установка завершается созданием программной группы в меню Windows для работы с программами системы SQL Server.

Одно из важных новшеств системы SQL Server 2000 - возможность установки на одном компьютере нескольких экземпляров SQL Server. Экземпляр SQL Server, который устанавливается первым, называется стандартным или используемым по умолчанию; все остальные экземпляры, установленные на том же компьютере, называются именованными. Для каждого именованного экземпляра SQL Server может быть определен собственный набор баз данных и пользователей. Если на разных компьютерах установить экземпляры SQL Server с одинаковыми именами, их можно объединить в единый виртуальный сервер.



После инсталляции в группе программ Microsoft SQL Server для версии Developer Edition присутствуют пункты, показанные на рис. 8.13.


Рис. 8.13.  Группа программ в меню Windows после установки системы

Основные компоненты системы SQL Server реализуются как службы (Services) Windows. В программе SQL Server Service Manager можно управлять запуском и остановом служб, связанных с установленными компонентами системы (рис. 8.14). Ярлык этой программы появляется в области уведомлений панели задач Windows и выдает индикацию о запуске главной службы - SQL ServerAgent.


Рис. 8.14.  Программа Service Manager

В состав системы SQL Server входят пять служб, для которых можно задать автоматический или ручной запуск при загрузке Windows (табл. 8.5).

Таблица 8.5. Службы системы Microsoft SQL Server 2000СлужбаНазначение
MSSQLServerОсновное ядро SQL Server, реализует функции сервера баз данных
SQLServerAgentВыполняет административные функции, отвечая за плановое выполнение заданий и поддержку операторов. SQL Server может работать без этой службы, но при этом ограничиваются его возможности
MS DTC (Microsoft Distributed Transaction Coordinator)Необходима только в том случае, если в системе выполняются распределенные транзакции. Если в ней нет необходимости, можно ее не устанавливать
Microsoft Search (MS Search)Поддерживает полнотекстовый поиск. Она генерирует каталоги и полнотекстовые индексы, а также выполняет сам поиск. Если в ней нет необходимости, можно ее не устанавливать
MSSQLServerOLAPServiceСпециальная служба, представляющая дополнительный компонент SQL Server - Microsoft SQL Server 2000 Analysis Services (сервер для оперативной аналитической обработки данных - OLAP)
В состав системы Microsoft SQL Server 2000 входит программа Enterprise Manager (рис. 8.15), имеющая большие возможности по администрированию и работе с базами данных. Если после запуска этой программы список серверов в ней пустой, следует зарегистрировать в ней установленные на компьютере экземпляры сервера.


При использовании системы аутентификации Windows NT, запроса пароля при подключении не последует. Если используется система аутентификации SQL Server, Enterprise Manager спросит, следует ли выполнять автоматическое подключение или вы хотите, чтобы имя и пароль запрашивались у вас при каждом подключении.

После регистрации сервера для подключения к нему достаточно щелкнуть на значке "+" слева от имени сервера. Если подключение будет выполнено успешно, красный значок на пиктограмме сервера сменится на зеленый.


увеличить изображение
Рис. 8.15.  Программа Enterprise Manager

Развернув список баз данных сервера в Enterprise Manager, мы увидим системные и установленные по умолчанию учебные базы данных.

Это следующие шесть баз данных:

master - служит для управления сервером;model - шаблон пользовательских баз;msdb - журнал выполнения заданий и расписания;tempdb - хранение временных таблиц и объектов;Northwind - пример пользовательской базы;Pubs - пример пользовательской базы.

Базы данных Northwind и Pubs - это учебные базы данных SQL Server, которые можно не устанавливать. Базы данных master, model, msdb, tempdb являются системными и необходимы для работы SQL Server. В программе Enterprise Manager следует просмотреть системные учетные записи, созданные в ходе установки. Для этого нужно открыть папку Logins, которая расположена в папке Security (рис. 8.16).


увеличить изображение
Рис. 8.16.  Учетные записи пользователей в программе Enterprise Manager

На сервере должны быть определены три учетные записи:

BUILTIN\Administrators;ИМЯДОМЕНА\УчетнаязаписьслужбыSQLServer; (если при установке выбран Use a domain user account)sa.

Эти учетные записи генерируются в процессе установки SQL Server и играют очень важную роль.

Группа BUILTIN\Administrators создается исключительно при установке SQL Server в Windows NT Server или Windows NT Server Enterprise Edition, причем только при использовании системы аутентификации Windows NT. В ней представлены все члены встроенной группы Windows NT Administrators, имеющие административные разрешения на доступ к серверу.

Учетная запись sa предназначена для управления сервером. Она создается при любой установке SQL Server, поскольку без нее подключение к серверу невозможно. По умолчанию эта запись не имеет пароля. Рекомендуется сразу же задать для нее пароль и регулярно его менять. У этой учетной записи имеются абсолютно все возможные разрешения на доступ к SQL Server и его объектам, и во всех базах данных она по умолчанию получает псевдоним dbo.

При установке Desktop-версии SQL Server в Windows 9.x создается только учетная запись sa.