Приведенная база данных может быть создана и программно. Приводится текст
программы для создания таблиц примера. задания ключей, индексов и отношений
между таблицами.
Текст программы:
•
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:\VB\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)
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 условие где условие
определяет критерии поиска информации.
В условии используются имена полей, операции сравнения (<> , >=,
<>) и специальные операции сравнения IN, LIKE, BETWEN. Эти операции могут
объединяться с помощью логических операций и задавать сложные условия
поиска информации.
Примеры:
SELECT /Year Published/, Title FROM Titles
WHERE /Year Published/ > 1991 определяет выбор названий книг, год выпуска
которых позже 1991.
SELECT I Last Name], /First Name/ FROM Employees
WHERE /Last Name/ = ‘King’ определяет выбор полей имен и фамилий из таблицы
служащих, фамилии которые совпадают с фамилией King.
Операция IN сравнивает содержимое поля со списком значений, определяющих
критерий поиска информации.
WHERE /Year Published/ IN (1995, 1996) определяет выбор книг,
опубликованных в 1995 и в 1996 гг.
SELECT /Last Name/, /First Name/, City FROM Employees
WHERE City In (‘Interlaken ', ‘New York’, ‘Frankfurt’) определяет выбор
служащих, живущих в городах Interlaken, New York или Frankfurt.
Операция LIKE сравнивает содержимое поля со значением образца. Для записи
образца используются строковые константы, символы шаблона и списки
диапазона символов.
Символы шаблона следующие: *, ?, #. * — соответствует цепочке символов, ? —
соответствует одному символу, # — соответствует одной цифре.
R* — возможные результаты поиска right, Roza.
А? — возможные результаты поиска and, any.
12345# — возможные результаты поиска 123455. 123457.
Список диапазона заключается в квадратные скобки и первый и “последний
символы диапазона отделяются дефисом (-). Диапазон задается в возрастающем
порядке.
SELECT /Last Name/, /First Name/ FROM Employees WHERE /Last Name/ Like ‘S*’
определяет выбор служащих, фамилии которых начинаются с буквы S. SELECT
Author FROM Authors WHERE Author LIKE fA-K/ определяет выбор авторов,
фамилии которых начинаются с букв от А .до К.
SELECT Title FROM Titles
WHERE Title LIKE “database*” AND [Year Publisher/ = 1996 определяет выбор
названий, в которых присутствует слово “database” и выпущенных в 1996 году.
Операция BETWEEN проверяет принадлежность значения поля диапазону значении
и является включающим значением (выбираются записи, содержащие поле со
значением, равным границе диапазона). Границы значений объединяются
операцией AND.
SELECT lOnler IDI, I Order Dale/
FROM Orders WHERE /Order Date/ Between # I-1-94” And #6-30-94# определяет
выбор документов первой половины 1994 г. С
SELECT /Last Name/, Salary FROM Employees '
WHERE [Last Name] Between ‘Lon’ And To/’ определяет выбор зарплаты
служащих, начальные буквы фамилий которых, расположенные в алфавитном
порядке, находятся в диапазоне 'Lon' и 'ТоГ.
Для определения порядка, в котором представляются результаты поиска
записей, используется дополнение ORDER BY, синтаксис которого следующий:
SELECT список имен полей FROM список имен таблиц WHERE условие ORDER BY имя
поля [DESC] [имя поля [DESC]] где имя поля — поле, по которому производится
упорядочение. Опция DESC устанавливает обратный порядок сортировки.
Упорядочение может вестись по нескольким полям (сортировка, например, по
фамилии, а затем по имени)
Пример:
SELECT Title FROM Titles WHERE Title LIKE
“*database*” AND [Year Publisher] = 1996 ORDER BY Title определяет выбор
названий книг, в которых присутствует слово “database” и выпущенных в 1996
г., и упорядочивает названия в алфавитном порядке.
При работе с несколькими таблицами, каждое из рассмотренных дополнений
условий выбора может быть применено для любой из таблиц. В общем случае при
формировании запроса для
нескольких таблиц указывается таблица, в которой ведется поиск полей и
связь между таблицами. Синтаксис запроса для нескольких таблиц следующий:
SELECT список имен полей FROM список имен таблиц, список связей
где список связей определяет, как таблицы в списке имен таблиц связаны
между собой. В частности для задания связи используется рассмотренное
дополнение WHERE (WHERE имя_табмщы1.1шя_поля1 = 1шя_таблицы2.имя_поля2).
. SELECT Tities.Title, Publishers. [Company Name} FROM Titles.
Publishers WHERE Titles. Pubid = Publishers. Pubid определяет выбор
названий книг (Title) из таблицы названий (Titles) и названий
издательств (Company Name) из таблицы издательств (Publishers).
Дополнение WHERE определяет связь между таблицами (выбирается название
книги и номер издательства из таблицы Titles, по номеру издательства в
таблице издательств Publishers находится название издательства).
SELECT Tities.Title. Authors. Author, Publishers. [Company Name]
FROM Titles, Authors. Publishers WHERE Titles.auJd = Authors. au_id AND
Tilles.pubid = Publishers. Pubid определяет выбор из всех трех таблиц
полной информации по книге (название, автор, издательство).
В целом, язык SQL имеет широкий набор средств для организации различных
запросов, о которых можно более подробно узнать из встроенной системы
помощи Visual Basic.
Пример программы.
Модернизируем приведенную выше программу для просмотра таблиц баз данных
для ввода SQL-запросов и отображения полученной информации. Добавим на
форму текстовое окно для ввода SQL-запроса (нажатием клавиши ввода запрос
вводится). Полученная информация динамически (соответственно запросу)
формируется и отображается элементом управления Grid.
Форма показана на рис. 5.24, пример ввода запроса и таблица с информацией —
на рис. 5.25. [pic]
[pic]
Option Explicit
Const vbOFNPATHMUSTEXIST = &H800&
Const vbOFNFILEMUSTEXIST = S.H1000&
Private Sub Coinmandl_Click () Combol.Clear
CommonDialogI.DefaultExt = “MDB” CommonDiaiogI.FiieName = “”
CommonDialogI.Filter = “Базы данных Access(*.MDB)|*.MDB”
CommonDialogI.Flags = vbOFNPATHMUSTEXIST
CommonDialogI.Action = 1
If CommonDialogl.FileName = “” Then Exit Sub
OpenDataBase CommonDialogI.FileName End Sub
Public Sub OpenDataBase(ByVal DataFile As String)
Dim I As Integer
Datal.Connect = “”
Datal.DatabaseName = DataFiie
Datal.Refresh
For I = 0 To Datal.Database.TableDefs.Count - 1
Combo 1.Addltem Datal.Database.TableDefs(I).Name
Next
Combol.Text = “”
End Sub
Public Sub FillGrid(ByVai Zapros As String)
Dim I As Integer, CellWidth As Integer
Datal.RecordSource = Zapros
Debug.Print Zapros
Gridl.Cols = Datal.Recordset.Fields.Count
Debug.Print Gridl.Cols
Gridl.Row •= 0 ‘
For I = 0 To Datal.Recordset.Fields.Count - 1
Gridl.Coi = I
Gridl.Text = Datal.Recordset.Fields(I).Name Gridl.ColWidth(I) =
TextWidth(Gridi.Text) + 100 . Next Datal.Refresh Datal.Recordset.MoveLast
Gridl.Rows = Datal.Recordset.RecordCount + 1 Datal.Recordset.MoveFirst
Gridl.Row = 0
Do While Not Datal.Recordset.EOF Gridl.Row = Gridl.Row + 1
For I = 0 To Datal.Recordset.Fields.Count - 1 Gridl.Coi = 1 If
IsNuil(Datal.Recordset.Fields(I).Value) Then
Gridl.Text =• “” Else
Gridl.Text = Datal.Recordset.Fields(I).Value End If
CellWidth =.TextWidth(Gridi.Text) + 100 If CellWidth > Gridi.ColWidth(I)
Then Gridl.ColWidth(I) = CeilWidth
End If Next I
Datal.Recordset.MoveNext Loop End Sub
Private Sub Textl_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then FillGrid Textl.Text
End If End Sub
ЗАКЛЮЧЕНИЕ
Автор надеется, что прочитавший эту книгу до конца и самостоятельно
выполнивший на компьютере приведенные в ней примеры получил достаточные
знания и навыки программирования на Visual Basic, позволяющие
самостоятельно создавать программные системы.
Вы получаете в свои руки относительно простой, но очень эффективный
инструмент для создания программ, работающих в операционной системе
Windows. Эти программы могут иметь любую прикладную направленность: от
простых баз данных для личного использования на работе и дома до
профессиональных систем автоматизации производственной, торговой,
банковской, страховой и других видов деятельности.
Вы делаете первые шаги, чтобы стать специалистом в области информационных
технологий. Технологий, которые прокладывают дорогу в XXI век и в
значительной степени определят дальнейшее развитие человечества.
Желаю Вам успехов на этом сложном, но очень перспективном пути.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23