Разработка программного обеспечения по автоматизации учебного процесса в колледже

Постановка задачи автоматизации учебного процесса колледжа и описание предметной области. Работа с базами данных в Delphi: способы, компоненты доступа к данным и работы с ними. Язык запросов SQL. База данных в Microsoft Access и результаты исследований.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 16.07.2008
Размер файла 55,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Состав языка SQL.

Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде. Поэтому, в язык SQL в качестве составных частей входят:

- язык манипулирования данными (Data Manipulation Language, DML)

- язык определения данных (Data Definition Language, DDL)

- язык управления данными (Data Control Language, DCL).

Это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд.

Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд:

SELECT (выбрать)

INSERT (вставить)

UPDATE (обновить)

DELETE(удалить)

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

CREATE DATABASE (создать базу данных)

CREATE TABLE (создать таблицу)

CREATE VIEW (создать виртуальную таблицу)

CREATE INDEX (создать индекс)

CREATE TRIGGER (создать триггер)

CREATE PROCEDURE (создать сохраненную процедуру)

ALTER DATABASE (модифицировать базу данных)

ALTER TABLE (модифицировать таблицу)

ALTER VIEW (модифицировать виртуальную таблицу)

ALTER INDEX (модифицировать индекс)

ALTER TRIGGER (модифицировать триггер)

ALTER PROCEDURE (модифицировать сохраненную процедуру)

DROP DATABASE (удалить базу данных)

DROP TABLE (удалить таблицу)

DROP VIEW (удалить виртуальную таблицу)

DROP INDEX (удалить индекс)

DROP TRIGGER (удалить триггер)

DROP PROCEDURE (удалить сохраненную процедуру)

Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать “язык управления доступом”. Он состоит из двух основных команд:

GRANT (дать права)

REVOKE (забрать права)

С точки зрения прикладного интерфейса существуют две разновидности команд SQL:

- интерактивный SQL

- встроенный SQL.

Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне.

Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе комбинируя set-ориентированный и record-ориентированный подходы.

Наиболее важной командой языка манипулирования данными является команда SELECT. Операция выборки позволяет получить все строки (записи) либо часть строк одной таблицы.

К логическим операторам относятся известные операторы AND, OR, NOT, позволяющие выполнять различные логические действия: логическое умножение (AND, “пересечение условий”), логическое сложение (OR, “объединение условий”), логическое отрицание (NOT, “отрицание условий”). В наших примерах мы уже применяли оператор AND. Использование этих операторов позволяет гибко “настроить” условия отбора записей. Оператор AND означает, что общий предикат будет истинным только тогда, когда условия, связанные по “AND”, будут истинны.

Оператор OR означает, что общий предикат будет истинным, когда хотя бы одно из условий, связанных по “OR”, будет истинным. Оператор NOT означает, что общий предикат будет истинным, когда условие, перед которым стоит этот оператор, будет ложным. В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем - AND и только после этого - оператор OR. Для изменения порядка выполнения операторов разрешается использовать скобки.

Изменение порядка выводимых строк (ORDER BY)

Порядок выводимых строк может быть изменен с помощью опционального (дополнительного) предложения ORDER BY в конце SQL-запроса. Это предложение имеет вид:

ORDER BY <порядок строк> [ASC | DESC]

Порядок строк может задаваться одним из двух способов:

- именами столбцов;

- номерами столбцов.

Способ упорядочивания определяется дополнительными зарезервированными словами ASC и DESC. Способом по умолчанию - если ничего не указано - является упорядочивание “по возрастанию” (ASC). Если же указано слово “DESC”, то упорядочивание будет производиться “по убыванию”.[2]

3 БАЗА ДАННЫХ В MICROSOFT ACCESS

С помощью электронных таблиц со списками студентов их посещаемостью и успеваемостью была создана база данных в MS ACSESS.

Приложение Microsoft Access является мощной и высокопроизводительной 32-разрядной системой управления реляционной базой данных (далее СУБД).

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

Реляционная база данных. Практически все СУБД позволяют добавлять новые данные в таблицы. С этой точки зрения СУБД не отличаются от программ электронных таблиц (Excel), которые могут эмулировать некоторые функции баз данных.[11]

Существует три принципиальных отличия между СУБД и программами электронных таблиц:

1) СУБД разрабатываются с целью обеспечения эффективной обработки больших объёмов информации, намного больших, чем те, с которыми справляются электронные таблицы;

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

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

Access - мощное приложение Windows. При этом производительность СУБД органично сочетаются со всеми удобствами и преимуществами Windows.

Как реляционная СУБД Access обеспечивает доступ ко всем типам данных и позволяет одновременно использовать несколько таблиц базы данных. Можно использовать таблицы, созданные в среде Paradox или dBase.

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

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

В последних версиях Access представлен новый формат файла (MDE) -библиотеки, с помощью которого можно создавать приложения, не включая VBA-код.[11]

Основные функции:

1) Организация данных. Создание таблиц и управление ими;

2) Связывание таблиц и обеспечение доступа к данным. Access позволяет связывать таблицы по совпадающим значениям полей, с целью последующего соединения нескольких таблиц в одну;

3) Добавление и изменение данных. Эта функция требует разработки и реализации представленных данных, отличных от табличных (формы);

4) Представление данных. Access позволяет создавать различные отчёты на основе данных таблиц и других объектов базы данных;

5) Макросы. Использование макросов позволяет автоматизировать повторяющиеся операции. В последних версиях Access макросы используют для совместимости;

6) Модули. Модули представляют собой процедуру или функцию, написанные на Access VBA (диалект Visual Basic Application). Эти процедуры можно использовать для сложных вычислений. Процедуры на Access VBA превышают возможности стандартных макросов;

7) Защита базы данных. Эти средства позволяют организовать работу приложения в многопользовательской среде и предотвратить несанкционированный доступ к базам данных;

8) Средства печати. С помощью этой функции Access позволяет распечатать практически всё, что можно увидеть в базе данных;

Access так же позволяет создавать дистрибутивные диски для распространения готового приложения (с помощью Office Developer Edition Tools). Распространение подразумевает поставку всех необходимых файлов на каком-либо носителе.

Пакет ODE Tools включает мастер установки, автоматизирующий создание средств распространения и программы установки. Он так же позволяет выполнение приложения на компьютерах, на которых не установлен Access.

Элементы базы данных:

1) Таблицы. В базе данных информация хранится в виде двумерных таблиц.

Можно так же импортировать и связывать таблицы из других СУБД или систем управления электронными таблицами. Одновременно могут быть открыты 1024 таблицы;

2) Запросы. При помощи запросов можно произвести выборку данных по какому-нибудь критерию из разных таблиц. В запрос можно включать до 255 полей;

3) Формы. Формы позволяют отображать данные из таблиц и запросов в более удобном для восприятия виде. С помощью форм можно добавлять и изменять данные, содержащиеся в таблицах. В формы позволяют включать модули;

4) Отчёты. Отчёты предназначены для печати данных, содержащихся в таблицах и запросах, в красиво оформленном виде. Отчёты так же позволяют включать модули;

5) Макросы

6) Модули. Модули содержат VBA-код, используемый для написания процедур обработки событий таких, как, например, нажатия кнопки в форме или отчёте, для создания функций настройки, для автоматического выполнения операций над объектами базы данных и программного управления операциями, т.е. добавление VBA-кода позволяет создать полную базу данных с настраиваемыми меню, панелями инструментов и другими возможностями. Модули снимают с пользователя приложения необходимость помнить последовательность выбора объектов базы данных для выполнения того или иного действия и повышают эффективность работы;

В состав Access входит множество мастеров, построителей и надстроек, которые позволяют упростить процесс создания объектов базы данных.

Таблицы

1) Создание таблицы в режиме Мастера таблиц.

Процесс создания объекта базы данных при помощи мастера делится на несколько шагов, на каждом из которых можно установить требуемые ха-рактеристики создаваемого объекта. Мастер таблиц позволяет создать но-вую таблицу на основе 33 образцов таблиц делового применения и 20 образцов таблиц личного применения (для английской версии Access соответственно 77 и 44). Многие таблицы базы данных созданы на основе образцов Мастера таблиц.

Использование Мастера таблиц служит отличным примером, позволяющим понять общую процедуру работы с мастерами Access. Создание таблиц на основе образцов Мастера таблиц имеет ограниченные возможности в настоящих приложениях. В большинстве случаев для создания таблиц используется импорт или связывание данных с другими базами данных или электронными таблицами.

2) Создание таблицы в режиме Конструктора таблиц.

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

3) Создание таблицы непосредственно в режиме таблицы.

Access дает возможность создания таблиц непосредственно в режиме таблицы. При этом Access создает пустую таблицу на основе таблицы, используемой по умолчанию, со структурой, имеющей 20 полей и 30 пустых записей. После этого можно вводить данные прямо в таблицу. При ее сохранении Access анализирует данные и выбирает тот тип для каждого поля, который больше всего соответствует введенным данным. Создание таблиц в режиме таблицы имеет ограниченное применение. Поля таблицы не имеют содержательных имен, так что почти всегда нужно будет редактировать структуру, чтобы переименовать поля.

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

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

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

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

- Один к одному. При использовании отношения "один к одному" за-пись в таблице "А" (главной таблице) может иметь не более одной связанной записи в таблице "В" (связанной таблице) и наоборот. Этот тип связи используют не очень часто, поскольку такие данные могут быть помещены в одну таблицу. Связь с отношением "один к одному" используют для разделения очень широких таблиц или для отделения части таблицы по соображениям защиты. В таблицах свя-занных отношением "один к одному" ключевые поля должны быть уникальными;

- Один ко многим. Связь с отношением "один ко многим" является наиболее часто используемым типом связи между таблицами. В такой связи каждой записи в таблице "А" могут соответствовать несколько записей в таблице "В", а запись в таблице "В" не может иметь более одной;

- Многие к одному. При использовании отношения "многие к одному" одной записи в таблице "А" может соответствовать одна запись в таблице “B”, а запись в таблице "В" может иметь более одной соответствующей ей записи в таблице "А". В таблице "А" ключевое поле должно быть уникальным. Связь с отношением "один ко многим" таблиц "А" и "В" можно рассматривать как связь с отношением "многие к одному" таблиц "В" и "А";

- Многие ко многим. При использовании отношения "многие ко многим" одной записи в таблице "А" могут соответствовать несколько записей в таблице "В", а одной записи в таблице "В" несколько записей в таблице "А". В этом случае не требуется уникальности ключевых полей таблиц "А" и "В". Этот вид отношения используется для связывания таблиц, имеющих только внешние ключи.

Связанные поля не обязательно должны иметь одинаковые имена, однако, они должны иметь одинаковые типы данных. Кроме того, связываемые поля типа "Числовой" должны иметь одинаковые значения свойства "Размер поля". Исключениями из этого правила являются поля счетчика с последовательной нумерацией, которые могут связываться с числовыми полями размера "Длинное целое". Существует возможность создать связь между текстовыми полями разной длины, но это может вызвать сложности при создании запросов.

Автоматическое обеспечение ссылочной целостности данных является важной особенностью Access. Если на связь между таблицами наложены условия ссылочной целостно-сти, то Access не позволяет добавлять в связанную таблицу записи, для которых нет соответствующих записей в главной таблице, и изменять записи в главной таблице таким образом, что после этого в связанной таблице появятся записи, не имеющие главных записей; а также удалять записи в главной таблице, для которых имеются подчиненные записи в связанной таблице. Условия целостности данных определяют систему правил, используемых в Access для поддержания связей между записями в связанных таблицах. Эти правила делают невозможным случайное удаление или изменение свя-занных данных. После наложения условий целостности данных на опера-ции со связанными таблицами накладываются ограничения. Невозможно ввести в поле внешнего ключа связанной таблицы значение, не содержа-щееся в ключевом поле главной таблицы.

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

Одним из основных принципов разработки реляционных баз данных является то, что все данные, содержащиеся в поле таблицы, должны иметь один и тот же тип. Для каждого поля таблицы необходимо задать тип дан-ных. По умолчанию используется тип данных «Текстовый». При задании типа дан-ных поля можно также указать размер, формат и другие параметры, влияющие на отображение значения поля и точность числовых данных.

Основные типы данных:

1) Текстовый. Текст или числа, не требующие проведения расчётов;

2) МЕМО. Поле этого типа предназначено для хранения небольших текстовых данных (до 64000 символов). Поле этого типа не может быть ключевым или проиндексированным;

3) Числовой. Этот тип данных содержит множество подтипов. От выбора подтипа (размера) зависит точность вычислений;

4) Счётчик. Уникальные, последовательно возрастающие числа, автоматически вводящиеся при добавлении новой записи в таблицу;

5) Логический. Логические значения, а так же поля, которые могут содержать одно из двух возможных значений;

6) Денежный. Денежные значения и числовые данные, используемые в математических вычислениях;

7) Дата/Время. Дата и время хранятся в специальном фиксированном формате;

8) Поле объекта OLE. Включает звукозапись, рисунок и прочие типы данных. Поле этого типа не может быть ключевым или проиндексированным;

9) Гиперсвязь. Содержит адреса Web-страниц.

Запросы

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

В Access существует четыре типа запросов для различных целей:

Запросы на выборку отображают данные из одной или нескольких таблиц в виде таблицы.

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

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

Запросы с параметрами -- это такие запросы, свой-ства которых изменяются пользователем при каждом запуске. При запуске за-проса с параметром появляется диалоговое окно, в котором нужно ввести условие отбора. Этот тип запроса не является обособленным, т. е. параметр можно добавить к запросу любого типа.[11]

3.1 Этапы проектирования баз данных

Этапы проектирования и создания базы данных определяются следующей последовательностью:

- построение информационно-логической модели данных пред-метной области;

- определение логической структуры реляционной базы данных;

- конструирование таблиц базы данных;

- создание схемы данных;

- ввод данных в таблицы (создание записей);

- разработка необходимых форм, запросов, макросов, модулей, отчетов;

- разработка пользовательского интерфейса.

В процессе разработки модели данных необходимо выделить информационные объекты, соответствующие требованиям нормализации данных, и определить связи между ними. Эта модель позволяет создать реляционную базу данных без дублирования, в которой обеспечивается однократный ввод данных при первоначальной загрузке и корректировках, а также целостность данных при внесении изменений.[2]

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

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

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

Рассмотрим формальные правила, которые могут быть использованы для выделения информационных объектов:

- на основе описания предметной области выявить документы и их атрибуты, подлежащие хранению в базе данных;

-определить функциональные зависимости между атрибутами;

- выбрать все зависимые атрибуты и указать для каждого все его ключевые атрибуты, т. е. те, от которых он зависит;

- сгруппировать атрибуты, одинаково зависимые от ключевых атрибутов. Полученные группы зависимых атрибутов вместе с их ключевыми атрибутами образуют информационные объекты[2].

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

В процессе создания сначала конструируются таблицы базы данных, соответствующие информационным объектам построенной модели данных. Далее может создаваться схема данных, в которой фиксируются существующие логические связи между таблицами. Эти связи соответствуют связям информационных объектов. В схеме данных могут быть заданы параметры поддержания целостности базы данных, если модель данных была разработана в соответствии с требованиями нормализации. Целостность данных означает, что в БД установлены и корректно поддерживаются взаимосвязи между записями разных таблиц при загрузке, добавлении и удалении записей в связанных таблицах, а также при изменении значений ключевых полей.[2]

После формирования схемы данных осуществляется ввод непротиворечивых данных из документов предметной области.

На основе созданной базы данных формируются необходимые запросы, формы, макросы, модули, отчеты, производящие требуемую обработку данных базы и их представление.

С помощью встроенных средств и инструментов базы данных создается пользовательский интерфейс, позволяющий управлять процессами ввода, хранения, обработки, обновления и представления информации базы данных.[2]

4 ЭТАПЫ РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА

Данная программа создана для учета успеваемости студентов.

Для работы с программой необходимо нужные группы или списки студентов копировать из имеющегося списка, в электронную таблицу «spisok.xls». Списки копируются однажды, после чего могут удаляться напрямую из базы данных «poseshaemost.mdb». После копирования списков или групп необходимо принять данные с помощью кнопки «Сервис - принять данные», в появившемся окне нажать кнопку «Принять данные». Для ввода специальности для выбранной группы нажать на кнопку «справочники- специальности», в появившемся окне ввести группу и код специальности, списки копируются однажды, после чего могут удаляться напрямую из базы данных «poseshaemost.mdb». Для добавления дисциплины для этой группы необходимо нажать на кнопку «справочники- дисциплины», в появившемся окне ввести дисциплины. Дисциплины копируются однажды, после чего могут удаляться напрямую из базы данных «poseshaemost.mdb».

Для ввода оценок нужно нажать на кнопку «Данные - Разноска», где выбирается месяц и год обучения, а также дисциплина, специальность и группа. После ввода данных в эти строки следует «Добавить данные по дисциплине», на экране выведется группа, фамилия имя и отчество студентов, а также пустая графа оценок по выбранной дисциплине, которую необходимо заполнить. Корректировка данных производиться при помощи команды «Данные - корректировка», где корректируются месяц и год обучения, а также дисциплина, специальность и группа. В графе отчеты можно подвести итоги по успеванию и качеству знаний по БПЭК. Подвести итоги можно как по группе, так и по специальности и по колледжу в целом за определенный месяц и год обучения. После нажатия кнопки «Вычислить». Выведется успеваемость и качество. Также в графе подведение итогов можно посмотреть списки студентов неуспевающих (у которых есть хотя бы одна оценка «2»), а также успевающих на отлично (средний бал успеваемости которых «5»). После нажатия кнопки «Вывести», выведется список в электронной таблице Excel, неуспевающих студентов, либо успевающих на отлично. В графе «Отчет» за введенный месяц после нажатия кнопки «Пересчитать итоги» и «Отчет» выведется группа, месяц и год, а также количество студентов и процентное соотношение успеваемости общей и качество в электронной таблице Excel.

unit Unit12;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, DB, ADODB;

type

TForm12 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

ADOConnection1: TADOConnection;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

procedure N9Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form12: TForm12;

implementation

uses Unit13, Unit15, Unit14, Unit16, Unit17, Unit18;

{$R *.dfm}

procedure TForm12.N9Click(Sender: TObject);

begin

Form13.Show;

end;

procedure TForm12.N11Click(Sender: TObject);

begin

Form15.Show;

end;

procedure TForm12.N12Click(Sender: TObject);

begin

Form14.Show;

end;

procedure TForm12.FormCreate(Sender: TObject);

begin

//Form16.Show;

end;

procedure TForm12.N2Click(Sender: TObject);

begin

Form16.Show;

end;

procedure TForm12.N3Click(Sender: TObject);

begin

Form17.show;

end;

procedure TForm12.N4Click(Sender: TObject);

begin

Form18.show;

end;

end.

unit Unit13;

interfa

ceuses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Unit12, Forms,

Dialogs, ExcelXP, OleServer, Grids, DBGrids, StdCtrls, DB, ADODB;

type

TForm13 = class(TForm)

Label1: TLabel;

DBGrid1: TDBGrid;

ExcelWorkbook1: TExcelWorkbook;

ExcelApplication1: TExcelApplication;

ADOQuery1: TADOQuery;

DataSource1: TDataSource;

Button1: TButton;

ADOQuery2: TADOQuery;

ADOQuery1gruppa: TWideStringField;

ADOQuery1fio: TWideStringField;

ADOQuery1Datapr: TWideStringField;

ADOQuery1Prim: TWideStringField;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form13: TForm13;

implementation

{$R *.dfm}

procedure TForm13.Button1Click(Sender: TObject);

var n: OleVariant;

i:integer;

//S:String;

begin

ADOQuery2.ExecSQL;

AdoQuery1.Open;

n:='d:\55\spisok.xls';

ExcelApplication1.Workbooks.Add(n,0);

Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);

i:=2;

ADOQUERY1.Insert;

ExcelApplication1.Visible[0]:=False;

While i<2000 do

begin;

ADOQuery1.FieldByName('gruppa').AsString:=ExcelApplication1.Cells.Item[i,1].Value;

ADOQuery1.FieldByName('Fio').AsString:=ExcelApplication1.Cells.Item[i,2].Value;

ADOQuery1.FieldByName('Datapr').AsString:=ExcelApplication1.Cells.Item[i,3].Value;

ADOQuery1.FieldByName('Prim').AsString:=ExcelApplication1.Cells.Item[i,4].Value;

If ADOQuery1.FieldByName('gruppa').AsString='' then

begin

ADOQUERY1.Delete;

i:=2001;

end;

ADOQUERY1.Insert;

i:=i+1;

end;

ADOQuery1.Open;

Showmessage('Прием данных выполнен');

end;

end.

unit Unit14;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,Unit12, Controls, Forms,

Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids;

type

TForm14 = class(TForm)

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

DataSource1: TDataSource;

ADOQuery1: TADOQuery;

ADOQuery1Disziplina: TWideStringField;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form14: TForm14;

implementation

{$R *.dfm}

procedure TForm14.FormCreate(Sender: TObject);

begin

ADOQuery1.Active:=true;

end;

end.

unit Unit15;

interface

uses

Windows, Messages, SysUtils, Variants,Unit12,Classes, Graphics, Controls, Forms,

Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids;

type

TForm15 = class(TForm)

ADOQuery1: TADOQuery;

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

DataSource1: TDataSource;

ADOQuery1Grupa: TWideStringField;

ADOQuery1Spez: TWideStringField;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form15: TForm15;

implementation

{$R *.dfm}

procedure TForm15.FormCreate(Sender: TObject);

begin

ADOQuery1.Active:=true;

end;

end.

unit Unit16;

interface

uses

Windows, Messages, SysUtils, Variants, Classes,Unit12, Graphics, Controls, Forms,

Dialogs, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids;

type

TForm16 = class(TForm)

ADOQuery1: TADOQuery;

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

DataSource1: TDataSource;

ADOQuery1stud: TWideStringField;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

ComboBox3: TComboBox;

ComboBox4: TComboBox;

ComboBox5: TComboBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button1: TButton;

Dobav: TADOQuery;

ADOQuery1ozenka: TIntegerField;

ADOQuery1koddis: TWideStringField;

ADOQuery2: TADOQuery;

ADOTable1: TADOTable;

ADOTable2: TADOTable;

ADOTable1DSDesigner: TAutoIncField;

ADOTable1Grupa: TWideStringField;

ADOTable1Disziplina: TWideStringField;

procedure Button1Click(Sender: TObject);

procedure ComboBox4Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form16: TForm16;

implementation

{$R *.dfm}

procedure TForm16.Button1Click(Sender: TObject);

begin

Dobav.SQL.Clear;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Text:='delete from ozenka where(ozenka.kodspez = "'+Combobox4.Text+'"and ozenka.koddis = "'+Combobox3.Text+'"and ozenka.mes = "'+Combobox1.Text+'"and ozenka.god = "'+Combobox2.Text+'" and ozenka.gruppa="'+Combobox5.Text+'")';

ADOQuery2.ExecSQL;

Dobav.SQL.Add('Insert Into Ozenka ( gruppa,stud)');

Dobav.SQL.Add('Select gruppa,fio');

Dobav.SQL.Add(' From stud where (gruppa="'+Combobox5.text+'")');

//ShowMessage(Dobav.SQL.Text); //Dobav.SQL.Add(''

Dobav.ExecSQL;

Dobav.SQL.Clear;

Dobav.SQL.Add('UPDATE ozenka SET ozenka.kodspez = "'+Combobox4.Text+'", ozenka.koddis = "'+Combobox3.Text+'", ozenka.mes = "'+Combobox1.Text+'", ozenka.god = "'+Combobox2.Text+'" WHERE (((ozenka.gruppa)="'+Combobox5.Text+'")and(ozenka.koddis is null ));');

Dobav.ExecSQL;

ADOQUERY1.SQL.Clear;

ADOQUERY1.SQL.Add('Select* from ozenka where(ozenka.kodspez = "'+Combobox4.Text+'"and ozenka.koddis = "'+Combobox3.Text+'"and ozenka.mes = "'+Combobox1.Text+'"and ozenka.god = "'+Combobox2.Text+'" and ozenka.gruppa="'+Combobox5.Text+'")');

//ShowMessage(ADOQUERY1.SQL.Text);

ADOQUERY1.Active:=True;

end;

procedure TForm16.ComboBox4Change(Sender: TObject);

begin

ADOTable2.Open;

ADOTable2.First;

ComboBox5.Items.Clear;

While not ADOTable2.Eof do

begin

if ADOTable2.Fieldbyname('Spez').AsString=ComboBox4.Text Then

ComboBox5.Items.Add(ADOTable2.fieldbyname('grupa').AsString);

ADOTable2.Next;

end;

ADOTable2.Close;

ComboBox5.Sorted:=True;

end;

procedure TForm16.FormCreate(Sender: TObject);

begin

ADOTable1.Open;

ADOTable1.First;

ComboBox3.Items.Clear;

While not ADOTable1.Eof do

begin

ComboBox3.Items.Add(ADOTable1.fieldbyname('disziplina').AsString);

//ShowMessage(ADOTable1.fieldbyname('disziplina').AsString);

ADOTable1.Next;

end;

ADOTable1.Close;

ComboBox3.Sorted:=True;

end;

end.

unit Unit17;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids;

type

TForm17 = class(TForm)

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

ComboBox3: TComboBox;

ComboBox5: TComboBox;

Button1: TButton;

ADOQuery1: TADOQuery;

ADOQuery1stud: TWideStringField;

DataSource1: TDataSource;

ADOQuery1ozenka: TIntegerField;

ADOQuery1koddis: TWideStringField;

ComboBox4: TComboBox;

ADOTable1: TADOTable;

ADOTable2: TADOTable;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ComboBox4Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form17: TForm17;

implementation

{$R *.dfm}

procedure TForm17.Button1Click(Sender: TObject);

begin

ADOQUERY1.SQL.Clear;

ADOQUERY1.SQL.Add('Select* from ozenka where(ozenka.kodspez = "'+Combobox4.Text+'"and ozenka.koddis = "'+Combobox3.Text+'"and ozenka.mes = "'+Combobox1.Text+'"and ozenka.god = "'+Combobox2.Text+'" and ozenka.gruppa="'+Combobox5.Text+'")');

//ShowMessage(ADOQUERY1.SQL.Text);

ADOQUERY1.Active:=True;

end;

procedure TForm17.FormCreate(Sender: TObject);

begin

ADOTable1.Open;

ADOTable1.First;

ComboBox3.Items.Clear;

While not ADOTable1.Eof do

begin

ComboBox3.Items.Add(ADOTable1.fieldbyname('disziplina').AsString);

//ShowMessage(ADOTable1.fieldbyname('disziplina').AsString);

ADOTable1.Next;

end;

ADOTable1.Close;

ComboBox3.Sorted:=True;

end;

procedure TForm17.ComboBox4Change(Sender: TObject);

begin

ADOTable2.Open;

ADOTable2.First;

ComboBox5.Items.Clear;

While not ADOTable2.Eof do

begin

if ADOTable2.Fieldbyname('Spez').AsString=ComboBox4.Text Then

ComboBox5.Items.Add(ADOTable2.fieldbyname('grupa').AsString);

ADOTable2.Next;

end;

ADOTable2.Close;

ComboBox5.Sorted:=True;

end;

end.

unit Unit18;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DB, ADODB, Buttons, ExtCtrls, ComCtrls, ExcelXP,

OleServer, Grids, DBGrids;

type

TForm18 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

RadioGroup1: TRadioGroup;

BitBtn1: TBitBtn;

Label1: TLabel;

Label2: TLabel;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

Label4: TLabel;

Label5: TLabel;

ADOQuery1: TADOQuery;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

Label6: TLabel;

Label7: TLabel;

ComboBox3: TComboBox;

ComboBox6: TComboBox;

Label8: TLabel;

Label9: TLabel;

RadioGroup3: TRadioGroup;

ExcelWorkbook1: TExcelWorkbook;

ExcelApplication1: TExcelApplication;

BitBtn2: TBitBtn;

ADOQuery2: TADOQuery;

ComboBox7: TComboBox;

ComboBox8: TComboBox;

Label10: TLabel;

Label11: TLabel;

BitBtn3: TBitBtn;

ADOQuery3: TADOQuery;

ADOQuery4: TADOQuery;

ADOQuery5: TADOQuery;

ADOTable2: TADOTable;

ComboBox4: TComboBox;

ComboBox5: TComboBox;

DataSource1: TDataSource;

ADOQuery6: TADOQuery;

ADOTable6: TADOTable;

Button1: TButton;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure ComboBox4Change(Sender: TObject);

// procedure ComboBox4Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form18: TForm18;

implementation

{$R *.dfm}

procedure TForm18.BitBtn1Click(Sender: TObject);

var

k1:integer;

k2:integer;

k3:integer;

k4,k:double;

begin

//по группе

If radiogroup1.ItemIndex=0

then begin

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');

AdoQuery1.Active:=True;

k1:=AdoQuery1.fieldbyname('Count1').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');

AdoQuery1.Active:=True;

k2:=AdoQuery1.fieldbyname('Count2').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');

AdoQuery1.Active:=True;

k3:=AdoQuery1.fieldbyname('Count3').AsInteger;

k4:=Round((k3/k2*100)*100)/100;

k:=Round((k1/k2*100)*100)/100;

Edit1.Text:=FloatToStr(k4);

Edit2.Text:=FloatToStr(k);

end;

//по специальности

If radiogroup1.ItemIndex=1

then begin

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');

AdoQuery1.Active:=True;

k1:=AdoQuery1.fieldbyname('Count1').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');

AdoQuery1.Active:=True;

k2:=AdoQuery1.fieldbyname('Count2').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');

AdoQuery1.Active:=True;

k3:=AdoQuery1.fieldbyname('Count3').AsInteger;

k4:=Round((k3/k2*100)*100)/100;

k:=Round((k1/k2*100)*100)/100;

Edit1.Text:=FloatToStr(k4);

Edit2.Text:=FloatToStr(k);

end;

//по колледжу

If radiogroup1.ItemIndex=2

then begin

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');

AdoQuery1.Active:=True;

k1:=AdoQuery1.fieldbyname('Count1').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');

AdoQuery1.Active:=True;

k2:=AdoQuery1.fieldbyname('Count2').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');

AdoQuery1.Active:=True;

k3:=AdoQuery1.fieldbyname('Count3').AsInteger;

k4:=Round((k3/k2*100)*100)/100;

k:=Round((k1/k2*100)*100)/100;

Edit1.Text:=FloatToStr(k4);

Edit2.Text:=FloatToStr(k);

end;

end;

procedure TForm18.BitBtn2Click(Sender: TObject);

var n: OleVariant;

i:integer;

//S:String;

begin

if radiogroup3.ItemIndex=0 then begin

AdoQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT ozenka.ozenka, ozenka.stud, ozenka.gruppa, ozenka.koddis, ozenka.kodspez, ozenka.mes, ozenka.god FROM ozenka WHERE (((ozenka.ozenka)=2))');

ADOQuery1.SQL.Add('and mes="'+ combobox3.Text+'" and god="'+combobox6.Text+'"');

//Showmessage(adoquery1.SQL.Text);

ADOQuery1.Open;

ADOQuery1.First;

n:='d:\55\spisok55.xls';

ExcelApplication1.Workbooks.Add(n,0);

Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);

i:=3;

ExcelApplication1.Cells.Item[1,1].Value:='Cписок неуспевающих';

ExcelApplication1.Cells.Item[1,2].Value:=Combobox3.Text;

ExcelApplication1.Cells.Item[1,3].Value:=Combobox6.Text;

ExcelApplication1.Visible[0]:=true;

While not ADOQuery1.Eof do

begin;

ExcelApplication1.Cells.Item[i,1].Value:=ADOQuery1.FieldByName('Stud').AsString;

ExcelApplication1.Cells.Item[i,2].Value:=ADOQuery1.FieldByName('koddis').AsString;

ExcelApplication1.Cells.Item[i,3].Value:=ADOQuery1.FieldByName('ozenka').AsString;

ExcelApplication1.Cells.Item[i,4].Value:=ADOQuery1.FieldByName('gruppa').AsString;

ADOQUERY1.Next;

//ADOQUERY1.Post;

i:=i+1;

end;

end;

if radiogroup3.ItemIndex=1 then begin

AdoQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT ozenka.stud, Avg(ozenka.ozenka) AS [Avg-ozenka], ozenka.mes,ozenka.gruppa, ozenka.god FROM ozenka');

ADOQuery1.SQL.Add('GROUP BY ozenka.stud, ozenka.mes,ozenka.gruppa, ozenka.god');

ADOQuery1.SQL.Add('HAVING (((Avg(ozenka.ozenka))=5));');

//ADOQuery1.SQL.Add('and mes="'+ combobox3.Text+'" and god="'+combobox6.Text+'"');

ADOQuery1.Open;

ADOQuery1.First;

n:='d:\55\spisok55.xls';

ExcelApplication1.Workbooks.Add(n,0);

Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);

i:=3;

ExcelApplication1.Cells.Item[1,1].Value:='Cписок успевающих на отлично';

ExcelApplication1.Cells.Item[1,2].Value:=Combobox3.Text;

ExcelApplication1.Cells.Item[1,3].Value:=Combobox6.Text;

ExcelApplication1.Visible[0]:=true;

While not ADOQuery1.Eof do

begin;

ExcelApplication1.Cells.Item[i,1].Value:=ADOQuery1.FieldByName('Stud').AsString;

ExcelApplication1.Cells.Item[i,2].Value:='все';

ExcelApplication1.Cells.Item[i,3].Value:='5';

ExcelApplication1.Cells.Item[i,4].Value:=ADOQuery1.FieldByName('gruppa').AsString;

ADOQUERY1.Next;

//ADOQUERY1.Post;

i:=i+1;

end;

end;

end;

procedure TForm18.BitBtn3Click(Sender: TObject);

var

n: OleVariant;

i:integer;

k1:integer;

k2:integer;

k3:integer;

k4,k:double;

begin

ADOQuery4.SQL.Text:='drop table ots1';

ADOQuery4.ExecSQL;

//ADoQuery.Active:=false;

ADoQuery2.Active:=true;

ADOQuery2.Edit;

ADoQuery2.First;

ADoQuery5.Active:=true;

ADoQuery5.First;

ADOQuery2.insert;

ADoQuery3.SQL.Text:='Select* from spez';

ADOQuery3.Active:=true;

While not ADoQuery3.Eof do

begin

ADOQuery2.FieldByName('Gruppa').AsString:=ADOQuery3.FieldByName('Grupa').AsString;

ADOQuery2.FieldByName('Spez').AsString:=ADOQuery3.FieldByName('Spez').AsString;

ADOQuery2.FieldByName('kolledg').AsString:='koledg';

Combobox1.Text:=Combobox7.Text;

Combobox2.Text:=Combobox8.Text;

Combobox5.Text:=ADOQuery2.FieldByName('Gruppa').AsString;

Combobox4.Text:=ADOQuery2.FieldByName('Spez').AsString;

//Combobox1.Text:=Combobox7.Text;

//Combobox2.Text:=Combobox8.Text;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');

AdoQuery1.Active:=True;

k1:=AdoQuery1.fieldbyname('Count1').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');

AdoQuery1.Active:=True;

k2:=AdoQuery1.fieldbyname('Count2').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');

AdoQuery1.Active:=True;

k3:=AdoQuery1.fieldbyname('Count3').AsInteger;

//ShowMessage(FloatToStr(k4));

// ShowMessage(FloatToStr(k));

IF K2>0 then begin

k4:=Round((k3/k2*100));

k:=Round((k1/k2*100));

//Edit1.Text:=FloatToStr(k4);

//Edit2.Text:=FloatToStr(k);

ADOQuery2.FieldByName('usp').AsString:=FloatToStr(k4);

ADOQuery2.FieldByName('kas').AsString:=FloatToStr(k);

ADOQuery2.FieldByName('kol').AsString:=FloatToStr(k2);

end;

ADOQuery2.Insert;

ADOQuery3.Next;

end;

//по специальностям

ADoQuery2.Active:=true;

ADOQuery2.Edit;

ADoQuery2.First;

ADoQuery3.SQL.Text:='Select spez from spez';

ADoQuery3.Active:=true;

ADoQuery3.First;

ADOQuery2.insert;

While not ADoQuery3.Eof do

begin

//ADOQuery2.FieldByName('Gruppa').AsString:=ADOQuery3.FieldByName('Grupa').AsString;

ADOQuery2.FieldByName('Spez').AsString:=ADOQuery3.FieldByName('Spez').AsString;

ADOQuery2.FieldByName('kolledg').AsString:='koledg';

Combobox1.Text:=Combobox7.Text;

Combobox2.Text:=Combobox8.Text;

//Combobox5.Text:=ADOQuery2.FieldByName('Gruppa').AsString;

Combobox4.Text:=ADOQuery2.FieldByName('Spez').AsString;

//Combobox1.Text:=Combobox7.Text;

//Combobox2.Text:=Combobox8.Text;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');

AdoQuery1.Active:=True;

k1:=AdoQuery1.fieldbyname('Count1').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');

AdoQuery1.Active:=True;

k2:=AdoQuery1.fieldbyname('Count2').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');

AdoQuery1.Active:=True;

k3:=AdoQuery1.fieldbyname('Count3').AsInteger;

//ShowMessage(FloatToStr(k4));

//ShowMessage(FloatToStr(k));

IF K2>0 then begin

k4:=Round((k3/k2*100));

k:=Round((k1/k2*100));

//Edit1.Text:=FloatToStr(k4);

//Edit2.Text:=FloatToStr(k);

ADOQuery2.FieldByName('usp').AsString:=FloatToStr(k4);

ADOQuery2.FieldByName('kas').AsString:=FloatToStr(k);

ADOQuery2.FieldByName('kol').AsString:=FloatToStr(k2);

end;

ADOQuery2.Insert;

ADOQuery3.Next;

end;

//по колледжу

ADOQuery2.insert;

//ADOQuery2.FieldByName('Gruppa').AsString:=ADOQuery3.FieldByName('Grupa').AsString;

//ADOQuery2.FieldByName('Spez').AsString:=ADOQuery3.FieldByName('Spez').AsString;

ADOQuery2.FieldByName('kolledg').AsString:='koledg';

Combobox1.Text:=Combobox7.Text;

Combobox2.Text:=Combobox8.Text;

//Combobox5.Text:=ADOQuery2.FieldByName('Gruppa').AsString;

Combobox4.Text:=ADOQuery2.FieldByName('Spez').AsString;

//Combobox1.Text:=Combobox7.Text;

//Combobox2.Text:=Combobox8.Text;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');

AdoQuery1.Active:=True;

k1:=AdoQuery1.fieldbyname('Count1').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god ');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');

AdoQuery1.Active:=True;

k2:=AdoQuery1.fieldbyname('Count2').AsInteger;

ADOQuery1.SQL.Clear;

AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god');

AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');

AdoQuery1.Active:=True;

k3:=AdoQuery1.fieldbyname('Count3').AsInteger;

//ShowMessage(FloatToStr(k4));

//ShowMessage(FloatToStr(k));


Подобные документы

  • Проектирование базы данных учета посещаемости и среда разработки программного продукта. Работа с базами данных Access в Delphi: компоненты доступа к данным, создание отчетов в Delphi и запросов на языке SQL. Программа и эксплуатационная документация.

    дипломная работа [53,2 K], добавлен 16.07.2008

  • Разработка информационного и алгоритмического обеспечения системой управления базами данных Microsoft Access. Реализация и принцип работы основных компонентов подсистемы поддержки принятия решений. Особенности разработки программного модуля в Delphi.

    реферат [333,9 K], добавлен 15.11.2009

  • Основные понятия баз данных: нормализация, связи и ключи. Создание и этапы проектирования базы данных, решение задачи о предметной области. Изучение СУБД Microsoft Access s 2003: пользовательский интерфейс, главное окно приложения, создание таблиц.

    реферат [2,1 M], добавлен 10.11.2010

  • Создание информационной системы работы такси с целью обеспечения диспетчерам более быстрого и удобного поиска необходимой информации. Создание таблиц и связей для работы с базами данных в среде Microsoft Access 2007. разработка запросов и отчетов.

    курсовая работа [3,1 M], добавлен 06.05.2013

  • Проектирование базы данных Access. Система управления базами данных. Создание и обслуживание базы данных, обеспечение доступа к данным и их обработка. Постановка задач и целей, основных функций, выполняемых базой данных. Основные виды баз данных.

    лабораторная работа [14,4 K], добавлен 16.11.2008

  • База данных - это совокупность сведений о конкретных объектах реального мира в какой-либо предметной области. Классификация баз данных. Использование СУБД Microsoft Access для создания баз данных: особенности и функциональные возможности программы.

    реферат [623,6 K], добавлен 22.05.2008

  • Проектирование и создание базы данных в СУБД Access для автоматизации работы магазина компьютерной техники. Режимы работы с базами данных, таблицы как основные объекты базы. Источники записей для форм, отчетов и страниц доступа, хранение структуры базы.

    курсовая работа [249,8 K], добавлен 14.09.2011

  • Создание модели "сущность-связь" и нормализация данных средствами программы Microsoft Access. Идентификация объектов предметной области и отношений между ними, разработка структуры физической модели, запросов и отчетов базы данных о студентах ВУЗа.

    контрольная работа [742,8 K], добавлен 08.06.2011

  • Методы концептуального, логического и физического проектирования баз данных для автоматизации работы объекта. Обследование предметной области; тестирование и реализация информационного и программного обеспечения. Подготовка конструкторской документации.

    курсовая работа [4,0 M], добавлен 16.05.2012

  • Системы визуального объектно-ориентированного программирования. Среда разработки Delphi. Microsoft Access как система управления базами данных реляционного типа. Структурированный язык запросов SQL. Программирование базы данных Библиотечного фонда.

    курсовая работа [2,5 M], добавлен 08.01.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.