Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект лекций по программированию.doc
Скачиваний:
183
Добавлен:
22.03.2016
Размер:
1.09 Mб
Скачать

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. Пример формы с данными из двухтабличной БД

Private 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 UntilLoop, на каждом шаге которого осуществляется поиск записи, в которой поле «Информатика» содержит значение больше 3 (то есть 4 или 5). В текстовое окноText3передается значение поля «Номер» найденной записи (ключевое поле, код студента).

Следующая команда – найти запись в таблице «Студенты», у которой поле «Номер» содержит то же значение, что и в таблице «Результаты»:

Data1.Recordset.FindFirst "Номер=" + " ' " + S3 + " ' "

Следует обратить внимание на то, как записывается условие поиска: строковая переменная S3, имеющая значение кода студента, слева и справа отделяется апострофами, каждый из которых берется в кавычки (см. аналогичную команду на стр.97).

В переменную S, которой до начала цикла было присвоено значение «пустая строка», добавляется строка, составленная из значения поляText2 (фамилия) и поляText3 (оценка), кроме того, добавляются управляющие символы с кодами 13 и 10 («возврат каретки» и «перевод строки»).

Условие окончания цикла – значение True(Истина) свойстваNoMatchобъектаRecordSet.