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будет присвоено имя файла с указанием пути к нему, после чего файл будет открыт для записи.
Работа с базой данных
Для установления связи между базой данных (БД) и программой на 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 Until … Loop, на каждом шаге которого осуществляется поиск записи, в которой поле «Информатика» содержит значение больше 3 (то есть 4 или 5). В текстовое окно Text3 передается значение поля «Номер» найденной записи (ключевое поле, код студента).
Следующая команда – найти запись в таблице «Студенты», у которой поле «Номер» содержит то же значение, что и в таблице «Результаты»:
Data1.Recordset.FindFirst "Номер=" + " ' " + S3 + " ' "
Следует обратить внимание на то, как записывается условие поиска: строковая переменная S3, имеющая значение кода студента, слева и справа отделяется апострофами, каждый из которых берется в кавычки (см. аналогичную команду на стр.97).
В переменную S, которой до начала цикла было присвоено значение «пустая строка», добавляется строка, составленная из значения поля Text2(фамилия) и поля Text3(оценка), кроме того, добавляются управляющие символы с кодами 13 и 10 («возврат каретки» и «перевод строки»).
Условие окончания цикла – значение True (Истина) свойства NoMatch объекта RecordSet.
|