Использование элемента данных
Мы рассмотрим основные принципы работы с элементами данных на следующем примере - форме для просмотра таблицы, входящей в состав базы данных Ппи эздании такой формы вам вообще не придется программировать.
1. Создайте новый проект сочетанием клавиш Ctrl+N.
2. В диалоговом окне New Project выберите значок Standard EXE и нажмите OK,
3. Добавьте два текстовых поля в верхней части формы.
4. Дважды щелкните на элементе данных в панели элементов, чтобы поместить его на форму.
5. Перетащите созданный элемент и расположите его под двумя текстовыми полями.
6. Увеличьте ширину элемента так, чтобы можно было прочесть его название (см рисунок).
7. Задайте следующие свойства элемента данных:
Caption: | Таблица Authors |
Connect: | Access (default) |
DatabaseName: | C:\Program Files\Microsoft Visual Studio\VB98\biblio.mdb (при необходимости измените путь к файлу) |
RecordsetType: | 1 – Dynaset (по умолчанию) |
RecordSource: | Authors (из раскрывающегося списка) |
8. Задайте свойства левого текстового поля:
DataSource: | Data1 |
DataField: | Author |
9. Задайте свойства правого текстового поля:
DataSource: | Data1 |
DataField: | Au ID |
10. Запустите программу и просмотрите различные записи таблицы, пользуясь навигационными кнопками элемента данных. Обратите внимание на то, что любые изменения в текстовых полях немедленно записываются в базу данных.
На приведенных ниже рисунках показано, как выглядит форма при просмотре базы данных. В первой записи хранится имя автора Russell Jacobs. Если перейти к записи 56, выводится имя Bradford Nichols.
11. Остановите программу с помощью кнопки, находящейся в правом верхнем углу формы.
12. Если в таблицу должны добавляться новые записи, задайте свойству EOFAction
элемента данных значение 2 - Add New.
ПРИМЕЧАНИЕЕсли вы не хотите изменять исходную базу данных, создайте ее копию в Проводнике Windows и работайте не с оригиналом, а с новой базой.
13. Перезапустите программу. Чтобы добавить новую запись, перейдите в конец таблицы и затем нажмите кнопку перехода к следующей записи.
14. Введите имя автора Doe, John в первом текстовом поле и перейдите к следующей записи. Запись с новым именем добавляется в базу данных.
15. Снова остановите программу.
16. Если вам захочется удалить записи из базы данных, создайте на форме кнопку. Задайте ее свойству Name значение cmdDelete, а свойству Caption — &Delete.
17. Добавьте следующий фрагмент в процедуру события Click этой кнопки:
Private Sub cmdDelete_Click()
With Data1.Recordset
.Delete
.MovePrevious
End With
End Sub
Данный пример показывает, как создать простейшее, но тем не менее работоспособное приложение. Чтобы самостоятельно повторить этот процесс для другой базы данных, необходимо знать, какими свойствами обладает элемент данных и I для чего они нужны.
Свойства элемента данных
Начнем со свойств элемента данных (рис. 8.8). Свойство Connect указывает тип базы данных — по умолчанию выбирается Access. Свойство DatabaseName определяет имя файла базы данных (строго говоря, это справедливо только для баз данных Access; в остальных базах данных достаточно указать только каталог). Свойство RecordSet показывает, откуда берутся данные — из таблицы, динамического набора (dynaset) или снимка (snapshot). Обычно (хотя и не всегда) таблица оказывается наиболее эффективным вариантом, если данные хранятся в одной габлице; динамический набор — если данные представляют собой подмножество записей таблицы или находятся в нескольких таблицах, а снимок — если доступ к цанным происходит только для чтения. В нашем примере свойство RecordsetType может иметь любое из трех возможных значений. Свойство RecordSource определяет таблицу в базе данных (по крайней мере в Access; в других базах данных оно эбычно определяет имя файла). Чтобы работать с несколькими таблицами в динамическом наборе, вам придется ввести SQL-оператор или предварительно создать этот набор в своей программе или Access.
Рис. 8.8. Свойства элемента данных
Сам по себе элемент данных не отображает информацию — его приходится связывать с элементом другого типа. В предыдущем примере использовались два текстовых поля. Для каждого из полей в свойстве DataSource было задано имя элемента данных (в нашем примере — Datal), а в поле DataField — имя поля в наборе записей, возвращаемого свойством RecordSource элемента данных. Возможность работы с базами данных является одной из самых сильных сторон Visual Basic. Элементы данных обладают колоссальными возможностями, но вы можете добиться еще больших результатов, если научитесь писать процедуры доступа к данным на Visual Basic. Даже в недалеком прошлом работа с данными не вызывала особых трудностей, но с появлением ADO эта задача стала едва ли не одной из самых простых! Мы подробно рассмотрим ADO в этом уроке, а пока давайте познакомимся со структурой баз данных.
Анатомия базы данных
В Visual Basic предусмотрено много возможностей для работы с базами данных формата Microsoft Access (.MDB), а также SQL Server и Oracle. Хотя в Visual Basic существует немало способов получить нужные данные, мы рассмотрим лишь пару из них (дополнительную информацию можно найти в книге Джона Вейскаса «Эффективная работа с Microsoft Access 97» (Издательство «Питер»)). К счастью, для работы с базами данных Access необязательно иметь установленную копию Access, потому что в Visual Basic входит ядро AccessJet Engine. Все, что вам нужно -это MDB-файл Access. Для создания базы данных удобнее пользоваться Access, однако мы прибегнем к услугам надстройки Visual Data Manager, потому что она входит в Visual Basic.
База данных Access представляет собой файл, включающий таблицы, индексы и запросы. Таблицей называется набор данных, разбитых на строки и столбцы. В терминах баз данных строки называются записями, а столбцы — полями. Индексом называется связанный список указателей на записи таблицы. Он ускоряет поиск в таблице (подобно тому, как предметный указатель книги ускоряет поиск нужной страницы). Запросами называются операторы SQL (Structured Query Language-структурированный язык запросов), по которым из таблицы выбирается подмножество записей.
Таблицы
Если вам приходилось работать с SQL, то вы знаете, что такое таблица. Если вы переходите на Visual Basic или Access c одной из традиционных систем управления базами данных, потребуются некоторые пояснения. To, что в xBase считается базой данных, в Access называется таблицей. В Visual Basic и Access таблицы составляют лишь часть компонентов, из которых складывается база данных. Полноценная база данных Access содержит и другие объекты — другие таблицы, запросы, формы и т. д. Таблицы не хранятся в отдельных файлах, а являются неотъемлемой частью базы данных. Чтобы открыть таблицу, необходимо предварительно открыть родительскую базу данных. Таблицы являются наиболее важным компонентом базы данных, именно в них хранятся данные. Если вам не приходилось работать с базами данных, но у вас есть некоторый опыт общения с Excel, можете рассматривать таблицу как рабочий лист. Если продолжить аналогию с электронными таблицами, строки соответствуют записям, а столбцы — полям. Я поясню сказанное на примере простой таблицы.
Название | Автор |
за пять минут | Ф. Блоггз |
Астрофизика для чайников | Дж. Доу |
Как заработать миллиард | Б. Гейтс |
Если не считать названий столбцов, в таблице присутствует три строки, каждая из которых относится к отдельной книге. Другими словами, наша таблица состоит из трех записей. Каждая запись обладает различными атрибутами, или свойствами — названием и именем автора. Полей всего два — «Название» и «Автор». Разумеется, настоящие базы данных содержат намного больше записей и состоят из большего количества полей.
В любую базу данных должна входить хотя бы одна таблица, в противном случае база не будет содержать никаких данных и окажется совершенно бессмысленной. Следовательно, при создании базы данных необходимо прежде всего создать хотя бы одну таблицу и занести в нее данные. Вероятно, с расширением потребностей программы вам придется добавлять в базу данных и другие таблицы. Так, в приведенном ранее примере вторая таблица может содержать информацию об издателях книг из первой. Конечно, первую таблицу можно дополнить и включить в нее сведения об издателе в виде отдельного поля — но если издатели выпускают по нескольку книг, желательно вынестиих в отдельную таблицу. Тем самым вы обеспечите целостность данных, а структура базы данных станет более рациональной.
Запросы
Запросы служат для выборки или изменения данных в таблицах. Вы обращаетесь с запросом к существующей базе данных и, если запрос сформулирован корректно, получаете ответ. При этом экономится немало времени, которое пришлось бы тратить на поиск ответа другими средствами. Существуют и другие способы получения данных из таблиц, но мы начнем именно с запросов. Для изменения данных в таблицах тоже можно пользоваться другими способами (например, модифицировать таблицу вручную), однако запросы позволяют легко внести изменения сразу в несколько записей и полей. Предположим, нас интересует, какие книги были написаны Стивеном Блахом. Для этого мы определим на языке SQL запрос, в который войдут лишь интересующие нас записи. Поступитеследующим образом:
1. Откройте пример из подраздела «Использование элемента данных».
2. В окне свойств замените значение свойства RecordSource следующим: select * from [Authors] where [Author] = "Blaha, Stephen"
3. Выполните команду Run > Start.
Результат запроса выглядит так:
Имя автора | Номер |
Blaha, Stephen |
Результат запроса очень похож на таблицу; фактически он представляет собой подмножество записей таблицы. В терминологии Visual Basic и Access такое подмножество называется «динамическим набором». Данные, входящие в динамический набор, на самом деле не существуют — они лишь временно извлекаются из интересующей вас таблицы (или таблиц), а при сохранении запроса записывается лишь критерий выборки (в нашем примере критерий — это автор с именем Stephen Blaha). Определение «динамический» означает, что при изменении таблицы состав набора может измениться, но запрос останется тем же. Поскольку динамический набор является подмножеством записей существующей таблицы, вы можете изменить входящие в него данные — это приведет к изменению данных исходной таблицы. Следует учесть, что на редактирование данных в динамических наборах накладываются некоторые ограничения, например запрещается вносить изменения, угрожающие целостности данных. Например, если таблица с именами авторов не должна содержать повторяющихся имен, вы не сможете создать новую запись для книги, написанной тем же автором.
Запросы составляют чрезвычайно важную часть Visual Basic и Access. Вы можете не только изменять данные в динамическом наборе, но и обращаться с запросом к самому запросу (надеюсь, вы понимаете, что имеется в виду). Скажем, если динамический набор содержит названия нескольких книг, написанных Стивеном Бла-хом, критерий можно ужесточить и ограничить его одним-двумя названиями. Возникает принципиальный вопрос — почему бы не поставить названия книг на первое место и не заменить два запроса одним? Конечно, это вполне допустимо, и более того, во многих ситуациях поступать следует именно так, Тем не менее изящество запросов Access как раз и заключается в том, что последовательные запросы позволяют постепенно сужать динамический набор и просматривать результаты промежуточных запросов. Запросы становятся «многослойными», а во многих ситуациях именно это и требуется.
Попутно возникает еще один, не менее важный вопрос. Стоит ли возиться с запросом, если вы можете просмотреть таблицы и «вручную» выбрать из нее все книги Стивена Блаха? Если таблица состоит всего из трех записей, такое замечание выглядит вполне обоснованным. Но если в базе хранится несколько десятков, сотен и даже тысяч записей, использование запросов позволяет легко выделить интересующую вас информацию. Обычно в запросы входит информация из нескольких таблиц — это позволяет просматривать и изменять данные из логически связанных, но тем не менее различных таблиц на одной форме Visual Basic.