Операторы, используемые в microsoft excel

      Комментарии к записи Операторы, используемые в microsoft excel отключены
Операторы Значение
Арифметические
+ — / * Сложение, вычитание, деление, умножение
% Процент (например, 5% в формулах рассматривается как 0.05 )
^ Возведение в степень (например, 2.3 ^ 3 = 12.167)
Операторы сравнения
= Равно, больше, меньше
= Больше или равно, меньше или равно, не равно
Текстовый оператор
Объединение последовательностей символов в одну последовательность (конкатанация)
Адресные операторы
Диапазон (двоеточие) Ссылка на все ячейки в границах диапазона включительно
Объединение (запятая) Ссылка на объединение ячеек диапазонов
Пересечение (пробел) Ссылка на общие ячейки диапазонов

Для ввода формулы в ячейку необходимо выполнить следующие действия:

1) Выделить нужную ячейку.

2) Указать в качестве первого символа знак равенства; для этого ввести знак = или щелкнуть мышью по знаку = в строке формул.

3) Ввести часть формулы до той позиции, в которой должна указываться первая ссылка.

4) Задать ссылку на нужную ячейку или диапазон ячеек. При этом могут использоваться два способа: ссылка на эти элементы вводится посимвольно с клавиатуры или ввод осуществляется щелчком мыши на нужной ячейке (методом указания). Последний способ предпочтительней, поскольку ввод ссылок с клавиатуры требует больших временных затрат и сопряжен с ошибками.

5) Ввести оставшуюся часть формулы. Завершить ввод нажатием клавиши . В ячейке при правильном вводе формулы появляется результат вычисления. Саму формулу можно увидеть теперь в строке формул.

Если формула введена с ошибками или вычисление результата по формуле невозможно, то в ячейке появляется сообщение об ошибке (Таблица 8.2).

Таблица 8.2

Сообщения об ошибках в формуле

Текстсообщения Возможная причина Способ устранения
# ДЕЛ/0! Деление на ноль Проверить и изменить содержимое влияющей ячейки
#ССЫЛКА! Указана некорректная ссылка Проверить и исправить ссылки, особенно внешние: правильно ли указан путь, не был ли переименован файл, лист и т.д.
#ЧИСЛО! Невозможность вычисления значений (например, извлечение квадратного корня из отрицательного числа) Проверить правильность задания аргументов функции
#ПУСТО! Неверно указано пересечение диапазонов ячеек (нет общих ячеек) Задать правильно диапазон ячеек
#ЗНАЧ! Задан аргумент недопустимого типа Уточнить типы аргументов для применяемой функции
#ИМЯ! Указано недопустимое имя операнда (например, функции или диапазона) Проверить правильность написания имен
#Н/Д! Нет данных в ячейке, на которую сделана ссылка Проверить содержимое влияющей ячейки

Для поиска ошибок в формулах Excel предоставляет специальный режим, в котором на экране графически отображаются связи между влияющими и зависимыми ячейками. Для включения этого режима надо воспользоваться пунктом меню Вид/Панели инструментов/Настройка/Зависимости, и тогда можно визуально наблюдать, какие ячейки влияют на содержимое той или иной ячейки (выявить влияющие ячейки) и на содержимое каких ячеек она сама влияет (выявить зависимые ячейки).

A B C D
=A1+B1+C1
=A1+A2

Рис. 8.4. Пример использования ссылок

В примере на рис. 8.4 в ячейки A1:C2 введены числа, а в ячейке A3 записана формула =A1+A2, т.е. сумма элементов первого столбца, и в ячейке D1 – формула =A1+B1+C1, т.е. сумма элементов первой строки. Обе формулы имеют относительные ссылки. При вычислении по этим формулам в ячейках A3 и D1 будут отображены значения 79 и 56, соответственно. Если использовать режим заполнения, указав ячейку A3 и заполнив ячейки B3 и C3, то в них появятся формулы =B1+B2 и =C1+C2, т.е. суммы второго и третьего столбца соответственно. При копировании ячейки D1 в ячейку D2 в последней будет записана формула =A2+B2+C2, т.е. сумма второй строки, равная 75.

Изменим ссылки в обеих исходных формулах. В ячейку A3 запишем формулу =$A$1+A2, а в ячейку D1 – формулу = A1+$B$1+C$1. При копировании первой формулы в ячейки B3 и C3 в них появятся записи =$A$1+B2 и =$A$1+C2, соответственно. При копировании второй формулы в ячейку D2 в последней появится запись = A2+$B$1+C$1. Так как в формулах указаны абсолютные ссылки (перед номером строки или именем столбца стоит знак $), то при копировании формулы из одной ячейки в другую такая ссылка в формуле не изменяется. Если надо найти сумму соседних ячеек, то можно воспользоваться кнопкой ? (автосуммирование) панели инструментов Стандартная. Для этого требуется выделить ячейки, которые надо сложить, вместе с ячейкой, в которой будет находиться результат суммирования, и нажать кнопку ?.

Excel содержит обширный список функций, по которым выполняются вычисления. Для вычисления значений функций используются аргументы. Аргументы функций записываются в скобках, причем задаваемые аргументы должны иметь допустимые для данного аргумента значения. Функция вводится в ячейку как часть формулы. Если функция стоит в самом начале формулы, то ей должен предшествовать знак = , как и во всякой другой формуле. Чтобы выполнить расчет, используя функцию, нужно предпринять следующие действия:

1) Выбрать меню Вставка/Функция или нажать кнопку fx панели инструментов Стандартная.

2) Выделить в левом окне нужную категорию, а в правом требуемую функцию и щелкнуть дважды по имени функции или нажать кнопку ОК (Рис. 8.5).

3) Указать аргументы.

Рис. 8.5. Окно, содержащее список функций

На первом шаге выбрана математическая функция SIN(), на втором шаге указывается аргумент функции.

Данные, содержащиеся в таблице, можно отобразить графически в виде диаграммы. Построение диаграмм выполняется с помощью Мастера диаграмм, который можно вызвать кнопкой панели инструментов Стандартная или с помощью меню Вставка/Диаграмма. Диаграмма отображает зависимость значений, образующих ряды данных, от признаков, называемых категориями. Например, на любой диаграмме, которая показывает изменение величин во времени, категорией будет время. Ряды данных могут быть в строках или столбцах таблицы. Категории часто размещаются в первом столбце или в первой строке. Для примера приведена таблица 8.3. В ней ряды данных – Продажи, Расходы, категории данных – Годы. На рис. 8.6 показаны соответствующие диаграммы.

Таблица 8.3

Ряды и категории данных

Год 1 Год 2 Год 3 Год 4 Год 5
Продажи

Расходы

Рис. 8.6. Диаграммы в виде графиков и гистограмм

Рис. 8.7. Окно выбора типа и вида диаграммы

Построение диаграмм состоит из следующих шагов:

1) выделить диапазон, содержащий ряды данных с подписями – с именами строк или столбцов,

2) вызвать мастер диаграмм,

3) выбрать тип и вид диаграммы (Рис. 8.7), нажать кнопку Далее,

4) во вкладке Диапазон данных (шаг 2 мастера диаграмм) уточнить (при необходимости) положение рядов данных, а во вкладке Ряд указать местоположение подписей оси Х – категорий,

5) ввести необходимые заголовки (название диаграммы, названия осей) и условные обозначения, если они необходимы,

6) разместить диаграмму на том же листе, где находится таблица или на отдельном листе.

Форматирование элементов диаграммы выполняется следующим образом. Щелкнув правой кнопкой мыши на элементе диаграммы, надо выбрать команду Формат, а затем требуемую вкладку для форматирования диаграммы.

8.5. Сортировка, консолидация данных, сводные таблицы

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

Консолидация данныхпозволяет создать таблицу-сводку по одной или нескольким категориям данных, используя один или несколько блоков данных. При выполнении консолидации надо задать тип функции (например, СУММ или СРЗНАЧ), по которой будут вычисляться итоговые значения. Рассмотрим смысл консолидации на примере компьютерной фирмы, имеющей три филиала (Таблица 8.4). Надо построить таблицу, содержащую консолидированные данные по всем филиалам, т.е. суммарный объем продаж компьютеров, мониторов, процессоров и материнских плат. Для получения этой таблицы надо выполнить следующие действия:

1) Выделить ячейку, которая будет соответствовать левому верхнему углу таблицы консолидированных данных. В нашем примере пусть это будет ячейка A22.

2) Выбрать пункт меню Данные/Консолидация (Рис. 8.8).

3) В окне Консолидация указать функцию.

4) В строке Ссылка щелкнуть мышью по стрелке в правом углу и выделить первую исходную область, в примере – A6:E9 – она оконтурится мерцающим пунктиром.

5) Щелкнуть кнопку Добавить.

6) Повторить действия 4 – 5 для следующих диапазонов (A11:E14 и A16:E19).

7) Установить флажок Значения левого столбца и нажать кнопку OK (Рис. 8.8).

Таблица 8.4

Получение таблицы, содержащей консолидированные данные

A B C D E
Объем продаж филиалами в 1999 г.
Название Объем продаж по кварталам, тыс.руб.
I II III IV
Филиал 1
Компьютеры
Мониторы
Процессоры
Материнские платы
Филиал 2
Компьютеры
Мониторы
Процессоры
Материнские платы
Филиал 3
Компьютеры
Мониторы
Процессоры
Материнские платы
Филиалы 1 — 3 (всего по фирме)
Компьютеры
Мониторы
Процессоры
Материнские платы

Рис. 8.8. Диалоговое окно, открывающееся при выборе пункта меню Данные/Консолидация

Еще один эффективный способ обобщения табличных данных — построение сводных таблиц. Одна из особенностей этого способа состоит в том, что он применим только к однородным табличным данным. Так, таблица 8.4 уже сложна для мастера сводных таблиц – мешают подзаголовки с названиями филиалов. Поэтому преобразуем ее в таблицу 8.5.

Таблица 8.5

Исходные данные для построения сводной таблицы

A B C D E F
Объем продаж филиалами по кварталам 1999 г.
Филиал Название I II III IV
Филиал 1 Компьютеры
Филиал 1 Мониторы
Филиал 1 Процессоры
Филиал 1 Материнские платы
Филиал 2 Компьютеры
Филиал 2 Мониторы
Филиал 2 Процессоры
Филиал 2 Материнские платы
Филиал 3 Компьютеры
Филиал 3 Мониторы
Филиал 3 Процессоры
Филиал 3 Материнские платы

Теперь для построения сводной таблицы необходимо выполнить следующую последовательность действий:

1) вызвать мастер сводных таблиц с помощью пункта меню Данные/Сводная таблица, указать источник данных (в списке или базе данных), нажать кнопку Далее;

2) указать диапазон, в котором находятся исходные данные (в нашем примере A3:F15); если ячейки выделены заранее, то программа определит диапазон по выделению; нажать кнопку Далее;

3) создать макет сводной таблицы, используя известные поля; в нашем примере надо переместить мышью кнопку поля Филиал в область Страница (Рис. 8.9), кнопку поля Наименование – в область Строка, а кнопки I, II, III, IV – в область Данные; нажать кнопку Далее;

4) указать ячейку, которая будет соответствовать левому верхнему углу таблицы, нажать кнопку Готово.

Рис. 8.9. Создание макета сводной таблицы

Сводная таблица, созданная для нашего примера (Таблица 8.6), в первой строке содержит поле со списком. Если список раскрыть, то из него можно выбрать конкретный филиал или все (филиалы) – в зависимости от выбора изменяется содержимое столбца Всего.

Таблица 8.6

Пример сводной таблицы

Филиал (Все)
Название Данные Всего
Компьютеры Сумма по полю I
Сумма по полю II
Сумма по полю III
Сумма по полю IV
Материнские платы Сумма по полю I
Сумма по полю II
Сумма по полю III
Сумма по полю IV
Мониторы Сумма по полю I
Сумма по полю II
Сумма по полю III
Сумма по полю IV
Процессоры Сумма по полю I
Сумма по полю II
Сумма по полю III
Сумма по полю IV
Итог Сумма по полю I
Итог Сумма по полю II
Итог Сумма по полю III
Итог Сумма по полю IV

На этом завершим рассмотрение табличного процессора Excel. Как и при описании текстового процессора Word (см. раздел 7), мы не ставили перед собой задачу проиллюстрировать абсолютно все возможности данного приложения. Для более полного знакомства с Excel мы рекомендуем проделать лабораторные и контрольные работы, приведенные в [ 6 ], а также познакомиться с расширенными возможностями Excel [1,2].

Кроме консолидации данных и построения сводных таблиц, Excel предоставляет и другие возможности, позволяющие работать с электронными таблицами как с базой данных. При желании эти возможности можно изучить самостоятельно, пользуясь литературой [1,2] и встроенной справкой. Но еще лучше воспользоваться более мощными средствами, имеющимися в системах управления базами данных (СУБД), которым посвящен следующий раздел.

Контрольные вопросы к разделу 8: назначение Excel; основные понятия: электронная таблица, ячейка таблицы, адрес ячейки, ссылка, блок ячеек, текущая (активная) ячейка, рабочая книга; как скопировать, переместить или переименовать лист рабочей книги; как изменять высоту строк, ширину столбцов, как удалять и вставлять строки и столбцы; как выделить ячейку, строку, столбец, блок ячеек; установка формата выделенных ячеек – вкладки Число, Выравнивание, Шрифт, Граница, Вид; копирование формата ячеек; кнопки панели инструментов Форматирование, их применение; выполнение расчетов по формулам: ввод формулы, операторы и функции, используемые в Excel, применение относительной и абсолютной адресации; автозаполнение; построение диаграмм: ряды и категории данных, этапы построения диаграммы, форматирование элементов диаграммы; сортировка, консолидация данных, сводные таблицы.

9. Системы управления базами данных. СУБД Access

9.1. Основные понятия

База данных – это совокупность структурированных данных, относящихся к некоторой предметной области.

Предметная область – это область конкретной практической деятельности. В зависимости от круга рассматриваемых во взаимосвязи объектов и, соответственно, круга решаемых задач предметная область может быть узкой или очень широкой. Она может охватывать объекты и задачи производственной технологии в отдельном цехе или отделе, некоторые сферы деятельности предприятия, например, экономику и финансы, а, возможно, и все предприятие. В крупных организациях обычно выделяют ряд предметных областей в рамках основных служб, в каждой из которых создаются свои базы данных для решения своих задач. Но обобщенные в той или иной мере данные поступают в интегрированную базу предприятия, концентрирующую информацию, требуемую для контроля служб и отделов, для подготовки общей отчетности организации и для управления ею. В этой небольшой книге мы, конечно, не будем рассматривать крупное предприятие, а ограничимся компактными примерами, поясняющими роль баз данных.

Структурирование – это введение соглашений о способах представления данных. Это понятие близко к понятиям модель данных и формализация данных. В разделе 3 мы уже рассматривали понятие модели объекта – это формализованное описание существенных свойств объекта ограниченным набором параметров. Структуры данных — тоже объекты. Так, в реляционных базах данных, рассматриваемых далее, используются три структуры данных: таблица, запись, поле. И каждая из этих структур имеет свои свойства, описываемые параметрами. Таблица имеет имя и состоит из записей. Запись имеет номер в таблице и состоит из полей. У каждого поля есть имя, тип (текстовый, числовой и т.п.), длина в байтах. Поясним эти структуры на примере построения информационной модели конкретной предметной области.

Пусть нас интересует проблема учета всех затрат предприятия, например, строящего фабрику. Затраты должны учитываться по объектам, по видам работ и по организациям-подрядчикам. В соответствии с нашими интересами построим таблицы:

Объекты [Код об, Объект],

Работы [Код раб, Работа],

Организации [Код орг, Организация, Индекс, Город, Адрес, Телефон, Факс, Эл почта]

и собственно таблицу для учета затрат

Затраты [Код затр, Затрата, Код об, Код раб, Код орг, Дата, Стоимость].

Каждая из этих таблиц имеет имя, выделенное полужирным курсивом, и состоит из записей — строк, состав которых (перечень полей) указан в квадратных скобках. Имена полей – это имена столбцов таблицы. Курсивом выделены имена ключевых полей. Значение ключевого поля (ключа) однозначно определяет запись в таблице. По возрастанию значений ключа СУБД сортирует записи в таблицах.

Ключевые поля служат также для связывания таблиц. Например, таблица Затраты может содержать множество записей, в которых указан код одной и той же организации-подрядчика. Предположим, одна и та же организация проектировала и строила мост, подъездную дорогу, трансформаторную подстанцию и, возможно, другие объекты. При обработке записей таблицы Затраты может потребоваться факс этой организации – его легко найти в таблице Организации, которая должна содержать единственную запись с требуемым нам кодом организации в поле Код орг. Связь между этими таблицами называется связью «один ко многим» (1 ® ¥): ссылка на одну запись в таблице Организации содержится во многих записях таблицы Затраты. Если бы мы ввели еще одну таблицу – Банковские реквизиты, в которой для каждой организации-подрядчика указали бы ее код, название банка, номера счетов и другие данные, используемые при оформлении платежей, то связь между этой таблицей и таблицей Организации была бы связью «один к одному» (1 ® 1), т.к. в этих таблицах есть только по одной записи с одним и тем же значением ключевого поля Код орг. В некоторых ситуациях ключ может состоять из двух-трех полей и тогда он называется составным. Например, подразделение может идентифицироваться номером цеха и номером бригады в данном цехе, точка геофизических измерений может идентифицироваться номером профиля и номером точки на этом профиле и т.п.

Для ключевого поля СУБД строит индекс – вспомогательную таблицу, содержащую для каждого значения ключа адрес записи в основной таблице. Поэтому, если требуется запись с определенным значением ключа, то она легко находится по индексу. Если же в таблицу вставляется новая запись, то сортировке подвергается только индекс, но не записи таблицы.

Итак, в нашем примере база данных охватывает несколько взаимосвязанных таблиц «объекты-свойства». Такие базы данных называются реляционными. Это понятие (relation – отношение) было введено известным американским специалистом в области систем управления базами данных И.Ф.Коддом. В 1994 г. отмечалась 25 годовщина с того момента, как И.Ф.Кодд (тогда научный сотрудник корпорации IBM) предложил реляционную модель. Тем не менее первая коммерческая реляционная СУБД, названная Oracle [14], появилась только в 1979 г. Она была разработана небольшой компанией Silicon Valley. Сегодня это Oracle Corporation – крупнейший в мире поставщик реляционных СУБД и сопутствующих программных продуктов. Первой СУБД клиент/сервер стал выпущенный в 1985 г. Oracle 5. В настоящее время широкое распространение получили более поздние реляционные СУБД, созданные корпорациями Oracle, Sybase, Microsoft и некоторыми другими. Современные ведущие реляционные СУБД сочетают реляционную модель данных с технологией клиент/сервер и с объектно-ориентированным подходом к созданию программных средств. На ЭВМ третьего поколения имели место многочисленные попытки применения иерархических и сетевых СУБД. Они оказались слишком сложными для восприятия пользователями и, кроме того, в них были ограничены или полностью отсутствовали возможности динамического изменения структуры баз данных. Последнее ограничение в некоторой степени присуще и реляционным СУБД, но все-таки с помощью языка SQL (см. подраздел 9.4) и другими методами здесь не так уж трудно изменить состав записей в таблице или создать новую таблицу и связать ее с имеющимися в рамках действующей СУБД.

Важнейшим достоинством концепции баз данных (в отличие, например, от обработки данных в автономных файлах) является введение набора стандартных структур, в которые, как в контейнеры, вкладываются данные. Планируя работу с данными в конкретной предметной области, после уяснения основных задач решают вопросы организации данных: как сгруппировать данные в таблицы, какие поля и каких типов, предусмотреть в каждой таблице, как связать таблицы друг с другом и т.п. Решение этого комплекса вопросов называют построением информационно-логической (инфологической) модели, которая отражает предметную область в виде совокупности информационных объектов и их структурных связей.

Только после решения вопросов организации данных приступают к разработке приложений – многофункциональных программ, осуществляющих преобразования данных путем их извлечения из одних таблиц, проведения расчетов и размещения результатов в других таблицах базы данных. Такой подход, во-первых, гарантирует, что каждый новый фрагмент данных, полученный предприятием, окажется «на своем месте» — в конкретной таблице конкретной базы данных, а, во-вторых, отпадает необходимость в разработке огромного числа процедур обработки данных. Последнее объясняется тем, что типовые операции над содержимым структур данных (таблиц, записей, полей) уже запрограммированы и входят в состав СУБД – ведь системы управления базами данных как раз и предназначены для создания баз данных и последующего манипулирования этими данными. СУБД, работающую со структурами данных, можно сравнить с техническими средствами на современном транспорте – они работают с контейнерами, не зависимо от того, что в этих контейнерах перевозится в конкретном случае.

9.2. Нормализация отношений (таблиц) и обеспечение целостности данных в реляционной базе данных

В терминологии реляционных баз данных таблицы называют отношениями – ведь, включая в записи таблицы определенные поля, мы устанавливаем отношения между информационными объектами. Поскольку одни и те же данные можно по-разному сгруппировать в таблицы, то требуются некоторые правила, оптимизирующие группировку полей — свойств объектов. Такие правила были сформулированы применительно к реляционным базам данных. Это правила нормализации отношений.

Нормализация отношений – формальный аппарат ограничений на формирование отношений (таблиц), который позволяет устранить дублирование, обеспечивает непротиворечивость хранимых данных, уменьшает трудозатраты на их ввод и корректировку. И.Ф.Коддом выделены три нормальные формы отношений и предложены методы преобразования отношений к третьей, самой совершенной нормальной форме.

Отношение считается нормализованным, или приведенным к первой нормальной форме, если все его атрибуты (свойства объектов, описываемые в полях записей) простые, т.е. далее неделимы. Отношение Организации (см. подраздел 9.1) можно считать приведенным к первой нормальной форме. Единственный его атрибут, который теоретически еще можно разделить на части, — это Адрес. Но практически этот атрибут уже не делим, так как улица и дом, где расположена каждая организация, нам не могут потребоваться в отдельности. А такие атрибуты, как Город, уже отделены от адреса. Так что, если нам потребуется какая-нибудь сводка по организациям-подрядчикам, расположенным в определенном городе, то мы легко сможем отобрать соответствующие записи.

Отношение находится во второй нормальной форме, если оно приведено к первой нормальной форме, и его каждый неключевой атрибут функционально зависит от ключа. Функциональная зависимость от ключа означает, что в экземпляре информационного объекта (в записи таблицы) конкретному значению ключа соответствует определенное значение описательного атрибута. Так, в таблице Затраты нашего примера коду (например, номеру) каждой затраты соответствует ее название, код объекта, в который вложены средства, коды вида работ и организации-подрядчика, дата и сумма платежа. Перечисленные атрибуты функционально зависят от ключа Код затр. Если бы ключ был составным, то для приведения отношения ко второй нормальной форме потребовалась бы функционально полная зависимость атрибутов от ключа. Она заключается в том, что каждый неключевой атрибут функционально зависит от ключа, но не находится в функциональной зависимости ни от какой части составного ключа.

Понятие третьей нормальной формы основывается на понятии нетранзитивной зависимости [4]. Транзитивная зависимость наблюдается, если один из атрибутов зависит от ключа, а другой – от этого атрибута. Например, если в таблицу Затраты включить не только код организации, но и город, в котором она расположена, то получится, что атрибут Код орг функционально зависит от ключа Код затр , а атрибут Город зависит, в свою очередь, от атрибута Код орг и, следовательно, транзитивно зависит от ключа.

Отношение находится в третьей нормальной форме, если оно находится во второй нормальной форме, и каждый неключевой атрибут нетранзитивно зависит от первичного ключа. Если бы мы включили в записи таблицы Затраты не только код организации-подрядчика, но и ее атрибуты (название, адрес и др.), то отношение уже не находилось бы в третьей нормальной форме, а это резко осложнило бы работу с базой данных. Во-первых, во все записи таблицы Затраты, где в качестве подрядчика выступает эта организация, пришлось бы вводить не только ее код, но и длинные названия, дублируя их многократно. Во-вторых, в случае изменения адреса, факса или другой характеристики организации пришлось бы вносить коррективы не в единственную запись таблицы Организации, а во множество записей таблицы Затраты.

Приведенный пример показывает, что казалось-бы теоретическое понятие нормализации отношений играет важную практическую роль, позволяя устранить дублирование данных, облегчить их ввод и корректировку в базе данных. Другое важное понятие – обеспечение целостности данных в базе данных. Этот термин подразумевает, что в СУБД должны иметься средства, не позволяющие нарушать корректность и полноту хранимой информации. Например, СУБД обычно содержат средства поддержания ссылочной целостности. Так, если мы попытаемся в запись таблицы Затраты ввести код объекта 777, а в таблице Объекты еще нет объекта с кодом 777, то СУБД должна воспрепятствовать нашему намерению, если, конечно, мы выбрали соответствующий режим ее работы. Кроме того, когда мы вводим новую запись, СУБД проверяет уникальность ее ключа, обеспечивая целостность таблицы. Наконец, СУБД проверяет целостность домена. Домен – это множество допустимых значений столбца. Так в столбец Код орг могут входить только целые числа. Если при вводе записи введем в поле Код орг хотя бы одну букву или действительное число, запись не будет включена в таблицу.

Дальнейшее изложение ориентировано на изучение возможностей СУБД Access, но прежде приведем схему [4] обобщенной технологии работы с СУБД (Рис. 9.1).

9.3. Работа с СУБД Access

Работу с СУБД Access рассмотрим на уже упоминавшемся примере учета затрат предприятия. Последовательность действий в основном будет соответствовать приведенной схеме (см. рис. 9.1).

Сначала создадим пустую базу данных “Затраты”, а затем – пустые таблицы этой БД, т.е. структуру таблиц. Для этого откроем приложение Access, выберем пункт меню Файл/Создать, в открывшемся диалоговом окне подтвердим желание создать новую БД нажатием кнопки Ok. После этого откроется стандартное диалоговое окно Сохранить как (см. подраздел 2.3). В нем надо выбрать каталог для размещения новой базы данных и дать имя файлу, например, Затраты.mdb. Этот файл будет содержать описание структуры таблиц, сами таблицы, формы, запросы и отчеты, которые будут созданы в соответствии с нашей технологической схемой (см. рис. 9.1). На рис. 9.2 показано окно приложения Access. В этом окне после создания пустой базы данных “Затраты” появится окно базы данных с заголовком “Затраты: база данных”, только в этом окне еще не будет перечня таблиц и, конечно, в окне приложения Access еще не будут открыты окна таблиц для просмотра и корректировки наших четырех таблиц. На рисунке эти таблицы показаны заранее, чтобы читатель яснее представлял то, что еще предстоит создать.

Рис. 9.1. Схема обобщенной технологии работы с СУБД

Теперь, когда пустая база данных существует, создадим пустые таблицы, т.е. пока только определим их структуру – опишем каждое поле записи. Начинать надо со вспомогательных таблиц Объекты, Работы и Организации. Для создания таблицы Объекты в окне базы данных (Затраты: база данных) нажмем кнопку Таблицы (вверху), а затем кнопку Создать (справа). В открывшемся диалоговом окне выберем из списка Конструктор. После этого откроется диалоговое окно Объекты: таблица – на рис. 9.3 оно показано слева. В этом окне в графе Имя поля введем Код об, а в поле со списком (см. подраздел 2.2) Тип данных выберем Числовой. После этого в поле со списком Размер поля выберем Целое. Затем, нажав на панели инструментов кнопку с изображением ключа, сделаем поле Код об ключевым. Теперь определим второе поле – поле Объект. В графу Имя поля введем его название, а в поле со списком Тип данных выберем Текстовый. Длина текстового поля по умолчанию равна 50 байтам, и это нас устраивает. После этого окно, в котором мы определяли поля таблицы Объекты, можно закрыть с помощью кнопки системного меню (в строке заголовка окна, справа). При закрытии этого окна появится диалоговое окно, в котором надо задать имя таблицы – “Объекты”. Теперь таблица создана, ее можно открыть с помощью кнопки Открыть в окне базы данных и ввести в нее записи (см. рис. 9.2). Для ввода данных надо “встать” в нужное поле с помощью щелчка мыши или с помощью клавиш перемещения курсора и вводить данные в это поле. После ввода значения нажимают клавишу- этим завершается ввод данных в ячейку таблицы, и курсор перемещается в следующее поле записи или в первое поле очередной записи. Для перемещения курсора также можно пользоваться клавишамии +. Кроме того, перемещаться по записям таблицы помогает навигатор – линейка с кнопками внизу каждой таб
лицы (см. рис. 9.2).

Рис. 9.2. Рабочее окно СУБД Access с открытыми таблицами БД «Затраты»

Таблицы Работы и Организации создаются точно так же, как таблица Объекты, только в таблице Организации больше полей. А вот создание таблицы Затраты (см. окно Затраты: таблица на рис. 9.3) требует дополнительных пояснений по поводу определения полей Код об , Код раб , Код орг. Каждое из этих полей необходимо определить как поле со списком. На рис. 9.3 показано, как это сделано для поля Код об. После определения типа этого поля (числовой) и уточнения его общих параметров (целое) с помощью вкладки Общие, переходим на вкладку Подстановка – она показана на рисунке справа, внизу. Здесь в полях со списком выбираем тип элемента управления (поле со списком), тип источника строк (таблица/запрос), источник строк (таблица Объекты), присоединенный столбец (первый) и число столбцов в списке (2). Надо указать также ширину столбцов и списка, например, 1; 7 см – столбцы, 8 см – весь список. Теперь при вводе данных в поле Код об (прямо в таблицу Затраты или с помощью формы — рис. 9.4) можно не вспоминать коды объектов, а выбирать их из списка, в строках которого содержатся и коды и названия – ведь мы включили в список поля Код об таблицы Затраты два столбца из таблицы Объекты, причем полю Код об таблицы Затраты соответствует именно первый (присоединенный) столбец таблицы Объекты. Для того чтобы список появился, надо просто щелкнуть мышью по стрелке у правого края поля Код об. Таким образом, Access предоставляет удобные средства для ввода и корректировки данных. Но еще удобнее для ввода данных в таблицу с большим числом полей использовать форму (см. форму Затраты на рис. 9.4).

Рис. 9.3. Создание таблиц Объекты и Затраты: определение имен и типов полей

Схема данных

Рис. 9.4. Использование формы для ввода и корректировки данных.

Формирование или корректировка запроса в режиме конструктора

На рисунке форма Затраты изображена справа, вверху. Если в таблице мы видим сразу много записей, то в форме видны поля только одной записи, но зато сразу видны все поля – даже если запись очень длинная. Кроме того, в форму Затраты можно включить поля не только из таблицы Затраты, но и из других таблиц, если, например, мы хотим видеть в форме не только коды (объекта, вида работ, организации), но и соответствующие названия (см. Рис. 9.4). Правда, для этого надо перед созданием формы создатьсхему данных. Для этого можно воспользоваться пунктом меню Сервис/Схема данных или соответствующей кнопкой на панели инструментов. В появившемся диалоговом окне надо выбрать таблицы, включаемые в схему. После этого появится схематическое изображение таблиц в виде прямоугольников, содержащих список полей (см. рис. 9.4). После этого остается с помощью мыши соединить поля Код об, Код раб, Код орг таблицы Затраты с ключевыми полями других таблиц – на схеме появятся стрелки с указанием типа связи (см. подраздел 9.2). Если по стрелке щелкнуть правой клавишей мыши, то всплывет меню, позволяющее изменить свойства связи: например, можно, выбрав метод Изменить связь, установить в очередном диалоговом окне флажок Обеспечение целостности данных (см. подраздел 9.2). На рис. 9.4 схема данных изображена не в момент ее создания, а при создании запроса – схема данных используется всегда, когда данные берутся из нескольких связанных таблиц. Но вернемся к созданию формы.

Для создания формы Затраты в окне базы данных нажмем кнопку Формы (слева), а затем кнопку Создание формы с помощью Мастера (справа). После этого откроется диалоговое окно, позволяющее выбрать таблицы (или запрос), а из них — поля, включаемые в форму. Далее форма создается автоматически, почти без участия пользователя. При вводе данных с помощью формы для перехода к очередной, предыдущей, к первой или последней записи таблицы используется навигатор – как и при работе с таблицей. Важно понимать, что форма – это не самостоятельный информационный объект, а только удобный способ визуализации записей таблиц, ввода в них данных и их корректировки.

Запросы создаются с целью отбора данных из таблиц по некоторым критериям. Например, создадим запрос Затраты за период, содержащий данные о затратах за любой период, который выберет пользователь с помощью параметров Дата1 и Дата2. Чтобы создать запрос, в окне базы данных нажмем кнопку Запросы (слева), а затем кнопку Создание запроса с помощью конструктора (справа). В следующем диалоговом окне выберем таблицы, из которых собираемся отбирать данные, и получим окно, изображенное на рис. 9.4, внизу. В этом окне в полях со списками Имя таблицы и Поле надо выбрать поля, включаемые в запрос, ниже можно выбрать вариант сортировки записей и указать условия их отбора. Закрыв окно, можно запомнить созданный запрос. При его просмотре мы видим виртуальную таблицу (представление [14]), включающую только те данные, которые мы отобрали. Если изменить данные в исходных таблицах, то результат просмотра запроса также изменится.

Результаты запроса удобно использовать в качестве источника информации для составления отчета. На рис. 9.5 показан отчет Затраты по объектам за первый квартал 1998 года. В этот отчет включены данные из запроса Затраты за период. Отчет получен с помощью мастера отчетов. В окне базы данных надо нажать кнопку Отчеты (слева), а затем кнопку Создать отчет с помощью мастера (справа), далее выбрать запрос Затраты за период — в качестве источника данных. После этого, делая выбор в предлагаемых диалогах, остается уточнить перечень полей, включаемых в отчет, вариант группировки и сортировки записей, вариант вывода итоговых строк и ориентацию страниц. Отчет в сочетании с запросом позволяет отобрать из базы данных требуемую информацию, сгруппировать итоговые записи (на рис. 9.5 группировка выполнена по объектам) и автоматически получить итоговые строки. Отчет можно напечатать, выбрав пункт меню Файл/Печать. Наконец, в отчет нетрудно внести редакционные изменения, но не в режиме создания с помощью мастера отчетов, а в режиме конструктора. Так в нашем примере слово Sum, которое процедура Мастер отчетов вставляет в итоговые строки, заменено на слово Сумма. Вообще в режиме конструктора можно изменять и таблицы, и формы, и запросы, и отчеты.

Рис. 9.5. Типичный вид отчета, получаемого с помощью СУБД Access

Завершая краткое рассмотрение СУБД Access, подчеркнем важную роль запросов. Именно с помощью запросов в любой СУБД можно отбирать данные по многим критериям, сортировать записи и, вообще, выполнять многие операции манипулирования данными. В основе этих операций – инструкции языка структурированных запросов (SQL). Когда мы создаем запрос, используя через процедуру Конструктор его визуальное конструирование, Access формирует текст этого запроса на языке SQL. Этот текст можно увидеть и при желании изменить в момент просмотра запроса. Для просмотра запроса мы нажимаем в окне базы данных кнопку Запросы и двойным щелчком мыши открываем запрос. Эти действия приводят к появлению на экране сначала предложений по вводу значений параметров, а затем виртуальной таблицы, являющейся результатом выполнения запроса. Если теперь в меню приложения Access выбрать пункт Вид/Режим SQL, то мы увидим наш запрос не в виде таблицы отобранных данных, а в виде SQL-инструкций. Эти инструкции можно изменить и с помощью пункта меню Запрос/Запуск или кнопки Запуск на панели инструментов (красный восклицательный знак) выполнить запрос и получить новую таблицу с отобранными данными.

Основные инструкции (команды) языка SQL мы считаем полезным рассмотреть, т.к. представление о языке SQL позволяет лучше понять возможности манипулирования данными, имеющиеся в современных СУБД. В русских переводах компьютерной литературы инструкции SQL и других языков программирования часто называют операторами. В англоязычных изданиях применяются термины statement или instruction.

9.4. Основные возможности языка структурированных запросов (SQL)

Сразу заметим, что в этой небольшой книге мы не ставим задачу дать описание SQL, а всего лишь приведем обзор основных команд и на нескольких примерах покажем возможности SQL-запросов. Что касается точного описания инструкций SQL, то это описание не совсем совпадает для различных СУБД. Наиболее известные серверы реляционных баз данных (Oracle, MS SQL Server, Cybase, Informix и некоторые другие) поддерживают ту или иную версию или уровень стандарта ANSI / ISO SQL (ANSI – Американский национальный институт стандартов, ISO – Международная организация стандартизации), но для повышения эффективности каждый коммерческий SQL-сервер применяет некоторые расширения стандарта. Приведенные ниже примеры проверены в рамках СУБД Access. Кстати, справочная система Access достаточно полно разъясняет инструкции SQL. Ясное и полное описание технологии клиент/сервер, включающее также классификацию и описание команд SQL, применительно к СУБД Oracle 7 приведено в [14].

Приступая к рассмотрению SQL-запросов, надо также пояснить понятие транзакции. Транзакция базы данных – это единица работы, состоящая из одной или нескольких инструкций (команд) SQL. Транзакцию нельзя разбить на отдельные запросы. Например, перечисление денег предполагает именно две неотделимые друг от друга операции: уменьшение суммы на одном счете в базе данных и равнозначное увеличение на другом счете. Поэтому SQL-серверы рассматривают поступающие команды SQL как временные шаги, пока не поступит команда COMMIT, отмечающая конец текущей транзакции.

Можно выделить несколько классов команд SQL: определения данных, манипулирования данными, управления транзакциями, управления данными (доступом к ним). Последние два класса инструкций применяются в запросах к SQL-серверам, а первые два класса – и в запросах к локальным СУБД.

Команды языка определения данных (DDL – Data Definition Language) – это команды SQL, которые можно использовать для создания (CREATE), изменения (ALTER) и удаления (DROP) различных объектов базы данных (таблиц, процедур и др.). В качестве примера рассмотрим команду, с помощью которой можно создать таблицу Objects [КодОб, ИмяОб]:

CREATE TABLE Objects( КодОб LONG CONSTRAINT obj PRIMARY KEY, ИмяОб TEXT(40) )

В этой инструкции CREATE TABLE указывается имя создаваемой таблицы (Objects), и затем в скобках, через запятую описываются поля записей. Поле КодОб имеет тип LONG (см. раздел 3), а после слова CONSTRAINT (ограничение) указывается имя индекса (obj) для этого поля и параметр PRIMARY KEY – ведь поле КодОб должно быть первичным ключем. Описание второго поля таблицы включает его имя (ИмяОб), тип (TEXT) и длину в байтах (40). Пример показывает, что при хорошем знании синтаксиса языка SQL структуру любой таблицы базы данных можно создать не только с помощью имеющихся в Access (но не в каждой СУБД) средств визуального конструирования, но и с помощью команды SQL.

К числу команд языка манипулирования данными (DML) относятся инструкции SELECT (отбор данных), INSERT (вставка записей в таблицу), UPDATE (обновление записей), DELETE (удаление записей). Приведем пример инструкции SELECT:

SELECT Затраты.[Код затр], Объекты.Объект, Работы.Работа, Организации. Организация, Затраты.Дата, Затраты.Стоимость

FROM Затраты, Организации, Работы, Объекты

WHERE Объекты.[Код об] = Затраты.[Код об] AND Работы.[Код раб] = Затраты.[Код раб] AND Организации.[Код орг] = Затраты.[Код орг] AND Затраты.Дата = #3/31/98# AND Затраты.Дата#7/1/98# AND Работы.Работа=’Строительство’

ORDER BY Затраты.[Код затр];

В этом примере создается виртуальная таблица, состав полей которой определен во фразе SELECT, до фразы FROM: поле Код затр из таблицы Затраты, поле Объект из таблицы Объекты и т.д. Имя таблицы и имя поля указываются через точку. Имя поля Код затр заключено в квадратные скобки, т.к. содержит пробел. В некоторых СУБД для ограничения имен с пробелами применяются апострофы.

Во фразе FROM указываются имена исходных таблиц.

Во фразе WHERE задаются условия отбора записей. Так, из таблицы Затраты отбираются только те записи, в которых дата больше (позже) или равна 31.03.98 и меньше (раньше) 01.07.98 (даты в текстах запросов задаются в формате #мм/дд/гг#). Одновременно требуется, чтобы вид работ (поле Работа) был строительством. Для того, чтобы к записи из таблицы Затраты “привязать” через коды объекта, работы и организации соответствующие записи из других таблиц, во фразе WHERE заданы еще условия равенства этих кодов. Все условия заданы через И (AND), поскольку в этом примере требуется выполнение и первого, и второго, и остальных условий. В некоторых запросах условия задаются через ИЛИ (OR) – тогда для отбора записи требуется выполнение или первого, или второго условия.

Во фразе ORDER BY указано поле, по которому надо упорядочить (отсортировать) записи в виртуальной таблице результатов. Эта таблица не хранится в базе данных, а создается только в оперативном порядке, например, когда запрос является источником данных для формирования отчета. На рис. 9.6 показан результат запроса, содержащего рассмотренную инструкцию SELECT.

Рис. 9.6. Результат запроса, содержащего инструкцию SELECT

Приведем также примеры инструкции DELETE:

DELETE * FROM Объекты — удаление всех записей из таблицы Объекты,

DELETE * FROM Организации WHERE Город IN (‘Париж’,’Ницца’,’Чикаго’) — удаление из таблицы Организации записей, соответствующих тем организациям, которые расположены в городах, входящих в указанное множество. Если в таблице таких записей не окажется, то ничего удалено не будет.

К числу команд управления транзакциями относятся следующие:

COMMIT — сохранить (зафиксировать) внесенные текущей транзакцией изменения,

ROLLBACK – отменить изменения, вносимые текущей транзакцией,

SAVEPOINT – назначить промежуточную точку сохранения.

Промежуточные точки позволяют разбить выполняемую транзакцией работу на фрагменты:

INSERT …

DELETE …

SAVEPOINT one

UPDATE …

DELETE …

SAVEPOINT two

INSERT …

UPDATE …

Используя точки сохранения можно отменить одни части транзакции и оставить другие:

ROLLBACK TO SAVEPOINT two

Эта команда отменит действие всех SQL-инструкций после точки сохранения two.

Команды языка управления данными (DCL) используются для управления доступом пользователей к базе данных. Эти команды, как и инструкции управления транзакциями применяются при работе с SQL-серверами. Например, в СУБД Oracle 7 [14] введено понятие ролей. Каждая роль имеет имя и определенный набор полномочий: право создавать или удалять таблицы, изменять определенные таблицы и т.п. Если пользователь знает пароль некоторой роли, например, роли с именем role7, то он может установить эту роль в текущем сеансе и тем самым получить полномочия этой роли:

SET ROLE role7 IDENTIFIED BY x77y — устанавливается роль role7 с паролем x77y.

Кроме обширного набора команд языка SQL, серверы реляционных баз данных предоставляют средства для создания процедур и триггеров базы данных (триггер — особый тип процедур – см. далее). Так, Oracle 7 предлагает для SQL процедурные языковые расширения, называемые PL/SQL. Сам SQL – непроцедурный язык: мы не видим деталей обработки, конкретных процедур, в которые сервер транслирует наш запрос. Отсюда и простота использования SQL. Процедурные языки, такие как Си, Паскаль, Бейсик, требуют детальной записи действий. Поэтому их использовать сложнее, но они обладают большей гибкостью и более широкими возможностями. PL/SQL сочетает возможности SQL с возможностями процедурного языка. Как и в программе на процедурных языках (раздел 10), в процедуре на PL/SQL можно описать переменные и константы, использовать инструкции проверки условий, организовывать циклы и т.д. В виде процедур и их пакетов можно запрограммировать сложные алгоритмы обработки данных, что иногда невозможно или неэффективно сделать с помощью одних только команд SQL. Особым видом процедур являются триггеры базы данных. Триггер – это процедура, связываемая с таблицей. Когда дается команда SQL, соответствующая условиям триггера, СУБД запускает триггер на выполнение. Поэтому триггеры используют для того, чтобы СУБД реагировала на различные ситуации, например, на ввод в таблицу определенных данных. Таким образом, в рамках технологии «клиент/сервер» на сервере хранятся не только данные, но и многочисленные процедуры их обработки.

Приведенные сведения о языке SQL и возможностях реляционных СУБД показывают, что на основе СУБД можно создавать сложнейшие информационно-обрабатывающие системы, причем их разработка резко облегчается благодаря языку SQL и расширяющим его возможности инструментальным средствам программирования.

Контрольные вопросы к разделу 9: что такое база данных, предметная область, структурирование данных; структуры данных – таблица, запись, поле; назначение ключа, индекса; что такое реляционная база данных; понятие информационно-логической модели предметной области; назначение СУБД; нормализация отношений; что такое первая, вторая и третья нормальные формы; обеспечение целостности данных в базе данных; схема обобщенной технологии работы с СУБД; работа с СУБД Access – создание новой базы данных, создание структуры таблиц, ввод данных в таблицы, создание и применение форм, запросов, отчетов; что такое SQL, классы команд SQL; команды языка определения данных; команды языка манипулирования данными; команды управления транзакциями; команды языка управления данными (доступом к данным); что такое процедуры и триггеры базы данных.

10. Введение в программировние. Создание приложений на языке Visual Basic for Applications

10.1. Основные понятия

Программирование – это теоретическая и практическая деятельность, связанная с созданием программ. Иногда программирование определяют более узко, представляя дело так, что одни люди ставят задачи, другие разрабатывают алгоритмы их решения, а третьи записывают эти алгоритмы на языках программирования. В действительности такое деление довольно-таки условно. Просто эрудированные и опытные специалисты в области создания ПО, вместе со специалистами в конкретной предметной области, определяют круг задач будущего приложения, решают вопросы организации данных, теоретически обосновывают методы решения задач, разрабатывают алгоритмы, а к созданию интерфейса приложения и процедур привлекают менее квалифицированных программистов. Но надо обязательно подчеркнуть, что программирование – это не кодирование, а весь комплекс работ по созданию приложения: от постановки задач до отладки программного продукта и создания документации. Поэтому программист (в широком смысле слова) должен иметь хорошую математическую подготовку и некоторые знания в той предметной области для которой он создает программный продукт.

Этот раздел не претендует на то, чтобы сделать из читателя программиста. Каждый, кто любит строгую логику, и имеет склонность к формализованному мышлению, может сам стать программистом, но для этого требуется желание и продолжительная практика. В этом отношении обучение программированию очень похоже на обучение шахматам: кроме знания теории и типовых приемов, необходимо накопить опыт и натренировать мозг, сформировав в нем множество “хранимых процедур”. В шахматах это процедуры принятия решений во многих сходных позициях, реализации множества уже встречавшихся комбинаций и т.п. В программировании это процедуры организации циклов, работы с данными различных типов и многие другие. Поэтому цель этого раздела – помочь читателю вступить в мир программирования, научить его делать первые шаги, познакомив с современными инструментальными средствами и методами создания программ. Эти знания, во-первых, должны облегчить понимание логики готовых приложений, а, во-вторых, должны дать возможность разрабатывать собственные, пусть небольшие, но необходимые в практической деятельности программы.

В качестве инструмента для создания приложений в данной работе выбран VBA –Visual Basic for Applications (Visual Basic для приложений). Этот выбор объясняется следующими причинами:

  • VBA – это интегрированная среда визуального программирования, позволяющая создавать современные событийно-объектно-ориентированные приложения с унифицированным графическим интерфейсом (см. раздел 2);
  • языковые средства VBA по гибкости и полноте не уступают языковым средствам других современных систем программирования и, следовательно, позволяют освоить типовые методы и приемы разработки программных процедур;
  • VBA является общей языковой платформой для всех приложений MS Office и позволяет в создаваемых программах работать с объектами Word, Excel, Access, Power Point, OutLook, Binder; мы будем рассматривать VBA во взаимосвязи с Excel, размещая на листах Excel исходные данные и результаты решения задач.

Последняя из перечисленных причин чрезвычайно важна. Дело в том, что среда программирования VBA, в отличие от VB (Visual Basic), работает только совместно с другим, основным приложением, например, Excel. Создаваемое приложение в этом случае встраивается в книгу Excel. Эта особенность в значительной мере определяет область применения VBA. Если надо создать автономное многофункциональное приложение, то лучше использовать VB, Delphi или Си++. Если же мы хотим расширить возможности основного приложения, например, Excel или преследуем учебные цели, то лучше VBA трудно что-нибудь придумать. Ведь VBA, как мы увидим, дает возможность моментально создать интерфейс пользователя, Excel предоставляет средства для оперирования табличными данными, и, следовательно, все внимание можно сосредоточить на реализации событийных и общих процедур (см. раздел 2), т.е. на алгоритмизации и, собственно, программировании. Немаловажно также то, что среда разработки VBA встроена в MS Office, и поэтому на компьютерах в учебных классах не требуется установка и поддержка дополнительных средств программирования.

Предварительные сведения о создании приложений с помощью инструментальных сред визуального программирования уже приводились в подразделе 6.2. Здесь мы рассмотрим создание интерфейса пользователя, а также переменные, константы, инструкции и другие языковые конструкции Бейсика, с помощью которых строятся событийные и общие процедуры.

10.2. Создание интерфейса пользователя

Статьи к прочтению:

Проверка условий и логические функции в Excel


Похожие статьи: