Создание баз данных в Visual Data Manager

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

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

Давайте создадим базу данных для книжного магазина. Это делается так:

1. Запустите Visual Data Manager командой Tools > Visual Data Manager.

2. Выполните команду File > New > Microsoft Access > Version 7.0 MDB, чтобы вызвать диалоговое окно Select Microsoft Access Database to Create.

3. Введите имя базы данных; в нашем примере будет использовано имя HouseOfBooks (регистр символов значения не имеет). Расширение .MDB можно не указывать, Visual Basic задает его автоматически.

4. Нажмите кнопку ОК.

Открывается окно базы данных с именем базы в заголовке. На экране присутствует два окна. Первое — окно базы данных (Database Window -см. рис. 8.9), а второе — окно запроса SQL (SQL Statement). B окне базы данных приведен перечень свойств только что созданной базы. Пока что в ней нет ни одной таблицы или запроса. На панелях инструментов содержатся кнопки для выполнения некоторых операций с базой. В данный момент нажата кнопка Dynaset (Динамический набор), однако окно базы данных пока остается пустым - в базе данных пока нет ни одной таблицы.

Создание баз данных в Visual Data Manager - student2.ru

Рис. 8.9. Окно базы даннъа с расширеннъиии свойствами

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

1. Выполните команду File > Close. Команду Close также можно выбрать из системного меню окна базы данных или дважды щелкнуть на этом меню. Двойной щелчок на управляющем меню закрывает не только базу данных, но и Visual Data Manager.

2. Выполните команду File > Open Database > Microsoft Access, чтобы открыть диалоговое окно Open Microsoft Access Database. Выберите в нем файл HouseOfBooks.mdb и нажмите кнопку Open. Если ваша база данных используется в локальном ре- жиме, не обращайте внимания на флажок Open as Read Only. Перед вами снова оказывается пустое окно базы данных.

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

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

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



Название Автор
Философия одиночества Джон Купер Повис
Искусство старения Джон Купер Повис
Монолог отшельника Теодор Фрэнсис Повис
Слава жизни Левелин Повис
Windows — авторитетное руководство Эмма Радек
Access — авторитетное руководство Эмма Радек

Пока все идет нормально, но списки книг довольно часто сортируются по фамилии автора. Следовательно, полное имя следует разбить на два поля — имени и фамилии. Таблица принимает следующий вид.

Название Фамилия Имя
Философия одиночества Повис Джон Купер
Искусство старения Повис Джон Купер
Монолог отшельника Повис Теодор Фрэнсис
Слава жизни Повис Левелин
Windows — авторитетное руководство Радек Эмма
Access — авторитетное руководство Радек Эмма

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

Конструирование таблицы

Наша таблица входит в базу данных HouseOfBooks, поэтому на экране должно присутствовать окно базы данных (при необходимости воспользуйтесь командой File > Open Database). B настоящий момент окно содержит лишь перечень свойств базы данных. Перед тем как приступать к созданию новой таблицы, нажмите кнопку TabLe:

1. Щелкните в окне базы данных правой кнопкой мыши и выберите из контекстного меню команду New Table. Ha экране появляется пустое окно таблицы в режиме конструирования, в котором задаются атрибуты полей и выбираются типы данных, — учтите, что информация вводится в другом режиме (рис. 8.10).

Создание баз данных в Visual Data Manager - student2.ru

Рис. 8.10. Диалоговое окно Table Structure

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

2. Имя таблицы задается в верхнем текстовом поле. Введите текст BookList.

Создание полей

Добавьте в таблицу три поля:

1. Нажмите кнопку Add Field, чтобы добавить первое поле. Открывается диалоговое окно Add Field (рис. 8.11).

Создание баз данных в Visual Data Manager - student2.ru

Рис. 8.11. Диалоговое окно AddField

2. Введите в поле Name строку TITLE. Курсор должен находиться в поле по умолчанию — если вы экспериментировали с окном, щелкните на этом поле, чтобы переместить в него курсор.

3. Нажмите клавишу Tab, чтобы перейти к следующему полю. Обратите внимание — по умолчанию поля в базах данных Access имеют текстовый тип (Text).

4. Нажмите клавишу Tab, чтобы перейти к полю Size. Введите в нем значение 40.

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

6. Введите имя второго поля, LASTNAME.

7. Дважды нажмите клавишу Tab, чтобы согласиться с предложенным текстовым типом поля. Введите длину поля, 20.

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

9. Введите имя последнего поля, FIRSTNAME.

10. Дважды нажмите клавишу Tab, чтобы подтвердить предложенный текстовый тип поля. Введите длину поля, 20.

11. Нажмите кнопку Close. Конструирование таблицы закончено.

12. Нажмите кнопку Build the Table в диалоговом окне Table Structure, чтобы Data Manager добавил макет таблицы в базу данных.

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

1. Щелкните правой кнопкой мыши на таблице BookList в окне базы данных. Выберите из контекстного меню команду Open. Данные отображаются в табличном формате, удобном для ввода данных, — а также для просмотра и редактирования, если бы в таблице уже присутствовали какие-нибудь данные.

2. Закройте диалоговое окно Table Structure кнопкой Close.

Ввод данных

При вводе данных в таблицу Список книг можно пользоваться всеми стандартными приемами редактирования текста в Windows. Новой для вас может оказаться разве что клавиша F2, которая выделяет все содержимое ячейки. Разумеется, в ячейке можно сделать двойной щелчок, но при этом выделяется только одно слово — этого недостаточно, если содержимое поля состоит из двух и более слов. Прежде всего следует заново открыть таблицу:

1. Выберите из списка таблицу BookList.

2. Щелкните правой кнопкой мыши и выберите из контекстного меню команду Open. Существует и другой, более быстрый, способ открыть таблицу — дважды щелкнуть на ее имени.

Все готово к вводу данных, курсор находится в первом поле первой записи. Введите необходимые данные в каждом поле и каждой записи. Для перехода к следующему полю щелкните на нем мышью. При переходе к следующей записи вам будет предложено сохранить предыдущие изменения; нажмите кнопку Yes, чтобы подтвердить их. Первая запись вводится так:

1. Нажмите кнопку Add, чтобы добавить в таблицу новую запись.

2. Введите в поле Title первой записи текст Философия одиночества и щелкните мышью в поле LASTNAME.

3. Введите в поле LASTNAME текст Повис и щелкните в поле FIRSTNAME.

4. Введите в поле FIRSTNAME текст Джон Купер и щелкните в первом поле следующей записи.

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

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

TITLE LASTNAME FIRSTNAME
Философия одиночества Повис Джон Купер
Искусство старения Повис Джон Купер
Монолог отшельника Повис Теодор Фрэнсис
Слава жизни Повис Левелин
Windows — авторитетное руководство Радек Эмма
Access — авторитетное руководство Радек Эмма

Нажатие кнопки Update после второй книги Эммы Радек завершает ввод данных в таблицу.

Как было сказано ранее, на основе таблиц строятся все остальные объекты в базе данных. Сейчас мы воспользуемся нашей простейшей таблицей для построения запроса, а позднее снова вернемся к ней и рассмотрим некоторые возможности, связанные с изменением макета. А сейчас мы построим несложный запрос на основе таблицы BookList.

Создание запроса

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

1. Щелкните правой кнопкой мыши в окне базы данных и выберите из контекстного меню команду New Query. Кроме того, можно выполнить команду Utility > Query Builder из меню Visual Data Manager. Открывается диалоговое окно Query Builder(pnc.8.12).

Создание баз данных в Visual Data Manager - student2.ru

Рис. 8.12. Диалоговое окно Query Builder

2. Выберите таблицу BookList из списка ТаЫе — появляется перечень всех полей таблицы. По умолчанию в поле Field Name указывается первое поле таблицы. Замените его текстом [BookList].LASTNAME.

3. Не изменяйте содержимого поля Operator. Hac интересуют фамилии авторов, поэтому сравнение должно быть точным.

4. В поле Value введите текст Повис или нажмите кнопку List Possible Values и выберите строку Повис из списка. При нажатии этой кнопки открывается список всех значений данного поля в текущей таблице. В некоторых ситуациях выбор значения из списка заметно экономит время.

5. В списке Fields to Show выберите все поля, щелкая на каждом из них. Мы хотим, чтобы в результатах запроса были приведены значения всех полей таблицы.

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

7. Нажмите кнопку Add into Criteria, чтобы добавить выражение SQL к списку критериев. Вы можете продолжить создание запросов и добавление их к текущему критерию кнопками Add into Criteria или Or into Criteria. Наш пример ограничивается поиском по фамилии.

8. Чтобы протестировать запрос, нажмите кнопку Run. Data Manager спрашивает, является ли ваш SQL-запрос транзитным (passthrough) (нажмите кнопку No; сквозные запросы используются для работы с SQL-серверами баз данных, например Microsoft SQL Server). Если запрос сформулирован правильно, вы увидите набор записей, в каждую из которых входит фамилия Повис (рис. 8.13).

Создание баз данных в Visual Data Manager - student2.ru

Рис. 8.13. Результаты запроса

9. Завершите просмотр результатов и закройте диалоговое окно кнопкой Close.

10. Нажмите кнопку Save в диалоговом окне Query Builder. Вам будет предложено задать имя запроса — введите Powys. После короткой паузы запрос будет добавлен в базу данных.

11. Закройте окно Query Builder кнопкой Close.

Результаты запроса образуют так называемый динамический набор. Данные динамического набора можно редактировать — любые изменения отражаются в таблице BookList. Впрочем, на практике подобный запрос вряд ли будет удобен — он выводит сведения по конкретной фамилии автора. Каждый раз, когда в вашей базе данных появляется новая фамилия, придется создавать новый запрос. Запросы, включаемые в базу данных, должны быть более универсальными. Для создания универсального запроса можно воспользоваться услугами Visual Data Manager. Если результат вас устраивает, скопируйте выражение SQL в приложение Visual Basic. Объединяя строки, можно включить в него содержимое некоторого текстового поля. Например, SQL-запрос можно создать следующим образом:

SQL = "Select * from [BookList] Where [BookList].LASTNAME = '"

SQL = SQL & txtAuthorName & .....

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

Теперь давайте подумаем, какую дополнительную информацию следует включить в таблицу BookList.

Первичные ключи

Первичным ключом называется величина, однозначно идентифицирующая любую запись в таблице, например номер детали в складской базе данных. Присутствие первичного ключа в таблице ускоряет такие операции, как поиск, сортировка и фильтрация. Более того, если вы захотите связать информацию в двух таблицах, одна из них обязана иметь первичный ключ. Ни одно поле таблицы BookList не может использоваться в качестве первичного ключа. С первого взгляда на содержимое таблицы видно, что имена и фамилии авторов повторяются. Например, в таблице есть четыре записи с фамилией Повис и две — с фамилией Радек. Сначала возникает желание назначить первичным ключом название книги, однако в магазине могут находиться две книги с одинаковыми названиями. Например, в книжном магазине могут появиться два экземпляра книги Повиса «Искусство счастья». Кроме того, существует еще один довод против выбора названия книги в качестве первичного ключа. Для редких и особо ценных книг (таких, как книги Повиса) необходимо хранить отдельную запись для каждого экземпляра (в отличие, скажем, от современных книг по компьютерам), поскольку коллекционеров интересует информация об издании и состоянии каждого экземпляра. В нашем примере очевидным кандидатом на роль первичного ключа является ISBN (International Standard Book Number — международный стандартный номер, однозначно идентифицирующий каждую опубликованную книгу). К сожалению, в продаже могут находиться давно напечатанные книги, не имеющие Ho\fepa ISBN. Поле ISBN для таких книг нельзя оставить пустым, поскольку два пустых поля противоречат правилу, согласно которому значение первичного ключадолжно быть уникальным для каждой записи. Выход из ситуации заключается в создании специального поля-счетчика.

Счетчики

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

Чтобы добавить поле-счетчик в Visual Data Manager, следует создать поле, выбрать для него тип Long и установить флажокАи1о Increment. Затем создайте индекс, установите для счетчика флажок Required и назначьте счетчик первичным ключом (Primary Key). B результате каждая запись будет иметь уникальное значение поля счетчика.

В таблице BookList счетчик не только представляет разумную альтернативу номеру ISBN, но и создает уникальный идентификатор для каждой книги (в том числе и тех, у которых отсутствует ISBN). Полю-счетчику можно присвоить имя BOOK CODE. Содержащаяся в нем информация может показаться условной: вряд ли она будет иметь какой-нибудь смысл для клиентов и работников магазина. Конечно, некоторые покупатели могут использовать это значение при заказе книг. В реальной ситуации в запись следовало бы включить номер ISBN для новых книг, даже несмотря на то, что это поле нельзя использовать в качестве первичного ключа. Тем не менее для Access это поле выглядит вполне осмысленным — оно заметно ускоряет выполнение запросов и других операций с таблицей (ускорение запросов заметно лишь для больших таблиц, а при работе с единичными записями оно не имеет практического значения). Код книги используется и при связывании таблиц. Первичный ключ следует выбрать как можно раньше, еще в режиме конструирования таблицы — преимущества станут очевидными с ростом объема данных.

Числовые поля

Все три поля в таблице BookList относятся к текстовому типу и плохо подходят для хранения числовой информации. Числовые поля позволяют задавать количество десятичных позиций после запятой, суммировать значения и выполнять другие операции. Например, вы можете вычислить общее количество деталей на складе. В нашем примере имеется два очевидных кандидата на роль числовых полей -количество экземпляров и цена. Тем не менее для цены в Access предусмотрен особый тип поля — денежное поле. Следовательно, нам понадобится лишь одно числовое поле для хранения количества экземпляров. Когда количество экземпляров падает ниже определенной величины, пора заказывать новые книги в издательстве. С раритетными изданиями дело обстоит несколько иначе: для них количество экземпляров всегда равно 1. Разным экземплярам одной и той же книги собтветствуют разные записи, причем цена меняется в зависимости от издания и состояния экземпляра. Следовательно, по умолчанию количество экземпляров должно быть равно 1. Вскоре мы узнаем, как приказать Access ввести это значение по умолчанию. Следует учитывать, что у числовых полей существует несколько разновидностей. Они выбираются в строке Field Size списка свойств поля и включают Byte, Integer, Long, Single и Double. От выбранной разновидности зависит интервал возможных значений, максимальное количество десятичных цифр после запятой и количество байт (а следовательно, и время обработки) для хранения числа. Все разновидности числовых полей перечислены в следующей таблице.

Свойство Field Size Интервал допустимых значений Количество цифр после запятой Объем памяти
Byte От 0 до 255 1 байт
Integer От -32 768 до 32 767 2 байт
Long Integer От -2 147 483 648 до 2 147 483 647 4 байт
Single От-3.4х1038до3.4х1038 4 байт
Double От-1.797х10308до1.797х10308 8 байт

Список упорядочен по возрастанию интервалов, количеству цифр после запятой и объему памяти. Если числовое поле должно содержать дробные величины, придется выбирать между типами Single и Double (за исключением денежных величин, которым назначается специальный тип поля). Старайтесь выбирать тип поля, расположенный поближе к началу списка, поскольку при этом вы экономите место на диске, необходимое для хранения данных, и ускоряете обработку. В нашем примере количество экземпляров одной книги никогда не превысит 255, поэтому для его хранения вполне хватит типа Byte. Это поле будет называться QUANTITY. Для больших (а также отрицательных) целых величин следует выбирать тип Integer или Long.

Денежные поля

Денежные поля занимают столько же места, что и Double. Тем не менее по ряду причин они идеально подходят для хранения цен и прочих денежных величин. Во-первых, они содержат две цифры после запятой (для центов). Во-вторых, при выводе значений, превышающих тысячу, автоматически используется символ-разделитель. В третьих, денежные величины выравниваются по правому краю. В-четвертых, в них автоматически вставляется префикс денежного знака, установленного по умолчанию (например, знак доллара), — при вводе данных достаточно ввести лишь числовое значение. Несомненно, поле с ценой книги (мы назовем его PRICE) пригодится в нашей таблице. Проверка его содержимого позволит предотвратить случайный ввод отрицательной цены — пусть покупатели платят магазину, а не наоборот!

Логические поля

Логические поля могут содержать лишь одно из двух значений (Да/Нет, Истина/ Ложь, Вкл./Выкл.). Наш книжный магазин продае^книги двух видов — современные книги о компьютерах и раритетные издания. Хотелось бы различать соответствующие записи в базе данных с первого взгляда. Один из способов заключается в создании логического поля, которое показывает, является ли данное издание раритетным. С помощью этого поля и соответствующего запроса можно легко создать два отдельных каталога — первый для читателей книг о компьютерах, а второй — для любителей редких изданий. Такому полю хорошо подойдет имя RARE BOOK? (обратите внимание на вопросительный знак).

Поля Memo

Поля Memo идеально подходят для хранения произвольного текста — скажем, пояснительных заметок. С подобным текстом бывает неудобно работать в обычных текстовых полях, ограниченных по длине и форматированию текста. Кроме того, к такому тексту практически неприменимы критерии проверки. Тип данных Memo был разработан специально для хранения произвольного текста. В поле Memo можно ввести большесимволов, чем в обычном текстовом поле, но за это приходится расплачиваться дополнительным местом на диске. Максимальная длина текстового поля ограничена 255 байтами (то есть 255 символами, или примерно 40 словами), а поле Memo может содержать до 64 000 байт.

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

Поля даты/времени

Поля даты/времени специально разработаны для хранения сведений о дате, времени или и том, и другом. В Access дата и время хранятся во внутреннем числовом формате, что позволяет использовать их в вычислениях. Тем не менее в Visual Basic и Access эти величины отображаются в формате даты/времени, к тому же вы можете выбрать нужный формат. Ввод данных достаточно гибок: например, дату 27 апреля 1998 года можно ввести следующими способами[4]:

О 4 27 98;

О 27 Арг

О April

О 04/27/1998.

Независимо от формата ввода, дата всегда отображается в формате, выбранном для данного поля. Если год не указан, сохраняется и отображается текущий год. Так, чтобы ввести дату 27 апреля 1989 года, придется явно указать 89 или 1989.

Поле даты/времени пригодится и в базе BookList. В нем можно хранить дату поступления книг на склад — нас интересует значение календарной даты, а не времени. Эти сведения представляют больший интерес для редких изданий, поскольку по ним можно узнать срок, в течение которого у вас находится та или иная книга. Например, если редкая книга пылится на полке больше года, пора подумать о снижении цены. Вы можете потребовать у Visual Basic или Access вывести список таких книг и автоматически снизить цену на них. В нашей таблице поле даты/времени будет называться ACQUIRED.

Изменение таблицы

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

Изменение макета таблицы и добавление соответствующих полей выполняется так:

1. Если таблица BookList не была открыта в режиме конструктора, щелкните на ней правой кнопкой мыши и выберите из контекстного меню команду Design.

2. Нажмите кнопку Add Field, чтобы добавить в таблицу новое поле. В ячейке Name введите имя поля BOOK CODE. Перейдите к ячейке Type клавишей Tab, откройте список и выберите из него строку Long. Чтобы данное поле стало полем счетчика, установите флажки AutoIncrField и Required. Нажмите кнопку ОК.

3. Введите имя следующего поля, QUANTITY, и нажмите клавишу Tab. Данное поле должно быть числовым; выберите из списка Type строку Byte. Нажмите кнопку OK, чтобы приступить к созданию следующего поля.

4. Введите имя следующего поля, PRICE, и нажмите клавишу Tab. Перейдите к списку Type и введите в нем букву с — при этом из списка будет выбрана строка Currency. Нажмите кнопку OK, чтобы сохранить определение поля и приступить к созданию следующего.

5. Введите имя следующего поля, RARE BOOK?. Выберите для него логический тип (Boolean). Снова нажмите кнопку OK, чтобы перейти к следующему полю.

6. Следующее поле должно иметь имя NOTES. Выберите для него тип данных Memo и нажмите кнопку ОК.

7. Осталось ввести последнее поле. Введите имя ACQUIRED, выберите тип даты/времени (Date/Time) и сохраните кнопкой ОК. Закройте диалоговое окно Add Field кнопкой Close.

8. В диалоговом окне Table Structure нажмите кнопку Add Index, введите в поле Name текст BOOK CODE. Щелкните на строке BOOK CODE в списке Available Fields, чтобы включить его в список Indexed Fields.

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

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

Чтобы назначить в базе данных составной первичный ключ, щелкните на именах полей в списке, и они будут внесены в список Index Fields. Когда оба поля будут выделены, нажмите кнопку OK, чтобы назначить данный индекс первичным ключом базы. При просмотре свойств индекса в окне базы данных выясняется, что свойства UNIQUE, PRIMARY и REQUIRED имеют значение True. Теперь таблица индексируется по номеру книги (поле BOOK CODE), и каждое значение этого поля должно быть уникальным. Поскольку ядро Access автоматически увеличивает значение счетчика, можно быть уверенным в уникальности значения. В случае текстового поля вам пришлось бы проследить за тем, чтобы его значение не повторялось. Если этого не сделать, Access не позволит сохранить запись-дубликат до тех пор, пока значение уникального поля не будет изменено.

9. Теперь проиндексируем базу по другим полям. Введите TITLE в текстовом поле Name, после чего щелкните на строке TITLE в списке Available Fields. Снимите флажки Unique и Primary, это приводит к тому, что в данном поле будут разрешены повторяющиеся значения, — другими словами, вы сможете включить в базу книги с одинаковыми названиями. Сохраните индекс кнопкой ОК.

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

10. Повторите предыдущий этап и создайте индекс по полю LASTNAME. При этом соблюдайте осторожность и не превратите его в уникальный индекс.

11. Закончив создание индексов, закройте диалоговое окно кнопкой Close.

12. В списке Field List щелкните на строке QUANTITY, чтобы сделать это поле текущим. Введите 1 в ячейке DefaultValue — эта величина определяет количество книг, принимаемое по умолчанию.

При вводе новой записи Access автоматически помещает в это поле значение по умолчанию. Это удобно для редких книг, которые обычно покупаются и продаются в единичном экземпляре. Если в магазине имеется несколько современных книг, вам придется вручную переопределить значение этого поля. Значения по умолчанию чрезвычайно полезны и могут использоваться для всех типов полей, кроме счетчиков и объектов OLE.

13. В списке Field List щелкните на строке PRICE, чтобы сделать это поле текущим.

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

14. В ячейке ValidatationRule введите>0 and <1000. Хотя поле цены имеет денежный тип, оно может принимать и отрицательные значения.

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

15. Щелкните на ячейке ValidationText и введите в ней текст Допустимое значение цены - от 0 до 1000. Если вы попытаетесь ввести цену,выходящую за пределы указанного интервала, откроется диалоговое окно с предупреждением. Чтобы сообщение было более содержательным (и, возможно, подсказывало допустимое значение), следует ввести его текст в ячейке ValidationText.

16. Сохраните макет таблицы кнопкой Close.

Работа с таблицей закончена. Попробуем создать проект Visual Basic, в котором используется новая база данных. Выполните в Visual Basic команду Add-Ins > Data Form Designer, чтобы мгновенно создать форму на основе таблицы или запроса. Существует и другой вариант — создайте на форме элемент данных и добавьте текстовые поля или другие элементы, связанные с ним. Среди наиболее важных свойств элемента данных — свойство DatabaseName, ссылающееся на базу данных Access (.MDB), и RecordSource, которое ссылается на таблицу или запрос в MDB-файле. Свойство DataSource определяет элемент данных, а свойство DataField — поля источника данных (таблицы или запроса), указанного в свойстве RecordSource элемента данных. В комбинированных полях или списках для получения информации от элемента данных используется свойство RowSource (в сочетании с ListField). Для пересылки информации обратно в базу через элемент данных применяется свойство DataSource (и DataField).

Наши рекомендации