Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MS_VB_dop_vozm_5_04.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
1.64 Mб
Скачать
    1. Использование языка 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]