- •1. Специальные конструкции языка 6
- •Введение
- •Специальные конструкции языка
- •Пользовательские типы данных
- •Типизированные файлы
- •Текстовые файлы
- •Нетипизированные файлы
- •Обработка ошибок
- •Оператор On Error
- •Объект Err
- •Обработка событий мыши и клавиатуры
- •Обработка событий мыши
- •Обработка событий клавиатуры
- •1.5. Элемент управления MaskedEdit
- •Графика
- •Элементы управления для графических изображений
- •Генерация графических изображений (примитивов)
- •Графические методы
- •Координаты элементов управления.
- •Примеры использования графических методов
- •Задания для самостоятельной работы
- •Работа с таймером
- •Анимация графических изображений
- •Основные свойства и методы
- •Примеры создания эффектов анимации
- •Варианты заданий по анимации для самостоятельной работы
- •Стандартные диалоговые окна
- •Работа с базами данных в vb
- •Элемент управления Data
- •Объект Recordset
- •Элемент управления msFlexGrid
- •Элемент управления ms Data Bound Grid
- •Использование языка sql в vb для работы с базами данных
- •Литература
Использование языка sql в vb для работы с базами данных
Язык структурированных запросов (SQL) [6] является стандартным средством для работы с базами данных и может использоваться как для интерактивной работы с базами данных, так и включаться в языки программирования. Применительно к Visual Basic SQL позволяет:
создавать, модифицировать или удалять таблицы в базе данных;
создавать или удалять индексы для таблиц в базе данных;
вставлять, удалять или модифицировать записи таблиц;
получать сводную информацию о данных в таблицах (число записей, суммы, средние, минимальные, максимальные значения и др.);
осуществлять поиск данных в одной или более таблицах по запросу.
Язык SQL используется совместно с элементом управления DATA или с объектами доступа к данным (DAO) механизма Jet. Объект Database содержит объекты доступа к данным TableDef, определяющие таблицы, объекты Field, определяющие поля, объекты Index, определяющие индексы и др.
В ранее рассмотренных примерах через элемент управления Data подключалась одна таблица (свойству RecordSource элемента управления Data присваивалось значение имени таблицы). При использовании языка SQL запрос вводится в свойство RecordSource элемента управления Data. Это позволяет работать с информацией из нескольких таблиц.
Следует отметить, что каждое выполнение запроса изменяет набор записей. В связи с этим необходимо применять метод Refresh для элемента управления Data после каждого присвоения SQL-запроса свойству RecordSource. Рассмотрим применение языка SQL на следующих примерах.
Пример 7.7. Создадим проект для выбора из трех таблиц «Студенты», «Предметы» и «Успеваемость» БД “Деканат” информации и отображения ее посредством объекта DBGrid. Таблицы связаны между собой следующим образом: таблицы «Студенты» и «Успеваемость» связаны через поле «Код_студента», таблицы «Предметы» и «Успеваемость» связаны через поле «Код_предмета».
В свойстве RecordSource объекта Data зададим команду:
Select Студенты.ФИО, Предметы.Предмет,
Успеваемость.Балл
From Студенты, Предметы, Успеваемость
Where
[Студенты].[Код_студента]=
[Успеваемость].[Код_студента] AND
[Успеваемость].[Код_предмета]=
[Предметы].[Код_предмета] Order By ФИО
Р езультат выполнения запроса – динамическая таблица с информацией – представлены на рис. 7.14.
Рис. 7.14. Результат выполнения запроса
Пример 7.8. Создадим проект, осуществляющий выбор информации по конкретному значению поля «Thema» из таблицы «Internews» БД «Internet», созданной в MS Access и содержащей поля «kod_zap» (код записи), «Autor» (автор), «Thema» (тема) и «News» (новость). Для отображения базы данных используем элемент DBGrid.
На форме разместим четыре командные кнопки: две по имени тем «Отдых» и «Путешествия», для отображения всей информации «Все» и для выхода «Выход».
На рис. 7.15 представлен результат выполнения данного проекта при нажатой кнопке «Отдых», ниже приведен программный код. В программном коде оператор Select заключается в кавычки, точка с запятой в конце не ставится и если в запросе присутствует символьное значение, то оно заключается в одинарные кавычки (например, ‘Отдых’, ‘Путешествия’).
Рис. 7.15. Общий вид интерфейса
Private Sub Command1_Click() ‘кнопка «Отдых»
Data1.RecordSource = "Select * From Internews Where _
Thema='Отдых' Order By Autor"
Data1.Refresh
End Sub
Private Sub Command2_Click() ‘кнопка «Путешествия»
Data1.RecordSource = "Select * From Internews Where _
Thema='Путешествия'"
Data1.Refresh
End Sub
Private Sub Command3_Click() ‘кнопка «Все»
Data1.RecordSource = "Select * From Internews"
Data1.Refresh
End Sub
Private Sub Command4_Click() ‘кнопка «Выход»
End
End Sub
‘процедура для запрета редактирования поля Kod_zap, которое имеет тип
счетчик
Private Sub DBGrid1_BeforeColEdit(ByVal ColIndex As
Integer, ByVal KeyAscii As Integer, Cancel As
Integer)
If ColIndex = 0 Then Cancel = True
End Sub
Пример 7.9. Модернизируем приведенную в примере 7.4 программу для просмотра таблиц баз данных, для ввода SQL-запросов и отображения результатов его выполнения. Добавим на форму текстовое окно для ввода SQL-запроса (нажатием клавиши Enter запрос выполняется). Полученная информация динамически (соответственно запросу) формируется и отображается элементом управления DBGrid с именем DBGrid1.
Пример ввода запроса и таблица с информацией представлены на рис. 7.16
Рис. 7.16. Ввод запроса и таблица с информацией
Текст процедур обработки событий программы приведены ниже:
Option Explicit
Private Sub Combo1_Click()
'выбор таблицы из списка и заполнение сетки ее данными
FillGridTable Combo1.Text
End Sub
Private Sub ConnectBtn_Click()
'запуск диалога "Открыть файл" по кнопке "Подключить"
Const vbOFNPATHMUSTEXIST = &H800&
Const vbOFNFILEMUSTEXIST = &H1000&
Combo1.Clear
CommonDialog1.DefaultExt = "MDB"
CommonDialog1.FileName = ""
CommonDialog1.Filter = "Базы данных MS_
Access(*.MDB)|*.MDB"
CommonDialog1.Flags = vbOFNPATHMUSTEXIST
CommonDialog1.Action = 1
If CommonDialog1.FileName = "" Then Exit Sub
OpenDataBase CommonDialog1.FileName
End Sub
Public Sub OpenDataBase(ByVal DataFile As String)
'Открытие базы данных и заполнение Combo1 списком таблиц
Dim I As Integer
Data1.Connect = "Access"
Data1.DatabaseName = DataFile 'имя БД
Data1.Refresh
Combo1.Clear
For I = 1 To Data1.Database.TableDefs.Count - 1
Combo1.AddItem Data1.Database.TableDefs(I).Name
Next
Combo1.Text = " "
End Sub
Private Sub FillGridTable(ByVal QueryString As String)
'заполнение данными из таблицы
Data1.RecordSource = QueryString 'имя таблицы
Data1.Refresh
End Sub
Private Sub FillGridQuery(ByVal Zapros As String)
'заполнение данными из запроса
Data1.RecordSource = Zapros
Data1.Refresh
End Sub
Private Sub DBGrid1_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Integer, Cancel As Integer)
If ColIndex = 0 Then Cancel = True 'Запрет
редактирования нулевого поля (т.к. оно типа счетчик)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
'если нажали на "Еnter", то выполнить введенный запрос
If (KeyAscii = 13) And (Data1.DatabaseName <> "") _
And (Text1.Text <> "") Then FillGridQuery Text1.Text
End Sub