- •Институт информационных систем управления
- •Кандидат экономических наук, доцент в.А. Машурцев
- •Введение.
- •Глава 1. Vb 6.0 – среда разработки приложений.
- •1.1. Окна среды vb.
- •1.2. Файловая структура проекта.
- •1.3. Визуальное конструирование приложения.
- •1.4. Основные свойства формы и задание их значений.
- •1.5. Добавление форм к проекту и удаление форм из проекта.
- •1.6. Основные элементы управления и их свойства.
- •1.6.1. Элемент Label.
- •1.6.2. Элемент TextBox. Элемент TextBox (текстовое окно) предназначен для ввода исходной
- •1.6.3. Элементы HscrollBar и VscrollBar.
- •1.6.4. Элемент CommandButton.
- •1.7. События и методы.
- •1.8. Включение изображений в интерфейс пользователя.
- •1.8.1. Элемент Image. Элемент управления Image предназначен в основном для нанесе-
- •1.8.2. Элемент PictureBox.
- •1.9. Сохранение проекта.
- •Глава 2. Данные vb.
- •2.1. Типы данных.
- •2.1.1. Типы числовых данных.
- •2.1.1.1. Целочисленные данные.
- •2.1.1.2. Вещественные данные.
- •2.1.2. Типы нечисловых данных.
- •2.2. Объявление переменных и констант.
- •2.3. Область видимости переменных и констант.
- •2.4. Совместимость и преобразование типов данных.
- •2.5. Ввод исходных данных и вывод результатов обработки.
- •2.5.1. Окно сообщений. Оператор и функция MsgBox.
- •2.6. Форматирование вывода чисел.
- •Глава 3. Алгоритмизация вычислительных процессов.
- •3.1. Алгоритм и его свойства.
- •3.2. Типы вычислительных процессов.
- •3.3. Операторы vb.
- •3.4. Логические выражения.
- •3.5. Управляющие конструкции.
- •3.5.1. Операторы ветвлений.
- •3.5.1.1. Условный оператор.
- •3.5.1.2. Оператор выбора.
- •3.5.2. Операторы циклов.
- •3.5.2.1. Регулярный цикл.
- •3.5.2.2. Итерационные циклы.
- •3.5.2.3. Цикл перечислимого типа.
- •3.5.3. Элементы выбора.
- •3.5.3.1. Элемент CheckBox.
- •3.5.3.2. Элемент OptionButton.
- •3.5.4. Элемент управления и функция Timer.
- •3.5.5. Дата и время.
- •3.5.6. Оператор DoEvents.
- •3.5.7. Объединение кнопок в группы.
- •3.5.7.1. Элемент Frame.
- •3.6. Списки.
- •3.6.1. Элемент ListBox.
- •3.6.2. Элемент ComboBox.
- •Глава 4. Массивы.
- •4.1. Одномерные массивы.
- •4.2. Двумерные массивы.
- •4.3. Статические и динамические массивы.
- •4.4. Функция Array.
- •4.5. Генератор случайных чисел.
- •4.6. Функции lBound и uBound.
- •4.7. Массивы элементов управления.
- •4.8. Сопоставление массивов и списков.
- •4.9. Элемент msFlexGrid.
- •4.10. Упорядочение строк элемента msFlexGrid.
- •Глава 5. Процедуры и функции полоьзователя.
- •5.1. Создание стандартного модуля в приложении.
- •5.2.2. Вызов процедуры на выполнение.
- •5.3. Функции пользователя.
- •Глава 6. Обработка текстовой информации.
- •6.1. Изменение регистра символов в тексте.
- •6.2. Поиск заданной подстроки в тексте.
- •6.3. Выборка части текста.
- •6.4. Замена символов в тексте.
- •6.5. Удаление лишних пробелов из строки текста.
- •6.6. Инвертирование строк.
- •6.7. Преобразование текстовых строк в числа и наоборот.
- •6.8. Определение длины текста.
- •Глава 7. Создание меню пользователя.
- •Глава 8. Пользовательский тип данных.
- •8.1. Записи.
- •8.2. Сложные структуры данных.
- •Глава 9. Файлы.
- •9.1. Файлы последовательного доступа.
- •9.1.1. Открытие файла последовательного доступа.
- •9.1.2. Запись информации в файл.
- •9.1.3. Чтение информации из файла.
- •9.1.4. Закрытие файла.
- •9.2. Файлы произвольного доступа.
- •9.2.1. Открытие файла произвольного доступа.
- •9.2.2. Запись информации в файл.
- •9.4. Операции с файлами в vb.
- •9.5. Файловые операторы и функции обработки данных.
- •9.6. Сравнительный пример работы с файлами.
- •Глава 10. Обработка бд Access в среде vb.
- •10.1. Создание бд Access в среде vb.
- •10.2. Использование технологии Data Access Objects (dao).
- •10.2.1. Элемент управления Data.
- •10.2.2. Свойство Recordset элемента Data.
- •10.2.3. Программное связывание элементов.
- •10.3. Технология ActiveX Data Objects (ado).
- •10.3.1. Подключение ado Data к источнику данных (бд).
- •10.3.2. Подключение ado Data к источнику записей.
- •10.3.3. Элемент управления DataGrid.
- •10.4. Объекты ado.
- •10.4.1. Объект Connection.
- •10.4.2. Объект RecordSet.
- •10.4.3. Перемещение по набору записей.
- •10.4.4. Обращение к отдельным полям записи.
- •10.4.5. Выполнение запросов к бд.
- •10.5. Пример обработки бд в рамках технологии ado.
- •Глава 11. Обмен данными между приложениями.
- •11.1. Экспорт данных из бд в текстовый файл.
- •11.2. Технология внедрения и связывания (ole).
- •11.3. Связывание и внедрение на этапе design.
- •11.3.1. Связывание на этапе проектирования. Сразу же после размещения на форме элемента ole появляется
- •11.3.2. Внедрение на этапе проектирования.
- •11.4. Связывание и внедрение объектов на этапе run.
- •11.4.1. Свойства ole-контейнера.
- •11.4.2. Методы ole-контейнера.
- •11.4.3. События, связанные с ole-контейнером.
- •11.4.5. Внедрение объекта на этапе run. Для внедрения объектов в vb-приложение используется метод CreateEmbed. Синтаксис оператора, использующего этот метод:
- •Глава 12. Графические средства vb 6.
- •12.1. Управление цветом.
- •12.2. Изображения в интерфейсе проекта.
- •12.2.1. Наложение изображения на этапе проектирования. Наложение изображения на форму.
- •Восстановление утраченных графических файлов.
- •Наложение изображения на элемент PictureBox.
- •Наложение изображения на элемент CommandButton.
- •12.2.2. Наложение изображений на этапе выполнения.
- •12.3. Использование анимированных изображений.
- •12.3.1. Визуализация анимированных gif-файлов.
- •12.3.2. Визуализация на форме клипов.
- •12.4. Рисунки на графических объектах.
- •12.4.1. Элемент Shape.
- •12.4.2. Элемент Line.
- •12.5. Графические методы.
- •12.5.1. Методы для работы с изображением точки.
- •12.5.2. Метод Line.
- •12.5.3. Метод Circle.
- •12.6. Использование графики для решения отдельных задач.
- •12.6.1. Визуализация процесса сортировки элементов массива.
- •12.6.2. Принадлежность точки заданной области.
- •Приложение 1. Типовые алгоритмы обработки чисел.
- •Приложение 3. Алгоритмы обработки массивов.
- •Приложение 4. Примеры создания процедур и функций.
- •Приложение 5. Пример обработки типизированных файлов.
- •Приложение 6. Пример обработки бд Access в среде vb.
- •Оглавление
- •Глава 1. Vb 6.0 – среда разработки приложений. 4
- •Глава 2. Данные vb. 20
- •Глава 3. Алгоритмизация вычислительных процессов. 33
- •Глава 4. Массивы. 61
- •Глава 5. Процедуры и функции полоьзователя. 77
- •Глава 10. Обработка бд Access в среде vb. 110
- •Глава 11. Обмен данными между приложениями. 139
- •Глава 12. Графические средства vb 6. 150
10.2.2. Свойство Recordset элемента Data.
Создаваемый элементом Data набор записей RecordSet отображается в свойстве Recordset элемента Data. Это обеспечивает программный доступ к значениям полей текущей записи. Например, чтобы передать в переменную w значение i-го поля текущей записи, достаточно написать оператор:
w = Data1.Recordset.Fields(i).Value
Последнюю точку вместе со словом Value можно не указывать, т.к. они подразумеваются по умолчанию.
Количество полей в текущей записи позволяет определить оператор:
n = Data1.Recordset.Fields.Count,
а количество записей в наборе:
m = Data1.Recordset.RecordCount.
Нумерация как полей, так и записей в VB начинается с нуля.
Для перемещения программным путем по записям набора служат методы элемента Data:
- MoveFirst – делает текущей первую запись;
- MoveNext – делает текущей следующую запись
- MovePrevious – делает текущей предыдущую запись набора;
- MoveLast – делает текущей последнюю запись набора.
Факт выхода за последнюю запись набора можно установить, опросив значение функции EOF. Если произошел выход за последнюю запись, то эта функция примет значение True. Тогда следует вернуться в набор, например, следующим образом:
If Data1.Recordset.EOF Then Data1.Recordset. MoveLast
Добавить новую запись в набор можно с помощью метода
AddNew, а удалить текущую запись из набора – с помощью метода Delete:
Data1.Recordset.AddNew
Data1.Recordset.Delete
Эти изменения передадутся в БД либо в момент перемещения на другую запись набора, либо без перемещения с помощью метода Update:
Data1.Recordset.Update
Код будет более прозрачным и легким для восприятия, если в разделе General окна кодов формы объявить для каждого расположенного на форме элемента Data объектную переменную, например:
Private rs1 As Object, rs2 As Object,
а в процедурах формы задать их значения:
Set rs1 = Data1.Recordset: Set rs2 = Data2.Recordset
После этого в процедуре вместо, например, оператора:
If Data1.Recordset.Fields(0) = Data2,Recordset.Fields(1) Then
sv = Data1.Recordset.Fields(2) – Data2.Recordset.Fields(4)*3^2
End If
можно писать:
If rs1.Fields(0) = rs2.Fields(1) Then
sv = rs1.Fields(2) – rs2.Fields(4)*3^2
End If
т.е. всюду вместо Data1.Recordset использовать соответствующую объектную переменную. Это сократит операторы и сделает коды процедур более прозрачными для восприятия.
10.2.3. Программное связывание элементов.
Подключение элемента Data к БД, а также связывание с ним элементов, отображающих данные, может быть осуществлено программно в режиме run, т.е. без установки свойств элементов в окне свойств в режиме design. Для этого нужно указать тип используемого объекта RecordSet. Дело в том, что система заранее не знает, с каким типом данных Вы собираетесь работать: таблицами или запросами.
Существует несколько типов объектов RecordSet. Тип Table используется для работы с таблицами. Тип DynaSet является набором, который динамически меняется при модификации связанной с ним таблицы и его целесообразно использовать при работе с запросами. Фактически он является подмножеством записей существующей таблицы. Тип Snapshot является набором, соответствующим состоянию БД в момент ее открытия. В этом случае последующие изменения данных в БД не сказываются на содержимом набора RecordSet.
Итак, при программном связывании элементов управления с элементом Data нужно указать, какой тип набора записей RecordSet желательно получить. Это зависит от значения свойства RecordsetType элемента Data. Если элемент Data подключается к таблице БД, то значение этого свойства следует устанавливать равным 0, что соответствует типу Table набора RecordSet: Data1.RecorsetType = 0. Если же элемент Data подключается к запросу, то нужно установить: Data1.RecordsetType = 1, что соответствует типу Dynaset набора RecordSet. В этом случае Вы получаете возможность в процессе выполнения приложения вводить с клавиатуры разные запросы к БД. При этом следует обновлять состояние набора, отображаемого элементом Data с помощью метода Refresh.
Пример 1. Программным способом отобразить в элементе MSFlexFrid содержимое таблицы БД.
Связываем элемент управления MSFlexGrid с элементом Data:
MSFlexGrid1.DataSource = Data1
Задаем тип набора записей:
Data1.RecordsetType = 0
Пример 2. Разместить на форме текстовое окно, ввести в него запрос на языке SQL и отобразить в элементе MSFlexGrid результат выполнения этого запроса.
MSFlexGrid1.DataSource = Data1
Text1.Text = InputBox(“Введите SQL - оператор запроса”)
Data1.RecordSource = Text1.Text
Data1.RecordsetType = 1
Data1.Refresh
Описанные свойства DatabaseName, RecordsetType и RecordSourсe элемента Data обеспечивают связь с БД, но не обеспечивают доступ к данным в ней. Это делает только автоматически создаваемый при загрузке формы в ОП объект RecordSet. Значит, к моменту загрузки формы перечисленные свойства элемента Data должны быть уже заданы. Задать их можно либо в окне свойств элемента Data, либо программно, причем, только в процедуре загрузки формы и нигде больше. Если Вы задали их в окне свойств, то приложение будет непереносимым на другой носитель. Действительно, когда свойство DatabaseName устанавливается в окне свойств, то в его строке прописывается путь к БД. При переносе проекта на другом носителе прежнего пути к БД может не существовать. Поэтому целесообразно свойства элемента Data задавать в процедуре загрузки формы, чтобы приложение выполнялось всегда без повторного задания значений свойств элемента Data. Например, так:
Private Sub Form_Load()
With Data1
.DatabaseName = CurDir$ & “\ db1.mdb”
.RecordsetType = Table
.RecordSource = “Таблица1”
End With
End Sub
Только нужно помнить, что при этом файл БД должен находиться в папке проекта.
Приведем пример обработки двухтабличной БД в рамках технологии DAO. Пусть требуется решить следующую задачу:
Создать БД с таблицами:
1. Код предприятия, названия предприятия, ФИО директора.
2. Код предприятия, количество рабочих в начале предыдущего
квартала, количество уволенных рабочих в течении квартала,
количество принятых рабочих в течении квартала.
Обработав БД, получить таблицу:
3. Текучесть кадров на предприятии: код предприятия, название
предприятия, ФИО директора, текучесть кадров.
Итог: средняя текучесть кадров по всем предприятиям.
Рис. 10.2.1. Вид разработанной формы.
В разделе General формы объявляем переменные:
Private rs1 As Object, rs2 As Object
В процедуру загрузки формы записываем код:
Private Sub Form_Load()
Data1.DatabaseName = CurDir$ & "\db1.mdb"
Data1.RecordsetType = 0: Data1.RecordSource = "Таблица1"
Data2.DatabaseName = CurDir$ & "\db1.mdb"
Data2.RecordsetType = 0: Data2.RecordSource = "Таблица2"
End Sub
Процедура решения задачи
Private Sub mnuSolution_Click()
Dim i%, j%, kz%, krk%, srt!
' kz – количество записей в таблице;
‘ krk – количество рабочих в конце квартала;
‘ srt – средняя текучесть кадров
Set rs1 = Data1.Recordset: Set rs2 = Data2.Recordset
kz = rs2.RecordCount
fg.Rows = kz + 1: fg.Cols = 4
fg.FormatString = "^ Код предпр. |< Названия предпр. |< ФИО директора
|^ Текучесть кадров"
rs1.MoveFirst
i = 0: srt = 0
Do While Not rs1.EOF
i = i + 1
fg.TextMatrix(i, 0) = rs1.Fields(0)
fg.TextMatrix(i, 1) = rs1.Fields(1)
fg.TextMatrix(i, 2) = rs1.Fields(2)
rs2.MoveFirst
For j = 1 To kz
If rs1.Fields(0) = rs2.Fields(0) Then
krk = rs2.Fields(1) - rs2.Fields(2) + rs2.Fields(3)
srt = srt + krk: Exit For
End If
rs2.MoveNext
Next j
fg.TextMatrix(i, 3) = krk
rs1.MoveNext
Loop
srt = srt / kz
Text1.Text = Str(Round(srt, 2))
End Sub
Рис. 10.2.2. Вид формы с результатом решения задачи.
Чтобы исправить значение поля некоторой записи в таблице БД, нужно обратиться е методу Edit объекта RecordSet, затем ввести новое значение поля и передать это изменение в таблицу с помощью метода Update объекта RecordSet, непример:
rs.Edit: rs.Fields(5)=nf: rs.Update
Чтобы добавить в таблицу БД новую запись, нужно обратиться к методу AddNew объекта RecordSet, затем, как и при редектировании, ввести значения полей добавляемой записи и после этого обратиться к методу Update объекта RecordSet для внесения новой записи в таблицу БД.
Чтобы удалить запись из таблицы БД, нужно просто переместиться на эту запись и обратиться к методу Delete объекта RecordSet