- •В.Н.Агеев
- •А23 Программирование и основы алгоритмизации. Конспект лекций – м.: мгуп, 2012.– *** с.
- •Содержание
- •Предисловие
- •1. Понятие алгоритма в информатике. Блок-схемы алгоритмов
- •2. Типовые алгоритмы и их блок-схемы.
- •3. Алгоритмические языки и их классификация
- •Языки программи- рования
- •4. Методы объектно-ориентированного программирования
- •5. Интегрированная среда разработки Visual Basic
- •6. Программирование на языке Visual Basic
- •7. Программирование разветвляющихся процессов
- •If условие Then Оператор1 [ Else Оператор2]
- •8. Программирование циклических процессов
- •9. Графические возможности языка Visual Basic
- •10. Функции даты и времени. Объект Timer
- •11. Работа с внешними файлами и устройствами
- •Input # номер, имя_переменной
- •12. Работа с дисками и папками
- •CommonDialog1.ShowOpen
- •Open CommonDialog.FileName For Input As # 1
- •13. Работа с базой данных
- •14. Типы ошибок и методы отладки программ.
- •1. Синтаксические ошибки.
- •2. Ошибки в структуре программы.
- •3. Ошибки, возникающие во время выполнения программы.
- •4. Логические ошибки или ошибки алгоритма.
- •15. Примеры проектов
CommonDialog1.ShowOpen
Выполнение этой команды приведет к появлению на экране так называемого «файлера» – диалогового окна, с помощью которого можно выбрать нужный диск, папку и файл (см. рис.25). После выбора нужной папки и файла и нажатия кнопки «Открыть» имя выбранного файла передается свойству FileName объекта CommonDialog. После этого он может быть открыт, например для чтения, командой
Open CommonDialog.FileName For Input As # 1

Рис.25. Диалоговое окно для открытия файла
Аналогично выполняется процедура сохранения файла на диск. Предположим, что надо сохранить в текстовом файле строку S. Последовательность команд может быть такой
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As # 1
Print #1, S
Close #1
Первая команда выводит диалоговое окно (рис.26), в котором можно выбрать нужную папку и ввести имя файла в соответствующее поле.

Рис. 26. Диалоговое окно для сохранения файла
При нажатии кнопки «Сохранить» свойству CommonDialog1.FileName будет присвоено имя файла с указанием пути к нему, после чего файл будет открыт для записи.
13. Работа с базой данных
Для установления связи между базой данных (БД) и программой на Visual Basic служит элемент управления Data, который позволяет отображать в размещенные на форме текстовые окна содержимое записей базы данных. Поддерживается связь с базами данных Access, FoxPro, dBase, Paradox.
Один элемент управления Data всегда обеспечивает доступ только к одной записи в данный момент (такая запись называется текущей (current)), позволяя отображать содержимое текущей записи на форме.
При работе с многотабличной базой данных для отображения полей из нескольких связанных между собой таблиц необходимо разместить на форме несколько элементов, по числу таблиц в БД. Имена этих элементов управления будут Data1, Data2 и т.д.
С каждым элементом Data на форме необходимо связать один или несколько текстовых полей TextBox (столько, сколько надо отобразить значений полей соответствующей таблицы).
На этапе конструирования формы с помощью окна свойств объектов устанавливаются связи между элементами формы и параметрами БД, а также между текстовыми полями TextBox и элементами Data, как показано на рис.27.

Рис.27. Схема связей свойств объектов DataиTextBoxс параметрами БД
На этапе конструирования формы разместим на ней экземпляр объекта Data. Пусть его имя будет Data1. В окне свойств этого элемента необходимо присвоить свойству DatabaseName значение имени БД (точнее – выбрать из списка существующих), а свойству RecordSource – имя одной из таблиц этой БД.
Следующим шагом является размещение на форме текстового поля (TextBox). В окне свойств для этого элемента свойству DataSource (источник данных) необходимо присвоить имя Data1, а свойству DataField (поле данных) – название поля таблицы.
Пусть, например, имеется созданная в среде Access двухтабличная БД «Сессия» (файл Сессия.mdb в папке ИОСУ на диске Е: ). Первая таблица называется «Студенты», вторая – «Результаты».
В таблице «Студенты» содержатся коды студентов (поле «КС» – ключевое), фамилия (поле «Фамилия») и имя (поле «Имя»).
В таблице «Результаты» приведены результаты экзаменов по трем дисциплинам (поля «Информатика», «Математика» и «Физика»), кроме того имеется ключевое поле «КС».
Обе таблицы через ключевые поля связаны между собой.
Создадим проект на Visual Basic, в котором на экранной форме будет четыре поля Text1, Text2, Text3, Text4, Text5 (экземпляры объекта TextBox). В первые два поля должны выводиться фамилия и имя из таблицы «Студенты», в остальные – оценки по трем дисциплинам соответствующего студента из таблицы «Результаты».

Рис.28. Пример формы с данными из двухтабличной БД
P
rivate
Sub Command1_Click() ‘нажата
кнопка
«Первая»
Data1.Recordset.MoveFirst
Data2.Recordset.MoveFirst
Text1.Text = S
End Sub
Private Sub Command2_Click() ‘ нажата кнопка «Следующая»
If Not Data1.Recordset.EOF Then
Data1.Recordset. MoveNext
Data2.Recordset.MoveNext
End If
End Sub
Private Sub Command3_Click() ‘ нажата кнопка «Предыдущая»
If Not Data1.Recordset.BOF Then
Data1.Recordset.MovePrevious
Data2.Recordset.MovePrevious
End If
End Sub
Рис.29. Программный код для рассматриваемого примера
Для того , чтобы иметь возможность просматривать все записи БД, поместим на форму три кнопки Command1, Command2 и Command1, с надписями на них «Первая», «Следующая» и «Предыдущая». В соответствии с этими названиями нажатие кнопки будет приводить к перемещению по записям БД. Пример размещения элементов управления на форме показан на рис.28, а текст программы – на рис.29.
Следующий пример демонстрирует возможность объекта Dataосуществлять выборку записей из многотабличной БД. Предположим, что в условиях предыдущего примера необходимо вывести фамилии студентов, получивших по дисциплине «Информатика» оценки не ниже четверки. Этот список нужно вывести в текстовое окно.
Поскольку здесь, как и в предыдущем примере, используются две таблицы, на форме нужно разместить два экземпляра объекта Data:Data1 для связи с таблицей «Студенты» иData2 – с таблицей «Результаты». Кроме того, потребуется четыре текстовых поля:Text1 иText2 для передачи содержимого полей «Номер» и «Фамилия» из таблицы«Студенты»,Text3 иText4 для передачи содержимого полей «Номер» и «Информатика» из таблицы«Результаты» (см. рис.30).

Рис.30. Вид формы в режиме конструктора
Еще одно текстовое окно, Text5, потребуется для вывода в него списка студентов с оценками по информатике.
В окне свойств этому окну нужно присвоить параметру MultiLineзначениеTrue. Для элементовData1,Data2,Text1 иText2 параметруVisibleприсвоим значениеFalse– при открытии формы они будут невидимы.
Кроме объектов DataиTextBox, на форму поместим еще один – кнопкуCommand1с надписью «Показать».
На рис.30 показана разрабатываемая форма в режиме конструктора, а на рис.31 – в режиме запуска программы.

Рис.31.Вид формы в режиме запуска программы
(после нажатия кнопки «Показать»)
Текст процедуры Command1_Click, запускаемой при нажатии кнопкиCommand1, представлен на рис.32.

Private Sub Command1_Click ()
Data2.Recordset.MoveFirst
S =” ”
Do Until Data2.Recordset.NoMatch
Data2.Recordset.FindNext "Информатика>3"
S3 = Text3.Text
Data1.Recordset.FindFirst "Номер=" + " ' " + S3 + " ' "
S = S + Text2.Text + " " + Text4.Text + Chr(13) + Chr(10)
Loop
Text5.Text = S
End Sub
Рис.32. Программный код
Комментарий к программе. После нажатия кнопки с надписью «Показать» запускается процедура Command1_Click.
Вначале выполняется переход к первой записи в таблице «Результаты».
Затем организуется цикл Do Until…Loop, на каждом шаге которого осуществляется поиск записи, в которой поле «Информатика» содержит значение больше 3 (то есть 4 или 5). В текстовое окноText3передается значение поля «Номер» найденной записи (ключевое поле, код студента).
Следующая команда – найти запись в таблице «Студенты», у которой поле «Номер» содержит то же значение, что и в таблице «Результаты»:
Data1.Recordset.FindFirst "Номер=" + " ' " + S3 + " ' "
Следует обратить внимание на то, как записывается условие поиска: строковая переменная S3, имеющая значение кода студента, слева и справа отделяется апострофами, каждый из которых берется в кавычки (см. аналогичную команду на стр.97).
В переменную S, которой до начала цикла было присвоено значение «пустая строка», добавляется строка, составленная из значения поляText2 (фамилия) и поляText3 (оценка), кроме того, добавляются управляющие символы с кодами 13 и 10 («возврат каретки» и «перевод строки»).
Условие окончания цикла – значение True(Истина) свойстваNoMatchобъектаRecordSet.
