Язык
структурированных запросов (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 сравнивает содержимое поля
со списком значений, определяющих критерий
поиска информации.
Примеры:
SELECT /Year Published/, Title FROM Titles
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. 

Текст программы:
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
Datal.Refresh
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 век и в значительной степени
определят дальнейшее развитие человечества.
Желаю Вам успехов на этом сложном, но
очень перспективном пути. |