Смекни!
smekni.com

Програмирование на Visual Basic (стр. 29 из 30)

Рис 5 16

Для выбранного поля таблицы (на рисунке выбрано поле “номер поставщика”) при щелчке по кнопке “Edit” открывается окно редактирования параметров (рис 5 17). На рисунке для поля таблицы “Номер поставщика” задан параметр “Counter” (Счетчик) Это поле является ключевым и должно иметь уникальные значения При задании параметра “Counter”, СУБД автоматически поддерживает уникальность этого поля, увеличивая значение счетчика при вводе новой записи Другие параметры имеют следующий смысл DefaultValue — значение по умолчанию, DataUpdatable — возможность изменения. Required — обязательность ввода, AllowZeioLenght — возможность задания строки нулевой длины, ValidationText и ValidationRule — правила корректности, Fixed или Variable Length — фиксированной или переменной длины.

Рис 5 17

Кнопка “Indexes..” позволяет перейти к созданию и редактированию индексов таблицы (рис 5 18) Для создания или

добавления нового индекса нужно щелкнуть по кнопке “Add ” открывается окно для создания индекса (рис. 5.19).

Рис 5 18

В окне нужно задать имя индекса. Затем выбрать поля таблицы (“Fields in tdble”), которые включаются в индекс. Выбранные поля кнопками Add(ASC) или Add(DEC) (в зависимости от того, упорядочиваются записи по возрастанию или убыванию) Добавляются в индексный список (“Fields in index”). Кнопка Remove позволяет удалить поле индекса Индикаторы в окне позволяют также определить индекс как первичный (Plimary Index)

или внешний (Foieign Index), уникальный (Unique) или кластерный (Clustered). Соответствующий требованиям индекс сохраняется кнопкой ОК и отображается в окне Indexes (рис. 5.18) Для удаления индекса используется кнопка Remove

Кнопка “Keys. .” окна Table Editor позволяет перейти к созданию ключей таблицы (рис. 5 20). В раскрывающемся списке полей таблицы выбирается поле “Номер поставщика”, которое будет использоваться в качестве первичного ключа. Для таблицы “Товары” первичным ключом определим поле “Номер товара”.

Кнопка “Relations...” окна Table Editor позволяет перейти к созданию отношений между таблицами. В окне Relations” (рис. 5.21) нужно выбрать из раскрывающегося списка первичную таблицу (Prymary Table) и связанную таблицу (Related Table) и установить связь между ними В рассматриваемом примере первичной таблицей является таблица поставщиков, поле “Номер поставщика” которой используется в качестве внешнего ключа для таблицы “Товары”. Ключевое поле первичной таблицы (Номер поставщика) оюбражается на поле окна Поле для связи связанной таблицы выбирается в раскрывающемся списке (“Select Matching Fields). Связующие поля отображаются в окне.

Вид отношения “один ко многим” (один поставщик может поставлять различные товары) задается переключателем “Many”. Переключатель “One” определяет отношение “один к одному”.

Флажок “Enfoice Refeiential Integrity” позволяет установить, нужно ли обеспечивать целостность отношении (средства СУБД автоматически проверяют целостность базы данных при модификации информации) Кнопка “Add” вводит заданное отношение в базу данных.

Таблицы и связи между ними созданы и отображаются в списке таблиц базы данных (рис. 5 22). При выборе таблицы становятся доступны кнопки “Open”, “Design”, “Delete”, “Relations” Кнопка “Open” открывает выбранную таблицу для ввода или редактирования данных (рис. 5.23). Данные приведенных выше таблиц примера могут быть введены в базу данных.

Рис. 5.22

Рис. 5.23

К недостаткам подсистемы Data Manager можно отнести ограниченные возможности по заданию отношений между таблицами. Подсистема позволяет задать отношения только для ключевых полей “Counter” (Счетчик) и не позволяет задать составных ключей. Базы данных сложной структуры целесообразней создавать непосредственно в СУБВ Access, которая имеет развитые и очень удобные средства проектирования баз данных.

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

Текст программы:

Global Const DB_LANG_GENERAL =

“;LANGID-Ox0809;CP=1252;COUNTRY=0’ Global Const DB_BOOLEAN = 1 Global Const DB_BYTE = 2 Global Const DB_INTEGER = 3 Global Const DB_LONG = 4 Global Const DB_CURRENCY = 5 Global Const DB_SINGLE = 6 Global Const DB_DOUBLE = 7 Global Const DB_DATE = 8 Global Const DB_TEXT = 10 Global Const .DB_LONGBINARY =11 Global Const DB_MEMO = 12

Private Sub Form_Click()

CreateNewDB End Sub

Sub CreateNewDB ()

Dim Db As Database, Dbname As String Dbname = “C:&bsol;VB&bsol;PRIMER.MDB” If Dir(Dbname) <> “” Then Kill Dbname Set Db = CreateDatabase(Dbname, DB_LANG_GENERAL) NewProduktTabie Db NewProviderTable Db Relations Db

MsgBox “Ваша база данных , “ & UCase(Dbname) & “, создана” End Sub

Sub NewProduktTabie(D As Database)

Dim Td As New TableDef, Fld() As New Field Dim Idx() As New Index, I As Integer ReDim Fld(l To 5), Idx(l To 2) Td.Name = “Товары” ' Имя таблицы.

‘ Создание полей таблицы. Fid(I).Attributes = DB_AUTOINCRFIELD For I = 1 To 5 ‘ Задание свойств полей таблицы.

Fld(I).Name = Choose(I, “Номер_товара”, “Номер_поставщика”, “Название_товара”, “Стоимость”, “Количество”)

Fid(I).Type = Choose (I, DB_LONG, DB_LONG, DB_TEXT, DB_CURRENCY, DB INTEGER) Fld(I).Size = Choose(I, 4, 4, 30, 4, 4) Td.Fields.Append Fid(I) Next I ‘ Создание индексов. Idx(l).Name = “PrimaryKey” Idx (1) . Fields = “Номера/товара” • Idx(l).Primary = True

Idx(1).Unique = True • Idx(2).Name = “Name” Idx(2).Fields = “Название_товара” For I = 1 To 2

Td.Indexes.Append Idx(I) Next I

D.TableDefs.Append Td ‘ Создание таблицы. End Sub

Sub NewProviderTable(D As Database)

Dim Td As New TableDef, Fid() As New Field

Dim Idx() As New Index, I As Integer

ReDim Fld(l To 5), Idx(l To 2)

Td.Name = “Поставщики” ' Имя таблицы. ‘ Создание полей таблицы.

For I = 1 То 5 'Задание свойств полей таблицы.

Fld(I).Name = Choosefl, “Номер_поставшика”, “Название_фирмы”, “Город”, “Адрес”, “Телефон”)

Fld(I).Type = Choose(I, DB_LONG, DB_TEXT, DB_TEXT, DB_TEXT, DB_TEXT)

Fld(I).Size = Choose(I, 4, 30, 15, 30, 10)

Next I

Fid(l).Attributes = DB_AUTOINCRFIELD

For I = 1 To 5

Td.Fields.Append Fld(I)

Next I ‘ Создание инде^ов.

Idx(l).Name == “PrimaryKey”

Idx(1).Fields = “Номер_поставщика”

Idx(1).Primary = True

Idx(1).Unique = True

Idx(2).Name = “Fi rmNarne”

Idx(2).Fields = “Название_фирмы”

For I = 1 To 2

Td.Indexes.Append Idx(I)

Next I

D.TableDefs.Append Td ‘ Создание таблицы. End Sub

Public Sub Relations (D As Database) Dim MyField As Field, MyRelation As Relation

Set MyRelation = D.CreateRelation(“MyRelation”) MyRelation.Table = “Поставщики” MyRelation.ForeignTable = “Товары” Set MyField =

MyRelation.CreateField(“Номер_поставщика”) MyField.ForeignName = “Номер_поставщика” MyRelation.Fields.Append MyField D.Relations.Append MyRelation End Sub

Константы в программе скопированы из входящего в состав Visual Basic файла DATACONS.TXT. Обращение к процедуре CreateNewDB создания базы данных помещено в процедуру обработки события Form_Click, из которой производится обращение к процедуре NewProduktTable, создающей таблицу товаров на складе, к процедуре NewProviderTable, создающей таблицу поставщиков товаров и к процедуре Relations, создающей отношения между таблицами. Следует обратить внимание на удобство использования встроенной функции Choose для задания свойств полей таблиц.

5.5. ИСПОЛЬЗОВАНИЕ ЯЗЫКА SQL ДЛЯ

СОЗДАНИЯ И РАБОТЫ С БАЗАМИ ДАННБ1Х

Язык структурированных запросов (SQL) является стандартным средством для работы с базами данных и может использоваться как для интерактивной работы с базами данных, так и включаться в языки программирования. Применительно к Visual Basic SQL позволяет:

  • создавать, модифицировать или удалять таблицы в базе данных Access;
  • создавать или удалять индексы для таблиц в базе данных Access;
  • вставлять, удалять или модифицировать записи таблиц;
  • получать сводную информацию о данных в таблицах (число записей, суммы, средние, минимальные, максимальные значения и др.);
  • поиск данных в одной или более таблицах по запросу. Язык SQL используется совместно с элементом управления DATA или с объектами доступа к данным (DAO) механизма Jet. Объект Database содержит объекты доступа к данным TableDef, определяющие таблицы, объекты Field, определяющие поля, объекты Index, определяющие индексы и др.

В ранее рассмотренных параграфах данной главы через элемент управления Data подключалась одна таблица (свойству Re-cordSource элемента управления Data присваивалось значение имени таблицы). При использовании языка SQL запрос вводится в свойство RecordSource. В случае использования элемента управления Data, это позволяет работать с информацией из нескольких таблиц.

Следует отметить, что каждое выполнение оператора запроса изменяет набор записеи. В связи с этим необходимо применять метод Refresh для элемента управления Data после каждого присвоения SQL-запроса свойству RecordSource.

Рассмотрим операторы и использование языка SQL для работы с базами данных. Для поиска информации в базе данных используется оператор SELECT. Синтаксис оператора следующий:

SELECT список имен полей FROM список имен таблиц где SELECT, FROM — ключевые слова;

список имен полей список имен полей, которые выбираются из одной или нескольких 1аблиц. Для выбора всех полей можно использовать символ “*”, вместо перечисления имен всех полей. Если имя поля таблицы содержит пробел, то это имя должно заключаться в квадратные скобки;

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

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

' Примеры:

SELECT * FROM Titles — выбор всех полей из таблицы Titles рассмотренной выше базы данных по библиографии по Visual Basic.

SELECT Title, /Year Published/ FROM Titles — выбор полей заголовков (Title) и года издания (Year Published) из таблицы Titles. Имя поля года издания берется в квадратные скобки (имеет пробел).

Для поиска информации, соответствующей некоторому условию, используется дополнение к оператору SELECT — WHERE, которое имеет следующий синтаксис:

SELECT список имен полей FROM список имен таблиц WHERE условие где условие определяет критерии поиска информации.