Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7903
Скачиваний: 25

час. Стиль программирования:
"Что такое
и что такое плохо"
Тесты
1. Назовите удобный способ именования процедур и функций.
Следует использовать словосочетания, состоящие из глагола, который описывает
операцию, и имени существительного, указывающего на объект воздействия.
2. В чем заключаются положительные стороны идеи повторного применения про-
граммного кода?
Код уже готов, подвергнут отладке и тестированию.
3. Смысл префиксной, или венгерской, нотации заключается в разработке системы
сокращенных названий типов, используемых для именования переменных. Верно
ли это?
Верно.
4. Термин
процедура
используется для обозначения и подпрограмм, и функций. Верно
ли это?
Верно.
5. Назовите важное полезное эмпирическое правило, которое обусловливает прием-
лемый размер кода процедуры или функции.
Процедура должна
достаточно краткой, чтобы выполнять только те операции,
о которых свидетельствует ее название.
1. Придумайте имя функции, предназначенной для вычисления полной и частичной
сумм.
2. Предложите имена для пары функций, одна из которых просто закрывает файл, а
другая выполняет проверку корректности выполнения этой операции.
DoCloseFile и CloseFile.
3. Задайте названия переменной, предназначенной для хранения номера открытого
файла, хранения номера ошибки открытия файла, а также для процедуры, вычис-
ляющей сумму процента при известных сумме капитала и процентной ставке.
FileHandle,
и
час. ADODB — ваш верный
помощник
Тесты
1. Назовите синоним термина
провайдер.
Термин
провайдер
является новым, более широким. Он соответствует традицион-
ному понятию
источник данных.
Приложение. Ответы 455

2. С помощью какого предложения SQL
отфильтрованы данные в запросе?
WHERE.
3. Какое свойство Recordset ограничивает данные, доступные в записи?
Свойство Filter объекта
соответствует назначению предложе-
ния команды WHERE на языке SQL.
4. Назовите имя свойства для представления данных, хранящихся в поле таблицы.
Объекту какого класса оно принадлежит?
Свойство Value принадлежит объекту Field.
5. Как называется коллекция в составе объекта Recordset, предназначенная для хра-
нения данных?
Fields.
1. Исправьте текст запроса в листинге 15.6, чтобы предусмотреть возможность сорти-
ровки записей в порядке возрастания по значению поля, название которого задано
переменной
(Совет:
предложением ORDER BY.)
SQL = "SELECT * FROM MUSIC WHERE
&
SearchFieldName &
&
FindValue &
ORDER BY
& SearchFieldName
2. Поясните, каким образом код листинга 15.7 можно еще более упростить и унифи-
цировать.
Достаточно удачный способ состоит в том, чтобы передавать имя коллекции в ка-
честве аргумента функции. В этом случае код легко приспособить для работы с лю-
быми другими коллекциями.
3. Продемонстрируйте, как связать элементы произвольной коллекции с записями
набора данных. (Совет:
ключевым полем таблицы.)
Создавая элемент коллекции, добавьте в него значение ключевого поля записи:
Call
"ARTIST"
Str(
"ID"
) )
Значение ключевого поля сохраняется в коллекции в виде строки — не забудьте
выполнить обратное преобразование (в длинное целое число) при необходимости
использования значения ключа для поиска записи.
час. Применение языка SQL
Тесты
1. Что такое подчиненный (вложенный) запрос?
Вложенный запрос — это запрос, используемый в правой части одного из предика-
тов предложения WHERE, т.е. запрос, расположенный внутри другой команды SQL.
2. С какой целью употребляется служебное слово ALL вместе с UNION?
Служебное слово ALL в сочетании с UNION предписывает системе не удалять из ре-
зультата выполнения объединенного запроса повторяющиеся строки. По умолча-
нию, т.е. в отсутствие слова ALL, такие строки изымаются.
3. Можно ли применять вложенный запрос в контексте команды DELETE? Если да, то
зачем?
456 Приложение. Ответы

Да, в пределах предложения WHERE для уточнения содержимого набора удаляемых
строк на основе данных другой таблицы или нескольких таблиц.
4. Ограничиваются ли возможности хранимых процедур использованием команды
SELECT?
Нет. В теле хранимой процедуры могут использоваться почти все возможные кон-
струкции SQL — обращайтесь к документации. Другой вопрос — не во всех систе-
мах управления базами данных поддерживаются хранимые процедуры как таковые.
1. Напишите предложение WHERE с предикатом IN, позволяющее отобрать все записи
таблицы MUSIC, в поле PUBLISHER которых содержатся значения Elektra или Em-
pire.
WHERE Publisher IN (
).
2. Исправьте команду UPDATE, приведенную в строке 2 листинга 16.6, таким образом,
чтобы в верхний регистр были переведены первые символы имени и фамилии ис-
полнителя.
UPDATE Music SET First_Name
),
=
3. Создайте хранимую процедуру, позволяющую удалить из таблицы
запись по
заданному значению поля
PARAMETER [The_Artist] TEXT;
DELETE FROM Music WHERE Last Name = [The A r t i s t ]
час. Отладка кода
Тесты
1. Как называется класс, содержащий основные программные средства отладки?
Debug.
2. Какие, полезные во время тестирования методы предлагаются классом, упомяну-
тым в предыдущем вопросе?
Print И Assert.
3. Какие цели преследует трассировка?
Проверка кода.
4. Следует ли удалять отладочный код из окончательной версии приложения с помо-
щью редактора или условных директив компилятора?
Никогда не удаляйте отладочный код, поскольку впоследствии, после внесения из-
менений и исправлений, он может понадобиться вновь, — пользуйтесь условными
директивами компилятора,
быстро включать отладочные процеду-
ры в окончательную версию приложения или изымать их.
1. Напишите функцию, возвращающую значение True или False в зависимости от
того, существует ли файл с заданным именем.
Sub
FileName As String } As Boolean
FileExists =
D i r ( FileName ) ) > 0
End Sub
Приложение. Ответы 457

2. Создайте тестовый код, использующий обращения к функции, построенной при
выполнении
Sub
)
MsgBox FileExists(
)
123 )
End Sub
3. Разработайте версию процедуры Trace, предусматривающую вывод информации в
текстовый файл.
Private Function
FileName As String,
As Long,
ByVal TraceMessage As Variant ) As String
GetTraceOutput =
& FileName
&
& TraceNumber &
в
& Now
& vbCrLf & TraceMessage & vbCrLf
End Function
Private Sub
ByVal FileName As String,
ByVal TraceNumber As Long,
ByVal TraceMessage As Variant }
Dim Handle As Double
Handle = FreeFile
On Error GoTo FINALLY
Open FileName &
For Append As
FileName,
TraceNumber, TraceMessage )
FINALLY:
Close
End Sub
Sub
FileName As String,
ByVal TraceNumber As Long,
ByVal TraceMessage As Variant )
DebuggingOn Then
Call
TraceNumber,
If
End Sub
Sub
)
Call
"Test" )
End Sub
Листинг содержит образец реализации
набора процедур и функций.
(Обратите внимание, что выражение форматирования строки результата трассиров-
ки вынесено в отдельную функцию.)
час. Обработка ошибок во время
выполнения программы
Тесты
1. Какие аргументы необходимо передать методу Raise объекта класса Err, чтобы
связать сообщение об ошибке с файлами оперативной справки?
HelpFile и HelpContext.
458 Приложение. Ответы

2. Как называются
и его метод,
выводить информацию в окно
Immediate во время отладки приложения?
Объект Debug и метод Print.
3. Каково отличие обычного обработчика ошибок от того, который предназначен для
решения задачи освобождения занятых ресурсов?
Тело обыкновенного обработчика выполняется только при возникновении ошибки,
а во втором случае код работает всегда.
4. Можно ли сгенерировать стандартное сообщение об ошибке? Если да, то как и в
каких случаях это целесообразно делать?
Да. Используйте метод Raise объекта Err в обработчике ошибок с целью отобра-
жения информации в тех проблемных ситуациях, для которых специальные дейст-
вия вами не предусмотрены.
1. Создайте обработчик, предусматривающий принудительное присвоение объекту
класса Recordset значения Nothing.
Set RS = Nothing
End Sub
End Function
2. Исправьте код листинга 18.3 в предположении, что пользователь может удалять
файл, помеченный атрибутом "только для чтения".
Sub DeleteFile(
FileName As String )
On Error GoTo EXCEPT
Kill FileName
Exit Sub
Const
Const ACCESS_ERROR = 75
Select Case
Case 53:
If
&
& FileName &
& vbCrLf & "Попробуем
vbRetryCancel ) = vbRetry) Then
FileName =
"Введите имя
"Имя
)
If (FileExists( FileName
Then Resume
End If
Case 75:
If (MsgBox(
&
& FileName &
& vbCrLf
"Файл только для чтения.
vbYesNo ) = vbYes) Then
Call
FileName,
)
Resume
End If
Case Else
Call RaiseError( Err )
End Select
End Sub
3. Напишите команду генерации сообщения об ошибке отсутствия файла, предусмат-
ривающую задание пользовательского номера ошибки.
Call
vbObjectError + 100,
"Файл не найден" }
Приложение. Ответы 459