База данных Accese

Работа № 8

Средства VB 6 для создания, заполнения и обработки таблиц баз данных Microsoft Access

Цель работы: Изучение и использование средств, которыми располагают среда проектирования и язык VB 6, для работы с базами данных Microsoft Access. Исследование и использование инструмента VisData (Data Base Manager – Диспетчера баз данных) для создания файла базы данных и произвольного числа таблиц этой базы, а также стандартного элемента управления Data для заполнения полей таблиц значениями и нестандартного элемента MS Flex Grid для отображения заполненных таблиц на экранной форме. Исследование возможности использования в процедурах на языке VB 6 языка запросов SQL для обработки таблиц базы данных.

Контрольные вопросы:

Как с помощью Диспетчера баз данных можно создать новый файл mdb для дальнейшего включения в него произвольного числа таблиц базы данных?

Как создается новая таблица в уже созданном файле mdb? Как в таблицу включаются новые поля (столбцы)? Как определяется тип данных включаемого в таблицу поля?

Что такое индекс и как с помощью Диспетчера баз данных можно создать индекс и включить его в таблицу? 

Как присоединить элемент управления Data (Данные) к одной из таблиц базы данных, содержащихся в файле mdb? Какие два свойства при этом необходимо означить?

Какое значение свойства EOF Action элемента управления Data позволяет вносить новые записи в таблицу базы данных?

Какие два свойства текстового поля отвечают за «привязку» этого поля к элементу управления Data? Как с помощью «привязанных» текстовых полей вносить данные в таблицу базы данных?

Какое свойство элемента Data может иметь в качестве значения не только ссылку на реальную таблицу базы данных, но и выражение языка SQL, с помощью которого создается виртуальная таблица?

Как и с помощью какого выражения SQL можно программно создать реальную таблицу в файле базы данных?

Как и с помощью какого выражения SQL можно программно удалить все данные из реальной таблицы в файле базы данных?

Пример 8.1. В двух вариантах 1-го задания 7-й работы были рассмотрены две таблицы базы данных «Автосервис»:

таблица 7.1 «Автомобили»;

таблица 7.2 «Неисправности».

Для заполнения этих таблиц значениями, для их визуализации, а также для отработки запросов на SQL создается приложение, экранная форма которого в работающем состоянии показана на рис. 8.1.



Рис. 8.1. Экранная форма приложения для заполнения значениями двух таблиц файла mdb и для отработки запросов на SQL

В данном примере с помощью Диспетчера баз данных (VisData) среды проектирования VB 6 создается Access файл Автосервис.mdb с указанными двумя таблицами: Cars (Автомобили) и Disrepairs (Неисправности). Технология создания таблиц файла mdb в среде IDE VB 6 описана в пособии [2], стр. 133 – 139.

Для заполнения значениями 1-й таблицы используются текстовые поля Text1, Text2 и Text3, привязанные к элементу Data1, который, в свою очередь, привязан к таблице Cars (Автомобили) файла Автосервис.mdb.

Для заполнения значениями 2-й таблицы используются текстовые поля Text4, Text5 и Text6, привязанные к элементу Data2, который, в свою очередь, привязан к таблице Disrepairs (Неисправности) файла Автосервис.mdb. Технология «привязки» описана в учебном пособии [2] – стр. 140 – 145.

Для визуализации таблиц используются элементы из нестандартного класса «Гибкая сетка данных» (MS Flex Grid).

После заполнения таблиц пользователь может обратиться к базе данных с запросом на языке SQL. Для этой цели используется команда меню Query. Щелчок этой команды вызывает появление окна Inputbox (рис. 8.2), в котором, «по умолчанию», уже есть образец выражения SQL. Пользователь, разумеется, может ввести свой вариант запроса.



Рис. 8.2. Окно для ввода запроса на SQL

После ввода запроса и щелчка кнопки ОК происходит автоматическое формирование 3-й таблицы, запись SQL выражения в поле метки и отображение новой таблицы в гибкой сетке – элементе MSFlexGrid3 на экранной форме (см. рис. 8.1).

Опуская описание этапа проектирования интерфейса, сразу представим программный код данного приложения:

Private Sub Form_Load()

With MSFlexGrid1                                      ‘ Для таблицы Автомобили.

   .ColWidth(0) = 500:        .ColWidth(1) = 1200

   .ColWidth(2) = 1500:      .ColWidth(3) = 1000

End With

With MSFlexGrid2                                   ‘ Для таблицы Неисправности.

   .ColWidth(0) = 500:        .ColWidth(1) = 1000

   .ColWidth(2) = 3000:      .ColWidth(3) = 900

End With

With MSFlexGrid3                                  ‘ Для запроса «по умолчанию».

   .ColWidth(0) = 500:        .ColWidth(1) = 1500

   .ColWidth(2) = 1200:      .ColWidth(3) = 3000

   .ColWidth(4) = 900:        .ColWidth(5) = 1000

End With

End Sub



Private Sub mnuQuery_Click()

    sSQL$ = InputBox("Введите запрос на SQL, " & _

                   "относительно двух таблиц базы данных", "SQL", _

                   "Select car_number, car_type, disrep_name, " & _

                                         "repair_cost, Cars.disrep_code " & _

                   "From Cars Inner Join Disrepairs " & _

                   "On Disrepairs.disrep_code=Cars.disrep_code " & _

                   "Order By repair_cost")

    Data3.RecordSource = sSQL

    Data3.Refresh

    Label1.Caption = " SQL: " & sSQL

End Sub

Пример 8.2. Рассмотрим приложение, которое демонстрирует действие массовых операций языка SQL. Для этого добавим на экранную форму примера 8.1 пару элементов, представленных на рис. 8.3. Добавим также команду меню Itogi, с помощью которой будет обрабатываться таблица «Неисправности».



Рис. 8.3. Вид фрагмента окна приложения с двумя новыми элементами: Data4 и MSFlexGrid4 для отображения результатов массовых операций 

После щелчка команды Itogi элемент MSFlexGrid4 на экранной форме будет выглядеть так, как показано на рис. 8.3.

Разумеется, что элемент Data4, как и элемент Data3, должен быть привязан к тому же файлу mdb, что и элементы Data1 и Data2. А его свойство RecordSource будет означено в ходе выполнения следующей программы:

Private Sub mnuItogi_Click()

    sSQL$ = "Select Count(repair_cost), " & _

                   "CCur(Min(repair_cost)), " & _

                   "CCur(Max(repair_cost)), " & _

                   "CCur(Sum(repair_cost)), " & _

                   "CCur(Avg(repair_cost)) " & _

                   "From  Disrepairs"

    Data4.RecordSource = sSQL

    Data4.Refresh

With MSFlexGrid4

   .Row = 0

      .Col = 0:      .Text = "Показатель"

      .Col = 1:      .Text = "Количество"

      .Col = 2:      .Text = "Минимум"

      .Col = 3:      .Text = "Максимум"

      .Col = 4:      .Text = "Сумма"

      .Col = 5:      .Text = "Среднее"

   .Row = 1

      .Col = 0:      .Text = "Значение"

End With

End Sub

В ходе выполнения данной работы студенты должны выполнить 2 задания.

Задание 1. В процессе выполнения задания студенты решают задачу создания не виртуальной таблицы базы данных, как это было в примере 8.1, а реальной таблицы с именем CarDis – в файле mdb. В эту таблицу с помощью SQL запроса должны быть внесены данные из исходных двух таблиц в соответствии с предлагаемым вариантом.

Указание 1. Для создания новой таблицы можно спроектировать команду меню Create Table. Следует, однако, помнить, что эта команда однократного действия и после создания таблицы эту команду можно либо «закомментировать», либо уничтожить. Код процедуры для этой команды следующий:

Private Sub mnuCreateTable_Click()

        sSQL$ = "Create Table CarDis (car_number Text(20), " & _

                       " car_type Text(20), disrep_name Text(50), " & _

                       " repair_cost Currency, disrep_code Long)"

        Data3.Database.Execute sSQL

End Sub

Указание 2. В силу того, что при многократных запусках программы в новую таблицу записи будут добавляться (старые записи при этом удаляться не будут), для очистки таблицы предлагается создать команду меню Delete Table:

Private Sub mnuDeleteTable_Click()

         sSQL$ = "Delete From CarDis"

         Data3.Database.Execute sSQL

End Sub

Кроме того, необходимо внести небольшие коррективы в код процедуры mnuQuery_Click (см. пример 8.1): В начало процедуры следует вставить оператор:

    mnuDeleteTable_Click

А в конец процедуры следует вставить операторы:

    sSQL = "Insert Into CarDis " & sSQL

    Data3.Database.Execute sSQL

Вариант 1. В реальную таблицу CarDis внести записи, соответствующие запросу примера 8.1, но с ограничением: стоимость ремонта должна быть не менее 500 рублей, а записи должны быть отсортированы по убыванию стоимости ремонта.

Вариант 2. В реальную таблицу CarDis внести записи, соответствующие запросу примера 8.1, но с ограничением: стоимость ремонта должна быть не более 500 рублей, а записи должны быть отсортированы по возрастанию стоимости ремонта.

Задание 2. В ходе выполнения задания студенты, на базе примера 8.2 и результата выполнения задания 1 изучают действие массовых операций языка SQL на записях вновь построенной таблицы CarDis базы данных «Автосервис».

Указание. В SQL выражении, фигурирующем в коде процедуры mnuItogi_Click, следует изменить только имя таблицы после слова From.

Вариант 1. Фрагмент экранной формы с результатами должен иметь вид, представленный на рис. 8.4:



Рис. 8.4. Фрагмент экранной формы с элементами FlexGrid3 и FlexGrid4 для демонстрации отработки SQL запросов по 1-му варианту

Вариант 2. Фрагмент экранной формы с результатами должен иметь вид, представленный на рис. 8.5:



Рис. 8.5. Фрагмент экранной формы с элементами FlexGrid3 и FlexGrid4 для демонстрации отработки SQL запросов по 2-му варианту

К О Н Е Ц

7