- •1. Специальные конструкции языка 6
- •Введение
- •Специальные конструкции языка
- •Пользовательские типы данных
- •Типизированные файлы
- •Текстовые файлы
- •Нетипизированные файлы
- •Обработка ошибок
- •Оператор On Error
- •Объект Err
- •Обработка событий мыши и клавиатуры
- •Обработка событий мыши
- •Обработка событий клавиатуры
- •1.5. Элемент управления MaskedEdit
- •Графика
- •Элементы управления для графических изображений
- •Генерация графических изображений (примитивов)
- •Графические методы
- •Координаты элементов управления.
- •Примеры использования графических методов
- •Задания для самостоятельной работы
- •Работа с таймером
- •Анимация графических изображений
- •Основные свойства и методы
- •Примеры создания эффектов анимации
- •Варианты заданий по анимации для самостоятельной работы
- •Стандартные диалоговые окна
- •Работа с базами данных в vb
- •Элемент управления Data
- •Объект Recordset
- •Элемент управления msFlexGrid
- •Элемент управления ms Data Bound Grid
- •Использование языка sql в vb для работы с базами данных
- •Литература
Нетипизированные файлы
В файлах такого типа информация хранится в виде набора одинаковых записей определенной структуры. Размер одной записи является значением суммы размеров всех ее полей.
Для открытия файла записей необходимо использовать оператор Open, формат которого выглядит так:
Open путь [For Random] As номер Len = размер
В этом случае указывать тип с использованием словосочетания For Random необязательно, так как данный режим используется по умолчанию.
Размер используемых записей задается при помощи ключевого слова Len. Если длина записи, добавляемая в файл, будет больше указанного размера, то в результате выполнения операции возникнет ошибка.
Для занесения записей в файл используется оператор Put, формат которого следующий:
Put номер, позиция, переменная.
Под позицией понимается порядковый номер записи в нетипизированном файле.
По аналогии для извлечения определенной записи из файла в переменную соответствующего типа применяется оператор Get:
Get номер, позиция, переменная
Здесь также как и в операторе Put под позицией понимается порядковый номер записи в нетипизированном файле.
Пример 1.3. Создать файл записей a.dat, записать в него 2 одинаковые записи типа Session при помощи переменной rec1. После этого нужно извлечь вторую запись из файла в переменную rec2, изменить в ней значения полей Name, Number и Progr. Отредактированную запись следует вновь занести в файл a.dat с порядковым номером 2. После всех выполненных действий необходимо закрыть файл a.dat.
‘объявление нового типа
Private Type Session
Name as String * 30
Number As Long
Physics As Byte
Math As Byte
Progr As Byte
End Type
Option Explicit
Private Sub Form_Load()
Dim rec1 As Session
Dim rec2 As Session
Dim Fnum As Integer
Dim Nrec As Integer
Dim Fpath As String
‘ заполнение преременной rec1
With rec1
.Name = “Иванов Иван Иванович”
.Number = 123456
.Physics = 4
.Math = 5
.Progr = 3
End With
Fpath = “a.dat”
Fnum=FreeFile
‘функция Len служит для определения длины записи
Nrec = Len(rec1)
‘открытие файла a.txt
Open Fpath For Random As Fnum Len = Nrec
‘занесение двух одинаковых записей
Put Fnum, 1, rec1
Put Fnum, 2, rec1
‘извлечение второй записи в переменную rec2
Get Fnum, 2, rec2
‘редактирование rec2
With rec2
.Name=“Петров Петр Петрович”
.Number=11111
.Progr=5
End With
‘занесение измененной записи в файл
put Fnum, 2, rec2
Close Fnum
End Sub
Обработка ошибок
Оператор On Error
При работе подавляющего большинства программ в ходе их выполнения могут возникать разнообразные ошибки. К наиболее распространенным ошибкам относятся деление на ноль, ошибка при записи файла на диск, неверный формат файла и т.д. В этом случае на экране выводится стандартное системное сообщение об ошибке, и программа аварийно завершает работу.
Несмотря на то, что это чрезвычайно сложно, при создании программы следует предусмотреть все возможные ситуации, при которых могут произойти подобные ошибки, и разработать специальные процедуры, которые будут обрабатывать эти ошибочные ситуации и корректно завершать выполнение программы.
Одно из наиболее удобных средств отслеживания ошибок – это оператор On Error. Этот оператор позволяет в случае возникновения ошибки прервать выполнение программы и передать управление оператору с определенной меткой. Типичная синтаксическая структура обработчика ошибок следующая:
On Error GoTo метка
блок операторов1
метка:
блок операторов2
Здесь:
ON Error GoTo – оператор для перехвата ошибки при выполнении какой-либо операции с последующим переходом на указанную метку;
блок операторов1 – блок операторов, выполняемый в случае отсутствия ошибки в программе;
метка – строковое значение, обозначающее начало программного кода обработки ошибки;
блок операторов2 – блок операторов, выполняемый в случае возникновения ошибки.
Следует отметить, что рассмотренный оператор (On Error GoTo) должен быть расположен в программе (обработчике события) перед вызовом блока операторов, выполнение которого может привести к ошибке. В противном случае возникающая ошибка обрабатываться не будет, и выполнение программы, соответственно, будет аварийно прервано. Последним оператором в блоке операторов1 должен быть выход из процедуры Exit Sub. Это позволяет предотвратить запуск обработчика ошибки в случае нормальной работы программы. Как правило, обработчик ошибок размещается в самом конце программы или обработчика события.
Ниже приводится полный текст программы с использованием встроенных диалоговых окон [4] и обработчика ошибок. Данная программа предлагает ввести число и находит результат деления 100 на это число. Если в качестве числа будет введен ноль, слишком большое число (в данном случае больше 32 767) или вместо числа будет введена строка, то управление в программе перейдет на оператор с меткой NumErr. Здесь пользователю будет выдано соответствующее предупреждение об ошибке, и программа завершится корректно.
'Результат деления
Private Sub Form_Load()
Dim st as string
Dim x As Integer
Dim у As Single
On Error GoTo NumErr
st = InputBox(“Введите целое число“)
x = Val(st)
y=100 / x
MsgBox “Результат деления 100 на “ + Str(x) &_
“ равен ” + Str(y)
Exit Sub
NumErr:
If Err.Number = 11 then
MsgBox “Деление на ноль!”, 16
ElseIf Err.Number = 6 then
MsgBox “Введено слишком большое число!”, 16
Else
MsgBox “Неверные данные!”, 16
End If
End Sub
В данной программе также использовано свойство Number объекта Err, которое позволяет определить тип ошибки. При вводе нуля или, например, строки вместо числа возникает ситуация «деление на ноль». При вводе слишком большого числа происходит переполнение. Значения соответствующих кодов ошибок приведены в таблице раздела 1.2. В приведенном листинге программы при возникновении ошибки выводится соответствующее диагностическое сообщение и выполнение программы немедленно прекращается.
Как видно из приведенного примера оператор On Error и системный объект Err позволяют создать развернутую процедуру обработки ошибок. Для этого необходимо создать одну универсальную процедуру обработки ошибок с определенной меткой. Тогда при любой ошибке в разных местах программы переход будет происходить в одну точку, где и производится обработка ошибки любого вида.