Цели:
Язык программирования Visual Basic 2008 входит в состав пакета Microsoft Visual Studio
2008. Он позволяет создавать приложения для ОС Windows 2000, XP, VISTA и ОС
Windows Mobile, Windows Pocket PC.
По сравнению с Visual Basic6.0, Visual Basic 5.0 и Visual Basic2005, Visual Basic 2008
обладает большими системными требованиями. Для его работы необходим компьютер,
имеющий следующую конфигурацию:
Visual Basic 2008 основывается на ядре Visual Basic 6.0, который входит в состав Visual
Studio 6.0. И был создан в 1998. После создания Visual Studio 6.0, он получил большое
распространение в мире. В 2003г была создана новая версия Visual Basic Net. Его главным
отличием была большая ориентация на компоненты сети, использования библиотеки
Microsoft Frame Work 1.0. улучшились графические спецэффекты программы. В 2005 году
на основе Visual Basic Net создается Visual Basic 2005, а в 2008 году создаётся улучшенная
версия языка Visual Basic 2008.
1. Создаётся проект;
2. В проекте создаются объекты связи, которые подключаются к файлу данных;
3. Создаются формы;
4. Создаются отчёты.
Объекты связи
технология ADO;
технология RDC;
технология ADO.Net.
Согласно технологии RDC файлы данных рассматриваются в качестве устройств, т.е. для
работ с БД нам необходим драйвер. Объект связи, работающий по технологии RDC, при
работе с файлом данных сначала обращается к драйверу БД, который в свою очередь
обращается к файлу данных.
Мастер подключений
В Visual Basic 2008 по сравнению с Visual Basic 6.0 подключение проекта к файлу БД
можно произвести двумя способами: при помощи мастера подключений и вручную,
создавая объекты связи и настраивая их свойства. Начнем рассмотрение создания
подключения с помощью мастера.
Как говорилось выше, объекты связи обеспечивают доступ к файлам данных. Создание
подключения состоит из создания следующих объектов:
1. Запуск мастера;
2. Выбор типа источника данных: БД, сетевой источник или объект;
3. Настройка строки подключения "Connection String". Настройка заключается в
выборе вида БД (либо Access, либо SQL Server), а также в выборе сервера и файла
данных. В случае необходимости можно задать логин и пароль;
4. Сохранение строки подключения. При ее сохранении можно менять параметры
подключения без использования Visual Basic. Но при сохранении строки
подключения в файл велика вероятность несанкционированного подключения к
БД;
5. Выбор таблиц или запросов включённых в соединение. Также можно выбрать их
отдельные поля;
6. Завершение работы мастера подключений.
Замечание: В одном проекте может быть несколько наборов данных, то есть можно
запускать мастер подключений сколько угодно раз. Новые наборы данных добавляются на
вкладку "Data Sources" и появляется новые данные с расширением xsd.
В Visual Basic 2008, как и в Visual Basic 6.0 мы можем создавать объекты связи вручную и
их настраивать. Для связи Visual Basic 2008 использует три объекта связи, причем они
работают все вместе, плюс к этому был и существует объект BindingNavigatior (Панель
навигации) - эта панель обеспечивает полное управление источником данных
(добавление, удаление, перемещение по записям).
Затем можно настроить внешний вид панели навигации при помощи следующих свойств:
Цель:
Прежде чем создавать новый проект в "Microsoft Visual Studio 2008", необходимо
запустить "SQL Server Browser" (Обозреватель SQL серверов) сервис, обеспечивающий
доступ сторонним приложениям к "Microsoft SQL Server 2008". Для запуска данного
сервиса необходимо запустить утилиту "SQL Server Configuration Manager" (Менеджер
настроек SQL сервера), входящую в состав "Microsoft SQL Server 2008". Для запуска
данной утилиты в меню "Пуск" выберите пункт "Программы/Microsoft SQL Server
2008/Configuration Tools/ SQL Server Configuration Manager" как это представлено на
рис. 16.1.
увеличить изображение
Рис. 16.1.
Появится окно менеджера настроек SQL сервера имеющее следующий вид (рис. 16.2):
увеличить изображение
Рис. 16.2.
В правой части окна менеджера настроек SQL сервера, в списке сервисов "Microsoft SQL
Server 2008" выделите сервис "SQL Server Browser", затем на панели инструментов
нажмите кнопку "Start Service" (Запустить сервис)
(рис. 16.2). После запуска вышеуказанного сервиса окно менеджера настроек SQL сервера
можно закрыть.
Появится окно со стартовой страницей "Microsoft Visual Studio 2008 (Start Page)" (рис.
16.4).
Рис. 16.4.
Рис. 16.5.
В нашем случае на дереве типов проекта "Project types:" (Типы проектов) выберите
"Visual Basic\Windows", а в качестве шаблона проекта (Область Templates:) выберите
"Windows Forms Application" (Приложение Windows). В качестве имени проекта (Поле
ввода Name:) задайте "StudentsDB" и нажмите кнопку "Ok" (рис. 16.5).
Появится стандартное окно разработки языка "Microsoft Visual Basic 2008" (рис. 16.6).
увеличить изображение
Рис. 16.6.
Окно разработки языка "Microsoft Visual Basic 2008" имеет следующую структуру (рис.
16.6):
Рис. 16.7.
В данном окне можно выбрать один из трех видов источников данных (Choose a Data
Source Type):
БД (Database);
Служба (Service);
Объект (Object).
Основой web-интерфейса являются страницы (файл с расширенным htm или html). Работа
со страницами осуществляется с помощью программы - браузера. Изначально страницы
находятся на сервере, пользователь сначала загружает их на свой компьютер с сервера, а
затем с помощью страниц пользователь работает с файлом данных.
Visual Basic 2008 позволяет создавать не сложный интерфейс БД, без помощи панели
объектов и окна свойств, лишь используя окно "Data Sources". В окне "Data Sources"
после подключения источника данных отображается все таблицы, запросы, фильтры
данных и их поля. В Visual Basic 2008 как и в Visual Basic 6.0 можно перетаскивать
источники данных, соответственно таблицы, запросы, фильтры прямо из окна "Data
Sources" на форму (в Visual Basic 6.0 окно "Data Sources" заменено на окно "Data
Environment"). Главное отличие Visual Basic 2008 является то, что при перетаскивании
можно выбирать для каждого поля источника данных объект, который будет отображать
его содержимое.
Для каждого поля таблицы, запроса, или фильтра выбирается объект, который
будет отображать его содержимое. Для этого необходимо щелкнуть мышью по
полю в окне "Data Sources", рядом с именем поля появится кнопка, со стрелкой,
щелкнув мышью по стрелке, отобразится выпадающее меню с объектами, которые
могут отображать информацию, содержащуюся в поле. Для полей стандартными
объектами являются: TextBox, ComboBox, Label, LinkLabel, ListBox. Для полей
типа данных Дата Время (DateTime) возможно использования объекта
DataTimePicker. Для полей логических типов данных возможно использование
объекта CheckBox. Для отображения таблиц, запросов или фильтров целиком
возможно два варианта отображения:
o При помощи объекта DataGridView - информация из таблицы, запроса или
фильтра отображается в виде таблицы;
o DetalledView - отображение всех полей источника данных в TextBox по
отдельности
Visual Basic 2008 позволяет подключать источники данных к объектам без использования
перетаскивания, то есть вручную, с использованием панели свойств, как в Visual Basic 6.0.
Для этого на форму помещается объект, который будет подключаться к источнику
данных. Его выделяют, затем на панели свойств разворачивается группа свойств
"DataBindings" она содержит два свойства:
Рис. 18.2.
На форме выделите надпись, щелкнув по ней ЛКМ и на панели свойств, задайте свойства
надписи следующим образом:
Рис. 18.3.
Теперь перейдем к созданию простых ленточных форм для работы с данными. Для начала
создадим ленточную форму, отображающую таблицу "Специальности". Добавим в
проект новую пустую форму. Для этого в оконном меню выберите пункт "Project/Add
Windows Form". Появится окно "Add New Item - StudentsDB" (Добавить новый
компонент) (рис. 18.4).
увеличить изображение
Рис. 18.4.
В верхней части новой формы создайте надпись (Label), как это показано на рис. 18.5.
Рис. 18.5.
На форме выделите надпись, щелкнув по ней ЛКМ и на панели свойств, задайте свойства
надписи как показано ниже:
Рис. 18.7.
Замечание: При выделении, какого либо поля таблицы, оно будет отображаться в виде
выпадающего списка (рис. 18.7), позволяющего выбирать объект, отображающий
содержимое выделенного поля (рис. 18.8).
Рис. 18.8.
Для того чтобы поместить на новую форму поля таблицы их необходимо перетащить из
панели "Источники данных" на форму. Из таблицы "Специальности" перетащите
мышью на форму поля "Наименование специальности" и "Описание специальности".
Форма примет вид, представленный на рис. 18.9
увеличить изображение
Рис. 18.9.
Замечание: Мы не помещаем поле "Код специальности" на нашу форму, так как данное
поле является первичным полем связи и заполняется автоматически. Конечный
пользователь не должен видеть такие поля.
увеличить изображение
Рис. 18.10.
Теперь создадим форму для просмотра таблицы предметы. Добавьте в проект новую
форму. На форму добавьте надпись. Настройте свойства формы и надписи, как это было
сделано для формы таблицы "Специальности". Затем из таблицы "Предметы" на новую
форму поместите поля "Наименование предмета" и "Описание предмета". После
выполнения всех вышеописанных действий форма для таблицы предметы будет
выглядеть следующим образом (рис. 18.12):
Рис. 18.12.
Рис. 18.14.
Теперь создадим простую ленточную форму для отображения таблицы "Студенты". Для
начала отобразите поля таблицы "Студенты" на панели "Источники данных", щелкнув
ЛКМ по знаку "+", расположенному слева от названия таблицы. Отобразятся все поля
таблицы "Студенты" (рис. 18.15).
Рис. 18.15.
Замечание: Обратите внимание на тот факт, что поля "Дата рождения" и "Дата
поступления" отображаются объектом "Выбор даты" (DataPicker), так как данные поля
содержат значения дат. Поле "Очная форма обучения" является логическим,
следовательно, для его отображения используется объект "Переключатель" (CheckBox).
Остальные поля отображаются при помощи текстовых полей ввода (TextBox) (рис. 18.15).
увеличить изображение
Рис. 18.17.
Теперь запустим проект. На экране появится главная кнопочная форма. Для открытия
формы, отображающей таблицу "Студенты" на главной кнопочной форме нажмите
кнопку "Таблица "Студенты"". Появится форма с соответствующей таблицей (рис.
18.18).
Рис. 18.18.
увеличить изображение
Рис. 18.20.
Рис. 18.22.
19. Лекция: Стандартные объекты для отображения данных. Программное
управление информационной системой
Цели:
Замечание: При перетаскивании поля из окна "Data Sources" необходимо учитывать его
тип данных. Объект на форме должен поддерживать тип данных подключаемого к нему
поля.
TextBox - отображает текст и числовые поля, это наиболее часто употребляемый объект
для отображения данных. Его можно создавать либо перетаскиванием из окна "Data
Sources", либо подключить вручную. Создание этого объекта, перетаскиванием возможно
почти у полей любых типов данных.
CheckBox - объект используется для отображения логических полей, может быть создан
перетаскиванием только для логических полей.
В Visual Studio 2008 добавлять, удалять записи и перемещаться по ним можно как
используя объект Navigator, так и используя обычные кнопки. Рассмотрим создание
кнопок для управления записями. В Visual Studio 2008 отсутствует объект "RecordSet"
все операции с записями осуществляются с использованием объекта "BindingSource".
В Visual Basic 2008 для добавления новой записи из таблицы "Студенты" используется
команда вида СтудентыBindingSource.AddNew. Вместо метода AddNew можно
использовать методы:
<Поле1><Оператор1><Выражение1>
[AND|OR <Поле2><Оператор2><Выражение2>…]
Здесь:
Обычно при формировании запроса при помощи свойства Filter задания условий отбора
используют либо списки ListBox, либо выпадающие списки ComboBox.
В этом случае в меню действий ComboBox в параметре "Data Source" указываем "Other
Data Source/Студенты". Затем в "Display Member" выбираем ФИО. В коде кнопки
прописываем следующую команду:
20. Лабораторная работа: Создание сложных ленточных форм для работы с данными
Рис. 20.1.
увеличить изображение
Рис. 20.3.
увеличить изображение
Рис. 20.5.
увеличить изображение
Рис. 20.6.
увеличить изображение
Рис. 20.7.
увеличить изображение
Рис. 20.8.
Для проверки работы созданных кнопок запустите проект откройте форму "Таблица
"Студенты"" и нажмите каждую из кнопок.
Теперь изменим объекты, отображающие поля для более удобного ввода информации.
Для начала удалите текстовые поля ввода (TextBox), отображающие следующие поля
таблицы "Студенты": "Пол", "Родители", "Телефон", "Паспортные данные",
"Номер зачетки", "Курс" и "Код специальности". После удаления, перечисленных
полей форма, отображающая таблицу "Студенты" примет следующий вид (рис. 20.10):
Рис. 20.10.
Замечание: Для отображения меню действий в верхнем правом углу объекта необходимо
нажать кнопку
(рис. 20.12).
После выбора пункта "Set Mask…" на экране появится окно задания маски "Input Mask"
(Введите маску) (рис. 20.13).
Рис. 20.13.
Для текстового поля ввода по маске для поля "Паспортные данные" задайте маску как
показано на рис. 20.14.
Рис. 20.14.
Замечание: Обратите внимание, что паспортные данные отображаются как четыре числа,
тире, шесть чисел. То есть в поле "Mask" (Маска) нужно задать "0000-000000". Знак "0"
обозначает цифру. В поле "Preview" (Предварительный просмотр) отображается вид
текстового поля ввода по маске на форме.
После определения маски для поля "Паспортные данные" в окне "Input Mask" нажмите
кнопку "Ok".
Теперь зададим маску для текстового поля ввода по маске отображающего поле
"Телефон". Задайте маску как показано на рис. 20.15.
Рис. 20.15.
Затем перетащите поле на форму мышью, расположив, его справа от надписи "Курс".
Замечание: После перетаскивания поля "Курс" на форму слева от него появится еще
одна надпись "Курс". Удалите ее, щелкнув по ней ЛКМ, а затем нажав кнопку "Delete"
на клавиатуре.
Рис. 20.17.
Рис. 20.19.
Рис. 20.20.
В панели действий под опцией "Use data bound items" расположены следующие
параметры:
внутрии поля параметра. Появится древовидная структура выбора источника данных (рис.
20.21).
Рис. 20.21.
Рис. 20.22.
Обратите внимание на то, что на панели невидимых объектов, расположенной в
нижней части рабочей области среды разработки, появилось два новых объекта:
"СпециальностиBindingSource" и "СпециальностиTableAdapter" (рис. 20.23).
увеличить изображение
Рис. 20.23.
Данные объекты предназначены для заполнения выпадающего списка значениями
поля "Наименование специальности" таблицы "Специальности".
После всех вышеперечисленных действий форма, отображающая таблицу
"Студенты" примет вид, представленный на рис. 20.24.
Рис. 20.24.
Проверим работу формы, отображающей таблицу "Студенты". Запустите проект и
на главной кнопочной форме нажмите кнопку "Таблица "Студенты"". Появится
форма, имеющая следующий вид (рис. 20.25):
Рис. 20.25.
На этом мы заканчиваем работу с формой, отображающей таблицу "Студенты" и
переходим к реализации вычислимых полей. Для этого рассмотрим форму,
отображающую таблицу "Оценки" (Form5). Рассмотрим вычисление поля
"Средний балл" на основе среднего трех полей:
Отобразите форму для таблицы "Оценки", щелкнув ЛКМ по ее вкладке в верхней
части рабочей области среды разработки. На форму, справа от поля "Средний
балл" поместите кнопку (рис. 20.26).
Рис. 20.26.
Задайте свойство "Text" у вновь созданной кнопки как "Вычислить" (рис. 20.27).
Рис. 20.27.
Теперь дважды щелкните ЛКМ по кнопке "Вычислить" и в появившемся коде
процедуры "Button1_Click" наберите код, представленный на рис. 20.28,
вычисляющий среднее оценок.
увеличить изображение
Рис. 20.28.
Теперь проверим, как работает наша вновь созданная кнопка для вычисления поля
"Средний балл". Запустите проект и на главной кнопочной форме нажмите
кнопку "Таблица "Оценки"". Появится форма, отображающая таблицу
"Оценки", на форме нажмите кнопку "Вычислить". Будет вычислен средний
балл по оценкам. Если нажать кнопку сохранения на панели инструментов формы
то средний балл будет сохранен в таблицу "Оценки" (рис. 20.29).
Рис. 20.29.
На этом мы заканчиваем рассмотрение ленточных форм и переходим к
рассмотрению табличных форм.
Цели:
Если в меню действий выбрать пункт "Edit Columns", то появляется окно, где можно
добавлять, удалять и редактировать столбцы. Для этого в списке столбцов левой части
окна выбираем столбец, а в правой - настраиваем его свойства. Наиболее часто
настраиваются следующие свойства:
Замечание: Для добавления новых столбцов в окне "Edit Columns" необходимо нажать
кнопку Add, а для удаления кнопку Remove.
Замечание: Если необходимо настроить внешний вид всех ячеек таблицы, то для этого
необходимо выделить объект DataGridView и на панели свойств зайти в свойство
DefaultCellStyle. Появится окно со свойствами всех ячеек таблицы.
где DataGridView - это имя объекта, <Имя столбца> - это имя столбца (свойство Name) по
которому происходит сортировка записей в таблице, параметр <Порядок сортировки>
определяет порядок сортировки и может принимать два значения:
Замечание: Доступ к отдельным ячейкам таблицы можно получить через подобъект Item.
Обращение к нему осуществляется следующим образом:
DataGridView.Item(i, j).<Свойство>
Пример: В верхнюю левую ячейку таблицы записать слово "Привет" и сделать цвет
текста в ячейке красным.
Здесь DataGridView - это имя объекта, свойство Value определяет содержимое ячейки
таблицы, свойство Style.ForeColor определяет цвет текста в ячейке. Нумерация столбцов и
строк в таблице начинается с нуля.
увеличить изображение
Рис. 22.1.
Рис. 22.2.
увеличить изображение
Рис. 22.3.
Обратите внимание на то, что на форме появилась таблица для отображения данных,
подключенная к таблице "Студенты". Также появились объекты связи и панель
навигации (рис. 22.4).
увеличить изображение
Рис. 22.4.
Рис. 22.5.
Настроим таблицу для отображения данных, удалив из нее поля с кодами. Выделите
таблицу на форме и отобразите ее меню действий, щелкнув ЛКМ по кнопке
расположенной в верхнем правом углу таблицы. В меню действий выберите пункт "Edit
columns…" (рис. 22.6).
Рис. 22.6.
Появится окно настройки свойств полей таблицы "Edit Columns" (рис. 22.7).
Рис. 22.7.
В окне "Edit Columns" из списка полей удалите поля "Код студента" и "Код
специальности", выделив их и нажав кнопку "Remove" (Удалить). Список полей примет
вид показанный на рис. 22.7. Для закрытия окна редактирования полей, и сохранения
изменений нажмите кнопку "Ok".
Рис. 22.8.
увеличить изображение
Рис. 22.9.
После настройки всех вышеперечисленных свойств объектов новая форма примет вид
(рис. 22.10):
увеличить изображение
Рис. 22.10.
увеличить изображение
Рис. 22.11.
увеличить изображение
Рис. 22.14.
Заметим, что если присвоить свойству "Filter" значение пустой строки (""), то его
действие будет отменено (рис. 22.14).
увеличить изображение
Рис. 22.15.
Наконец рассмотрим код для кнопки "Закрыть". Дважды щелкните ЛКМ по этой кнопке
и в появившейся процедуре "Button5_Click" наберите команду "Me.Close()",
закрывающую выше рассматриваемую форму (рис. 22.16).
увеличить изображение
Рис. 22.16.
Задайте надпись у новой кнопки (свойство Text), как "Таблица". Форма примет
следующий вид (рис. 22.18):
Рис. 22.18.
Подключим к кнопке "Таблица" созданную ранее табличную форму (Form6). Для этого
дважды щелкните ЛКМ по кнопке "Таблица" и в появившейся процедуре
"Button8_Click" наберите команду "Form6.Show" (рис. 22.19).
увеличить изображение
Рис. 22.19.
Теперь проверим работоспособность созданной табличной формы. Запустите проект и на
главной кнопочной форме нажмите кнопку "Таблица "Студенты"". На появившейся
ленточной форме, отображающей таблицу "Студенты" нажмите кнопку "Таблица".
Появится новая табличная форма (рис. 22.20).
увеличить изображение
Рис. 22.20.
Хотелось бы отметить тот факт, что после проведения всех вышеописанных действий
панель обозревателя проекта (Solution Explorer) примет вид (рис. 22.21):
Рис. 22.21.
Цели:
Отчёты
Для создания пустого отчёта в оконном меню необходимо выбрать пункт "Project\Add
New Item…" и в появившемся окне в разделе "Reporting" дважды щёлкнуть ЛКМ по
пункту "Report" появится вкладка с пустым отчётом. Теперь в отчёт необходимо
добавить объекты для отображения данных.
Замечание: Работа со строками, столбцами или ячейками объектов Table, Matrix и List
осуществляется как в программе "Microsoft Excel".
Замечание: В ячейках объектов Table, Matrix и List можно печатать текст, как и в
ячейках таблиц "Microsoft Excel". Чтобы поместить в ячейку значение поля его можно
перетащить из окна "Data Sources" в ячейку, либо в ячейке написать код, имеющий
следующий синтаксис: = Fields!<Имя поля>.Value, где Имя поля - это имя отображаемого
поля. Аналогично можно производить вычисления в ячейках.
Пример: В ячейке отобразить средний бал трёх полей: Оценка1, Оценка2 и Оценка3.
для решения этой задачи в ячейке необходимо набрать код:
= (Fields!Оценка1.Value+Fields!Оценка2.Value+ Fields!Оценка3.Value)/3
Рис. 24.1.
В рабочей области среды разработки появится пустой отчет. Новый отчет также
отобразится и на панели обозревателя проекта (Solution Explorer) (рис. 24.3).
Рис. 24.3.
Для того чтобы в отчет поместить поля таблицы "Студенты" в него необходимо добавить
объект "Table" (Таблица). Для этого на панели объектов (Toolbox) нажмите кнопку
увеличить изображение
Рис. 24.4.
Рис. 24.5.
и в появившемся меню выберите пункт "Insert Row Below" (Вставить строку ниже) (рис.
24.6).
Рис. 24.6.
Проделайте эту операцию одиннадцать раз. Таблица примет вид (рис. 24.7)
Рис. 24.7.
Наша таблица имеет три столбца. Один столбец является лишним, так как нам
необходимо всего два столбца: один для отображения полей таблицы "Студенты", а
другой для подписей к ним. Поэтому удалим первый столбец таблицы. Щелкните ПКМ
по заголовку первого столбца таблицы и в появившемся меню выберите пункт "Delete
Columns" (Удалить строки) (рис. 24.8).
Рис. 24.8.
Рис. 24.9.
Поместим в таблицу поля таблицы "Студенты". Для этого перетащите поля таблицы
"Студенты" с панели "Источники данных" (Data Sources) в ячейки правого столбца
таблицы, расположенные под заголовком, как показано на рис. 24.11. В одну ячейку
перетаскивается одно поле Поля связи, имеющие в своем имени слово "Код"
перетаскивать не нужно.
Рис. 24.11.
В левом столбце таблицы наберите имена полей и установите их выравнивание по
правому краю (Свойство TextAlign). В заголовке наберите заголовок отчета "Отчет
таблицы "Студенты"" и сделайте выравнивание текста в нем по центру (рис. 24.12).
Рис. 24.12.
Теперь выделим ячейки, отображающие поле "ФИО" серым цветом для логического
отделения одного студента от другого. Выделите вторую строку таблицы и на панели
свойств (Properties) в свойстве "BackColor" (Цвет фона) выберите серый цвет. Таблица
примет следующий вид (рис. 24.13).
Рис. 24.13.
Заключительным шагом в настройке таблицы будет включение отображения границ
ячеек. Выделите все ячейки с полями и подписями к ним. Затем на панели и нструментов
при помощи кнопки
Рис. 24.14.
Рис. 24.15.
Замечание: Обратите внимание на тот факт, что после подключения отчета к объекту,
отображающему отчеты, на панели невидимых объектов появились объекты связи,
подключающие отчет к таблице "Студенты" (рис. 24.16).
Рис. 24.16.
Рис. 24.18.
Теперь определим код обработчика события нажатия кнопки. Дважды щелкните ЛКМ по
кнопке "Отчет" и в появившейся процедуре "Button9_Click" наберите команду
"Form7.Show()" (рис. 24.20).
увеличить изображение
Рис. 24.20.
Проверьте работу отчета. Для завершения работы проекта просто закройте все открытые
формы.