
- •Содержание
- •Тема 1. Работа с базами данных в Microsoft SQL Server Compact
- •1.1. Создание баз данных в Microsoft SQL Server Compact
- •1.2. Создание таблиц в базе данных
- •1.3. Создание отношения между таблицами
- •1.4. Заполнение таблиц данными
- •1.5. Изменение структуры таблицы
- •1.6. Формирование источника данных для новой базы данных
- •1.7. Подключение к уже существующим базам данных
- •Тема 2. Организация вывода данных в табличной форме
- •2.1. Подключение к базе данных и отображение данных в виде таблицы
- •2.2. Настройка DataGridView
- •2.3. Управление данными в DataGridView
- •Тема 3. Отображение данных из таблицы по одной записи. Управление данными и управление перемещением между записями программным способом.
- •3.1. Подключение базы данных и формирование источника данных
- •3.2. Формирование интерфейса приложения
- •3.3. Подключение полей таблицы базы данных к визуальным объектам на форме
- •3.5. Сохранение изменений в файле базы данных
- •3.6. Определение доступа к кнопкам
- •Тема 4. Отображение данных из двух связанных таблиц. Добавление, редактирование и удаление записей в связанных таблицах.
- •4.1. Подключение базы данных и формирование источника данных
- •4.2. Формирование интерфейса приложения
- •4.3. Настройка таблиц Студенты и Отметки
- •4.4. Описание обработчиков событий для кнопок
- •Тема 5. Организация хранения графических изображений в базах данных. Добавление и удаление графических изображений в базах данных.
- •5.1. Подключение базы данных и формирование источника данных
- •5.2. Формирование интерфейса приложения
- •Тема 6. Выполнение поиска в базах данных. Фильтрация и сортировка.
- •6.1. Фильтрация записей
- •6.2. Сортировка записей
- •6.3. Программирование приложения для выполнения фильтрации по нескольким полям разного типа
- •6.4. Программирование приложения для выполнения быстрого поиска по первым буквам текстовых полей
- •Тема 7. Использование вычисляемых полей в таблицах баз данных.
- •7.1. Добавление вычисляемых полей
- •7.2. Примеры использования вычисляемых полей

42
Тема 7. Использование вычисляемых полей в таблицах баз данных.
7.1. Добавление вычисляемых полей
Вычисляемые поля – это такие поля, которые в файле базы данных не существуют и не хранятся, но создаются и автоматически заполняются при работе с базой данных из приложения. Для изучения вычисляемых полей нам нужно создать проект, который позволял бы отображать данные из двух связанных таблиц Студенты и Отметки. Создайте такой проект. О том, как это делается, читайте в теме 4.
Примечание. Кнопки для выполнения операций добавления, сохранения и удаления записей в нашем проекте использовать не обязательно.
В результате должен получиться следующий интерфейс:
Для работы с вычисляемыми полями отобразите панель источников данных:
Данные ►Показать источники данных. В панели источников данных нажмите кнопку «Изменить набор данных в конструкторе».
© 2012, Милютин А.Ю.
43
Для добавления вычисляемого поля выполните щелчок правой кнопкой мыши на заголовке таблицы, выберите команду Добавить ► Столбец.
Всвойстве Name указывается имя добавляемого поля.
Всвойстве Expression указывается выражение для вычисления значения поля.
Всвойстве DataType указывается тип данных поля.
При создании выражений сравнения можно использовать следующие операторы:
<
>
<=
>=
<>
=
IN – для проверки принадлежности значения к списку LIKE – для сравнения строк текста
В выражениях также могут быть использованы следующие арифметические операторы:
+ (сложение) - (вычитание) * (умножение) / (деление)
% (остаток от деления)
Можно также использовать логические операторы AND, OR и NOT.
В выражениях для фильтрации также можно применять ряд функций:
SUBSTRING(expression, start, length) - получает подстроку указанной длины, начиная с указанного положения в строке.
expression — строка-источник для подстроки.
start — целое число, определяющее, где начинается подстрока. length — целое число, определяющее длину подстроки.
LEN(expression) - возвращает длину строки. expression — строка текста для определения длины.
TRIM(expression) - удаляет все предшествующие и последующие пустые символы. expression — укорачиваемое выражение.
Convert(expression, type) - преобразует определенное выражение в указанный тип. expression — преобразуемое выражение.
type — тип, в который необходимо преобразовать значение.
IIF(expr, truepart, falsepart) - получает одно из двух значений в зависимости от значения условия.
expr — условие.
truepart — значение, возвращаемое, если значение условия — "true". falsepart — значение, возвращаемое, если значение условия — "false".
Статистические выражения
Поддерживаются следующие составные типы: Sum (сумма)
© 2012, Милютин А.Ю.

44
Avg (среднее)
Min (минимум)
Max (максимум)
Count (счетчик)
StDev (статистическое среднеквадратичное отклонение) Var (статистическая дисперсия).
Ссылки на отношения родительский/дочерний объект
На родительскую таблицу может быть выполнена ссылка в выражении путем присоединения к имени столбца спереди строки Parent. Например, Parent.Fam является ссылкой на столбец с именем Fam родительской таблицы.
На столбец в дочерней таблице может быть выполнена ссылка в выражении путем присоединения к имени столбца спереди строки Child. Однако, так как дочернее отношение может вернуть несколько строк, необходимо включать ссылку на дочерний столбец в агрегатную функцию. Например, Avg(Child.mat) вернет средний балл по математике в дочерней таблице.
Примеры основных типов данных, которые можно использовать в функции
CONVERT: |
|
|
Тип |
Диапазон |
Размер |
System.Sbyte |
От -128 до 127 |
8-разрядное знаковое целое число |
System.Byte |
От 0 до 255 |
8-разрядное целое число без знака |
System.Int16 |
От -32 768 до 32 767 |
16-разрядное знаковое целое число |
System.Uint16 |
От 0 до 65 535 |
16-разрядное целое число без знака |
System.Int32 |
От -2 147 483 648 до 2 147 483 647 |
32-разрядное знаковое целое число |
System.Uint32 |
От 0 до 4 294 967 295 |
32-разрядное целое число без знака |
System.Int64 |
От -9,223,372,036,854,775,808 до |
64-разрядное целое число со знаком |
|
9,223,372,036,854,775,807 |
|
System.Uint64 |
От 0 до 18 446 744 073 709 551 615 |
64-разрядное целое число без знака |
System.Double |
От ±5,0e−324 до ±1,7e308 |
15-16 знаков после запятой |
System.String |
|
Непрерывная последовательность |
|
|
символов в юникоде |
7.2. Примеры использования вычисляемых полей
Пример 1. В таблице Студенты создать вычисляемое поле для отображения фамилии с инициалами.
Шаг 1. В панели источников данных нажмите кнопку «Изменить набор данных в конструкторе».
Шаг 2. Выполните щелчок правой кнопкой мыши на заголовке таблицы Студенты. Выберите команду Добавить ► Столбец.
Шаг 3. В свойстве Name добавленного столбца укажите имя добавляемого поля – fio. Шаг 4. В свойстве DataType укажите тип поля – System.String.
Шаг 5. В свойстве Expression укажите выражение для вычисления значения поля:
fam + ' ' + substring(name, 1, 1) + '.' + substring(otch, 1, 1) + '.'
Здесь с помощью функции SUBSTRING копируются первые символы из имени и отчества для создания инициалов.
Шаг 6. Переключитесь на форму в режиме конструктора. Отбуксируйте из источника данных поле fio на форму. Запустите приложение и убедитесь, что фамилии с инициалами правильно отображаются для разных студентов.
Пример 2. В таблице Отметки создать вычисляемое поле для отображения среднего балла по трем дисциплинам: математика, русский язык, информатика.
© 2012, Милютин А.Ю.
45
Шаг 1. В панели источников данных нажмите кнопку «Изменить набор данных в конструкторе».
Шаг 2. Выполните щелчок правой кнопкой мыши на заголовке таблицы Отметки. Выберите команду Добавить ► Столбец.
Шаг 3. В свойстве Name добавленного столбца укажите имя добавляемого поля –
srball.
Шаг 4. В свойстве DataType укажите тип поля – System.Double.
Шаг 5. В свойстве Expression укажите выражение для вычисления значения поля:
(mat + rus + inf) / 3
Шаг 6. Переключитесь на форму в режиме конструктора. Наше вычисляемое поле srball должно отображаться в компоненте DataGridView. Выполним добавление в DataGridView нового столбца. Для этого выполните щелчок правой кнопкой мыши на dataGridView1 и выберите команду «Добавить столбец». Выделите в списке столбец с именем srball и нажмите Добавить.
Примечание. Возможно, новый столбец не будет отображаться в списке. В этом случае сохраните проект, закройте его и откройте вновь.
Шаг 7. Для поля, отображающего средний балл, можно задать формат вывода, чтобы число округлялось до сотых. Для этого выполните щелчок правой кнопкой мыши на компоненте DataGridView и выберите команду «Правка столбцов». Выделите столбец srball и откройте для него свойство DefaultCellStyle. В диалоговом окне построителя CellStyle в свойстве Format выберите числовой формат. Укажите, что нужно использовать два десятичных разряда после запятой.
Примечание. Если для поля установлен тип данных System.String, то округление с помощью свойства Format действовать не будет. Так как средний балл является вещественным числом, установите для этого поля тип System.Double.
Пример 3. В таблице Студенты создать вычисляемое поле для определения пола студента.
Шаг 1. В панели источников данных нажмите кнопку «Изменить набор данных в конструкторе».
Шаг 2. Выполните щелчок правой кнопкой мыши на заголовке таблицы Студенты. Выберите команду Добавить ► Столбец.
Шаг 3. В свойстве Name добавленного столбца укажите имя добавляемого поля – pol. Шаг 4. В свойстве DataType укажите тип поля – System.String.
Шаг 5. Для определения пола нам нужно взять последнюю букву отчества и проверить условие. Если последняя буква – «ч», то пол мужской. Если последняя буква – «а», то пол женский. Для проверки условия будем использовать функцию IIF.
Добавьте в свойство Expression следующее выражение:
IIF(substring(otch, len(otch),1) = 'ч', 'муж', 'жен')
Данное выражение извлекает из отчества последнюю букву и проверяет, если последняя буква – «ч», то пол мужской, иначе – женский. Но при этом следует учитывать, что выражение дает истинный результат, только если у студента указано отчество. Если отчество не указано, то выражение будет автоматически присваивать студенту женский пол. Измените выражение следующим образом:
IIF(substring(otch, len(otch),1) = 'ч', 'муж', IIF(substring(otch, len(otch),1) = 'а', 'жен', ''))
Здесь используется вложенная функция IIF. В том случае, если последняя буква отчества не «ч», выполняется проверка еще одного условия. Если последняя буква отчества
© 2012, Милютин А.Ю.
46
«а», то присваивается женский пол, в противном случае вместо пола указывается пустой текст.
Обратите также внимание на то, что для определения пола человека нужно, чтобы было указано отчество человека. Если поле с отчеством содержит пустой текст, то из него невозможно скопировать последний символ. Это приведет к ошибке. Следовательно, нужно к выражению добавить еще одну проверку – если поле otch не пустое, то скопировать из него последний символ и определить пол, иначе – в поле для пола человека вывести пустой текст. Наше выражение примет окончательный вид:
IIF(len(otch) > 0, IIF(substring(otch, len(otch),1) = 'ч', 'муж', IIF(substring(otch, len(otch),1) = 'а', 'жен', '')), '')
Шаг 6. Переключитесь на форму в режиме конструктора. Отбуксируйте из источника данных поле pol на форму. Запустите приложение и убедитесь, что пол правильно отображается для разных студентов.
Пример 4. В таблице Отметки создать вычисляемое поле, которое для каждой записи отображало бы фамилии с инициалами.
Шаг 1. В панели источников данных нажмите кнопку «Изменить набор данных в конструкторе».
Шаг 2. Выполните щелчок правой кнопкой мыши на заголовке таблицы Отметки. Выберите команду Добавить ► Столбец.
Шаг 3. В свойстве Name добавленного столбца укажите имя добавляемого поля – fiootm.
Шаг 4. В свойстве DataType укажите тип поля – System.String.
Шаг 5. Для формирования фамилии с инициалами мы уже создавали выражение в примере 1:
fam + ' ' + substring(name, 1, 1) + '.' + substring(otch, 1, 1) + '.'
Здесь с помощью функции SUBSTRING копируются первые символы из имени и отчества для создания инициалов. Однако, следует учитывать, что поля fam, name, otch в таблице Отметки отсутствуют. Эти поля принадлежат главной таблице Студенты. Поэтому перед именами этих полей нужно добавить ключевое слово Parent:
Parent.fam + ' ' + substring(Parent.name, 1, 1) + '.' + substring(Parent.otch, 1, 1) + '.'
Шаг 6. Переключитесь на форму в режиме конструктора. Наше вычисляемое поле srball должно отображаться в компоненте DataGridView. Выполним добавление в DataGridView нового столбца. Для этого выполните щелчок правой кнопкой мыши на dataGridView1 и выберите команду «Добавить столбец». Выделите в списке столбец с именем fiootm и нажмите Добавить.
Примечание. Возможно, новый столбец не будет отображаться в списке. В этом случае сохраните проект, закройте его и откройте вновь.
Можно также выполнить щелчок правой кнопкой мыши на dataGridView1, выбрать команду «Правка столбцов…» и переместить столбец fiootm на первое место.
Пример 5. В таблице Студенты создать вычисляемое поле, которое определяло бы средний балл данного студента по информатике.
Шаг 1. В панели источников данных нажмите кнопку «Изменить набор данных в конструкторе».
Шаг 2. Выполните щелчок правой кнопкой мыши на заголовке таблицы Студенты. Выберите команду Добавить ► Столбец.
Шаг 3. В свойстве Name добавленного столбца укажите имя добавляемого поля –
srinf.
© 2012, Милютин А.Ю.
47
Шаг 4. В свойстве DataType укажите тип поля – System.Double.
Шаг 5. Для определения среднего балла можно воспользоваться статистическими функциями SUM и COUNT. Только следует учитывать, что мы будем вычислять среднее значение поля inf, которое принадлежит подчиненной таблице Отметки. Следовательно, перед именем поля нужно указать ключевое слово Child:
sum(Child.inf) / count(Child.inf)
Шаг 6. Переключитесь на форму в режиме конструктора. Отбуксируйте из источника данных поле srinf на форму. Запустите приложение и убедитесь, что средний балл правильно отображается для разных студентов.
Шаг 7. Для текстового поля, отображающего средний балл, можно задать формат вывода, чтобы число округлялось до сотых. Для этого выделите текстовое поле со средним баллом. В свойстве DataBindings откройте вложенное свойство Advanced. Задайте тип формата – числовой, и количество десятичных разрядов – 2.
Примечание. Если главная таблица связана с несколькими подчиненными, то после ключевого слова Child в скобках указывается имя связи. Таким образом, определяется, из какой конкретно дочерней таблицы нужно брать поля для создания вычисляемого поля. В нашем примере 5 между таблицами Студенты и Отметки сделана связь с именем СтудентыОтметки. Выражение для вычисления среднего балла по информатике может быть записано следующим образом:
sum(Child(СтудентыОтметки).inf) / count(Child(СтудентыОтметки).inf)
© 2012, Милютин А.Ю.