ПР_03 1620 н (Практические занятий по делфи)

2017-07-08СтудИзба

Описание файла

Файл "ПР_03 1620 н" внутри архива находится в папке "Практические занятий по делфи". Документ из архива "Практические занятий по делфи", который расположен в категории "". Всё это находится в предмете "информационные технологии" из 2 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информационные технологии" в общих файлах.

Онлайн просмотр документа "ПР_03 1620 н"

Текст из документа "ПР_03 1620 н"

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«Московский государственный университет приборостроения и информатики»

Кафедра ИТ-6 «Управление и моделирование систем»

Утверждаю

Зав. кафедрой ИТ-6

_____________ /Мацнев А.П./

«____» ____________ 200__ г.

Для преподавателей

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

Методическая разработка для проведения

практического занятия № 3

1620 Средства визуального программирования

(шифр, наименование учебной дисциплины)

Тема «Проектирование отчетов и использование запросов при проектировании приложений »

(наименование темы практического занятия)

Рассмотрено на УМС кафедры ИТ-6

«3» ноября 2006 г.

Протокол УМС № 3

Москва, МГУПИ 2006 г.

Тема практического занятия:

Проектирование отчетов и спользование запросов при проектировании приложений

(наименование темы практического занятия / раздела дисциплины)

Цели практического занятия:

  • Создать условия для формирования представления о создании отчетов, использовании запросов к БД

  • Формирование навыков работы с QuickReport, SQL запросами

  • Развить познавательный интерес в области программирования;

  • Развить знания и умения студентов в при работе с базами данных;

Задачи практического занятия:

Воспитательная – развитие познавательного интереса к базам данных.

Учебная – познакомить студентов с генерацией и печатью отчетов: QuickReport, использования SQL запросов

Познавательная – расширение кругозора при работе с базами данных

Продолжительность занятия:

2 часа (90 мин.)

Место проведения:

(учебная аудитория, специализированный класс, лаборатория)

Литература для подготовки:

основная

  1. А. Д. Хомоненко. Базы данных. Учеб. для вузов А. Д. Хомоненко, В. М. Цыганков, М. Г. Мальцев Под ред. А. Д. Хомоненко. - М.: Бином Пресс; СПб.: Корона Принт. 2006г. 736 стр.

  2. Л. В. Рудикова. Базы данных. Разработка приложений для студентов. Л. В. Рудикова Серия: Для студентов. - СПб.: БХВ-Петербург.2006г. 487 стр.

  3. С. П. Кандзюба. Delphi. Базы данных и приложения. С. П. Кандзюба, В. Н. Громов Серия: Лекции и упражнения. - СПб.: DiaSoft UP . 2005 г. 569 стр.

  4. В. В. Фаронов. Программирование баз данных в Delphi 7. В. В. Фаронов. Серия: Учебный курс.- СПб.: Питер. 2006г. 458 стр

дополнительная

  1. С. П. Кандзюба. Delphi. Базы данных и приложения. С. П. Кандзюба, В. Н. Громов Серия: Эффективный самоучитель. - СПб.: DiaSoft UP. 2005 г. 569 стр.

  2. Рэймонд Фрост. Базы данных. Проектирование и разработка. Самоучитель Р. Фрост, Д. Дей, К. В. Слайк Пер. с англ. А. Ю. Кухаренко. Серия: Самоучитель. - М.: НТ Пресс. 2007г. 590 стр.

  3. "Фаронов В.В., Шумаков П.В." Delphi 4. Руководство разработчика баз данных. М. : "Нолидж". 1999 г. 560 с.

  4. Шумаков, П.В.; Фараонов, В.В. Delphi 5. Руководство разработчика баз данных. Издательство: М.: Нолидж. 2001 г. 640 с.

Учебно-материальное обеспечение:

  1. Руководства и пособия:

М. Э. Абрамян Delphi 7 Карманный справочник с примерами

  1. Наглядные материалы, пособия:

-

  1. Технические средства обучения:

Delhi 7, ЭВМ, средство питания

  1. Приложения:

-

(наименования и №№ схем, таблиц, слайдов, диафильмов)

План проведения практического занятия.

  1. Вступительная часть

Продолжительность:

до 10 мин.

  1. Основная часть (учебные вопросы)

Подразделы материала лекции:

до 80 мин.

1-й учебный вопрос:

Создание отчета в БД

до 10 мин.

(наименование учебного вопроса, подраздела)

2-й учебный вопрос:

Быстрое создание отчета

до 10 мин.

(наименование учебного вопроса, подраздела)

3-й учебный вопрос:

Report Wizard - эксперт по созданию настраиваемого отчета

до 10 мин.

(наименование учебного вопроса, подраздела)

4-й учебный вопрос:

SQL-запрос

до 20 мин.

(наименование учебного вопроса, подраздела)

5-й учебный вопрос:

Запрос к БД (Query)

до 10 мин.

(наименование учебного вопроса, подраздела)

6-й учебный вопрос:

Примеры

до 20 мин.

(наименование учебного вопроса, подраздела)

  1. Заключительная часть

Заключение

до 10 мин.

Содержание практического занятия.

  1. Введение

.

Организационный момент:

– проверка наличия студентов по докладу старосты;

– проверка наличия журнала группы, правильности записи темы занятия, отметок об отсутствующих и факта проведения занятия (подпись в журнале);

– проверка готовности и порядка в аудитории, наличия конспектов, учебной литературы, пособий;

Мотивационное начало занятия:

Актуальность темы:

Изучение QuickReport

Цель и основные задачи практического занятия:

Рассмотреть основы Генератора отчетов QuickReport

Область применения знаний, полученных в ходе практического занятия:

Область программирования

Особенности изучения студентами материала по рассматриваемой проблеме:

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

  1. Основная часть

1-й учебный вопрос:

Создание отчета в БД

наименование вопроса практического занятия (формулировка задания или задачи)

содержание учебного вопроса, принципов его рассмотрения, решение задания:

Создание отчета в БД

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

Все это создается с помощью компонент, описанных выше.

Пример № 1. Создание отчета для печати содержимого БД «Телефонная книжка»

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

1. Откроем стандартной командой проект, находящийся в файле MyExampleDB.dpr и полученный в результате выполнения лабораторной работы № 2. Изменим свойство Caption формы Form1 на «Информация о людях с выводом отчета».

Сохраним все открытые файлы проекта под теми же именами, но только с индексом 2: MyExUnitDB2.pas, MyExampleDB2.dpr.

2. Добавим новую форму в проект с помощью команды главного меню File|New Form. В этой форме будет создаваться отчет. Изменим свойство Caption формы на «список телефонов».

Сохраним форму в файле с именем MyUnitReport2.pas.

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

USES MyExUnitDB2

4. Определим форму Form2 как отчет. Для этого требуется произвести следующие действия:

4.1 Перенесем со страницы QReport палитры компонент в форму Form2 компоненту QuickRep. Она изображается в виде прямоугольной области размером с лист формата А4, с координатной сеткой. В этой области также пунктирной линией отмечена граница области, которая будет распечатана. По умолчанию все поля, которые определяют эту область, равны 1 см.

4.2 Кроме того, у формы Form2 появятся линейки скроллинга. С помощью инспектора объектов зададим свойству DataSet компоненты QuickRep 1 значение Form1.Table 1. Таким образом определен источник данных для отображения в отчете - это информация из таблицы People.db.

5. Оформим заголовок отчета. Для этого нужно сделать следующее:

  1. На форму Form2 со страницы QReport палитры компонент помес­ тим компоненту QRBand (Секция). Она изображается в виде полосы на всю ширину области печати и используется для вывода заголовка отчета.

  2. Со страницы QReport поместим на компоненту QRBand1 метку QRLabel (Текст в отчете).

  3. Зададим для компоненты QRLabel 1 значение свойства Caption как «Список телефонов», а в сложном свойстве Font установим размер шрифта (Size), равный 16. Поместим эту компоненту в центральной части компоненты QRBand1.

6. Определим секцию для основного отчета, в которую будет выводится информация о людях (из источника данных, определенного в QReport):

6.1. Со страницы QReport поместим на Form2 компоненту QRBand. Она будет находиться под компонентой QRBand1. Изменим свойство BandType этой компоненты на rbDetail, используя выпадающий список. Это означает, что с ее помощью будут выводиться конкретные данные.

6.2. Со страницы QReport поместим на компоненту QRBand2 рядом друг с другом три компоненты QRDBText (Строка с данными из БД). Для этих компонент зададим свойству DataSet значение Form1. Table 1, а их свойству DataField соответственно присвоим значения Family,Name, SecName.

Для всех этих строк зададим свойству AutoSize значение False, чтобы иметь возможность изменять размеры полей. Несколько увеличим размеры компонент по горизонтали, примерно до 4 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRBand2.

6.3. Изменим высоту QRBand2 так, чтобы она и компоненты QRDBText1, QRDBText2 и QRDBText3 были примерно одинаковой высоты.

7. Определим секцию подотчета для вывода информации о телефонах:

7.1. Со страницы QReport поместим в Form2 компоненту QRSubDetail (Секция подотчета). Она находится под компонентой QRBand2. Зададим свойству DataSet этой компоненты значение Form1 .Table2. Таким образом определим источник данных для отображения в подотчете - это информация из таблицы БД Tel.db. Отметим, что свойство Master, которое определяет основной отчет для подотчета, уже автоматически установлено в QuickRep1.

7.2. Со страницы QReport поместим на компоненту QRSubDetail1 рядом друг с другом две компоненты QRDBText (Строка с данными из

БД).

7.3. Для этих компонент зададим свойству DataSet значение Forme1.Table2, а их свойству DataField соответственно присвоим значения Number и Type.

Для всех этих строк зададим свойству AutoSize значение False. Несколько увеличим размеры компонент по горизонтали, примерно до 3 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRSubDetail1.

7.4. Изменим высоту QRSubDetail1 так, чтобы она и компоненты QRDBText4 и QRDBText5 были примерно одинаковой высоты.

8. Разместим в отчете дополнительную системную информацию: время, дату и номера страниц отчета. Для этого выполним следующие действия:

8.1. Зададим вывод системного времени и даты: выберем компоненту QRBand1 и несколько увеличим ее вертикальный размер. Из страницы QReport перенесем на нее две компоненты QRSysData (Системные данные). Разместим эти компоненты одну под другой в левом верхнем углу секции QRBand1. Для компоненты QRSysData1 зададим свойству Data значение qrsDate, а свойству Text - значение Дата. Для компоненты QRSysData2 зададим свойству Data значение qrsTime, а свойству Text - значение Время. Для обеих компонент зададим свойству AutoSize значение False, увеличим их несколько по горизонтали.

  1. Выберем компоненту QRShape из палитры компонент и поместим ее так, чтобы внутри нее оказались компоненты QRSySData1 и QRSysData2 (поместить эту компоненту необходимо позади, для чего воспользуемся командой главного меню Edit|Send to back).

  2. Определим вывод номера страницы на каждой странице отчета. Из страницы QReport перенесем на форму Form2 еще одну компоненту QRBand. В тексте модуля она будет иметь имя QRBand3. Зададим ее свойству BandType значение rbPageFooter. Из страницы QReport примерно на середину компоненты QRBand3 поместим компоненту QRSysData. В модуле появится компонента с именем QRSysData3. Для этой компоненты выберем для свойства Data значение qrsPageNumber, а свойству Text зададим значение Страница.

9. Установим взаимосвязь между главной формой проекта Form1 и формой с отчетом Form2. Для этого в тексте модуля формы Form1, в секции implementation, сразу же после ее заголовка добавим строку:

USES MyUnitReport;

10. Поместим в форму Form1 кнопки, которые будут использоваться для вывода отчета и закрытия формы. Для этого выполним следующие действия:

  1. Со страницы Standart палитры компонент поместим в правый нижний угол формы Form1 две кнопки Button, предварительно освободив этот угол от компонент. Выберем кнопку Button2 и установим свойству Caption значение Выход.

  2. Активизируем эту кнопку мышью и в появившейся заготовке обработчика события ОпСНск поместим следующий текст: procedure TForm1 .Button2Click (Sender: TObject);

begin

Close; end;

10.3. Выберем кнопку Button 1 и установим ее свойству Caption значение «Отчет».

10.4. Активизируем эту кнопку и в появившейся заготовке обработчика события ОпСНск поместим следующий текст: procedure TForm1 .Button 1 Click (Sender: TObject);

begin

Form2. QuickRep 1 .Preview; end;

11. Сохраним внесенные изменения в проекте.

12. Запустим программу. Нажмем кнопку Отчет. В результате будет вызвана утилита QuickReport 2.0, которая отобразит отчет по всем записям в БД «Телефонная книжка». Завершим работу утилиты QuickReport 2.0 нажатием кнопки Close. Завершим работу программы, нажав кнопку Выход.

Обработка задания на печать. Класс TQRPrinter

Класс TQRPrinter является потомком класса TPersistent. Компонента этого класса является неотображаемой. Экземпляр этого объекта создается автоматически при выполнении приложения и может использоваться независимо от наличия компоненты QuickRep. Именно этот объект, который имеет имя QRPrinter, обеспечивает создание отчета, его предварительный просмотр, распечатку, а также возможность сохранения отчета в файле и последующую работу с ним. В основном эти действия и возможности по просмотру отчета, обеспечиваемые классом TQRPrinter, представлены в стандартной форме для предварительного просмотра утилиты QuickReport 2.0.

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

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

Класс TQRPrinter определяет ряд дополнительных свойств, методов и событий, которые мы рассматривать не будем.

2-й учебный вопрос:

Быстрое создание отчета

наименование вопроса практического занятия (формулировка задания или задачи)

содержание учебного вопроса, принципов его рассмотрения, решение задания:

Быстрое создание отчета

Средства быстрого создания отчета можно рассматривать скорее не как эксперт, который предполагает определенную настройку параметров, а как заготовку отчета определенного вида. В этой заготовке отсутствует связь с источником данных, информация из которого выводится в отчете. В Delphi Standart 3.0 для определения источника данных требуется определить характеристики компонент Table, помещенных в форму отчета, которые задают доступ к БД.

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

File|New|Forms|QuickReport Labels - создается заготовка отчета для печати почтовых этикеток. Этот отчет состоит из трех колонок, в которых выводятся прямоугольные почтовые этикетки.

File|New|Forms|QuickReport List - создается заготовка отчета, выводящего информацию в виде списка. Она включает в себя секцию заголовка отчета, секции заголовка страницы, секцию для вывода данных и секцию окончания страницы.

File|New|Forms|QuickReport Master/Detail - создается заготовка отчета с подотчетом. Она включает в себя секцию заголовка отчета, секцию заголовка страницы, секцию для вывода данных основного отчета, секцию для вывода данных подотчета, секцию для подведения итогов в подотчете и секцию окончания страницы.

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

Кроме того, имеется возможность создать форму с пустой заготовкой отчета. Для этого следует воспользоваться операцией File|New|New|Report. В результате получается форма с помещенной в нее компонентой QuickReport.

3-й учебный вопрос:

Report Wizard - эксперт по созданию настраиваемого отчета

наименование вопроса практического занятия (формулировка задания или задачи)

содержание учебного вопроса, принципов его рассмотрения, решение задания:

Report Wizard - эксперт по созданию настраиваемого отчета

Report Wizard - эксперт, содержащий диалоговые окна, в которых требуется определить, какая информация будет выведена в формируемом отчете. При этом создается отчет, в котором информация выводится списком. Этот эксперт позволяет создавать отчеты на основе локальных БД. На любом шаге работы можно прервать процесс создания отчета, нажав кнопку Cancel, а также из любого диалогового окна (кроме первого) можно вернуться к предыдущему, нажав кнопку <Back. Перемещаться от одного окна эксперта к следующему можно, нажимая кнопку Next>.

Вызвать данный эксперт можно с помощью операции File|New|Bisuness|QuickReport Wizard.

4-й учебный вопрос:

SQL-запрос

наименование вопроса практического занятия (формулировка задания или задачи)

содержание учебного вопроса, принципов его рассмотрения, решение задания:

SQL-запрос

На языке SQL можно создать запросы различных типов:

•запрос на выборку данных;

•запрос на добавление;

•запрос на обновление;

•запрос на удаление.

SQL-запрос, созданный с помощью DBD, помещается в файл с расширением sql.

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

Запрос на выборку.

Он предназначен для извлечения данных, находящихся в определенных полях одной или нескольких таблиц и соответствующих задаваемым условиям. Конструкция запроса следующая:

SELECT [DISTINCT] <список выводимых полей>

FROM <список используемых таблиц>

[WHERE <условие отбора>]

[ORDER BY <порядок сортировки>]

[GROUP BY <порядок группировки>]

[HAVING <условие отбора групп>]

[UNION <объединяемый запрос на выборку>] Рассмотрим подробнее отдельные части запроса.

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

[<таблица>.]<поле>[AS <псевдоним>] {,[<таблица>.]<поле>[AS

<псевдоним>]}, где таблица - имя таблицы, если в запросе присутствует только одна таблица, его можно опустить; поле - имя поля; псевдоним -псевдоним для имени поля является локальным в запросе; AS - оператор, ставящий в соответствие конкретному полю псевдоним. Если требуется получить данные из всех полей таблицы, то достаточно указать * вместо перечисления всех имен полей. <список используемых таблиц>:

"<файл с таблицей>" [<псевдоним>] {,"<файл с таблицей>"[<псевдоним>]}.

WHERE - зарезервированное слово, с которого начинается оператор задания условий. <условие отбора>:

Условие, устанавливающее объединение:

[(<таблицаM.поле1> <условие> <таблицаN.поле2>)]{AND|OR (<таблицаI.поле1> <условие> <таблицаJ.поле2>)}, где таблицаM, таблицаN таблицаI, таблицаJ — имена объединяемых таблиц; поле1, поле2 - имена полей в этих таблицах, по соответствию значений которых устанавливается взаимосвязь таблиц; условие - определяет соответствие значений в заданных полях двух таблиц, например: равенство, больше, меньше, не равно и другие операции сравнения; условий может быть несколько, в этом случае они объединяются при помощи круглых скобок и логических операций AND и OR. Если условие для объединения отсутствует, формируется результат, представляющий собой всевозможные объединения записей всех таблиц.

Условие на значение полей:

[[<таблица>.]<поле> <условие> <значение>] {AND|OR [<таблица>.]<поле> <условие> <значение>}.

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

ORDER BY - зарезервированное слово, с которого начинается оператор задания порядка сортировки. <порядок сортировки>:

[<таблица>.]<поле> [ASC|DESC] {,[<таблица >.]<поле> [ASC|DESC]}, где ASC (по умолчанию) или DESC - определяют порядок сортировки соответственно по возрастанию или убыванию.

GROUP BY - зарезервированное слово, с которого начинается оператор задания порядка группировки. <порядок группировки>:

[<таблица>.]<поле> {,[<таблица>.]<поле>}.

Запрос на добавление.

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

INSERT INTO "<файл с таблицей>" (<поле>{,<поле>})

VALUES (<значение>{,<значение>}). Рассмотрим подробнее отдельные части запроса:

файл с таблицей - имя файла с таблицей, в которую добавляется запись; должен быть с расширением и содержать путь; поле - имя поля, которому задается значение.

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

Запрос на обновление.

Этот запрос позволяет обновить значения в записях, которые соответствуют задаваемым условиям. Конструкция запроса следующая:

UPDATE "<файл с таблицей>"

SET <поле> = <значение>{, <поле> = <значение>}

[WHERE <условие отбора>] Рассмотрим некоторые части запроса:

SET - зарезервированное слово, с которого начинается оператор, задающий список подставляемых значений; <поле> = <значение>{, <поле> = <значение>} - список полей и значений, которые задаются этим полям. [WHERE <условие отбора>] - оператор, задающий условие отбора тех записей, в которых следует обновить данные. Запрос на удаление.

Этот запрос позволяет удалить из таблицы записи, удовлетворяющие заданным условиям. Конструкция запроса следующая:

DELETE FROM «<файл с таблицей>»

[WHERE <условие отбора>].

5-й учебный вопрос:

Запрос к БД (Query)

наименование вопроса практического занятия (формулировка задания или задачи)

содержание учебного вопроса, принципов его рассмотрения, решение задания:

Запрос к БД (Query)

Использование одной компоненты Table позволяет работать только с одной таблицей. Поэтому, когда необходимо работать с несколькими связанными таблицами, нужно создавать соответствующее число компонент Table. В этом случае целесообразно взять компоненту Query класса TQuery, являющегося потомком класса TDBDataSet. Эта компонента позволяет определить набор данных на основе нескольких таблиц с помощью SQL-запроса. Ее также удобно применять, когда таблица БД чрезмерно велика; в этом случае с помощью запроса можно ограничить набор рассматриваемых данных. Использование этой компоненты связано со знанием языка SQL.

Отметим сразу, что можно создать оператор Delphi SQL при помощи компоненты Query следующим образом:

  1. поместить на форму объекты Query, DataSource и связать их вместе;

  2. присвоить псевдоним объекта TQuery свойству DataBaseName;

  3. с помощью свойства SQL ввести указание SQL; 3) установить свойство Active в значение True.

Если каждый шаг был завершен правильно и если BDE установлено корректно, сетка должна будет содержать записи из указанной таблицы.

Delphi позволяет создавать SQL-запросы к БД как статические, в которых текст запроса остается неизменным, так и динамические (или запросы с параметрами). Динамические SQL-запросы содержат параметры, определенные в условиях отбора записей, которые в процессе выполнения программы могут изменяться. Таким образом, с помощью одного динамического запроса можно получать различные результаты при выполнении приложения. Синтаксическая конструкция динамических запросов аналогична статическим, за исключением того, что у них в секции, определяющей условия отбора записи, вместо значения записывается <параметр>, где параметр - имя параметра, вместо которого при выполнении приложения будет подставляться значение.

У класса TQuery отметим следующие наиболее важные свойства, которые он добавляет к наследуемым от классов TDataSet, TBDEDataSet и TDBDataSet:

Local - определяет расположение таблиц (True - локальные таблицы, False - таблицы на SQL-сервере); свойство только для чтения.

RequestLive - свойство логического типа (по умолчанию имеет значение False), определяет возможность изменять набор данных, полученный в результате выполнения запроса. Эта возможность имеется, если свойство имеет значение True, и у запросов, которые основаны на одной таблице и не используют сортировку и агрегатные функции. У остальных запросов результат доступен только для чтения независимо от значения данного свойства. В этих случаях можно посмотреть свойство CanModify для того чтобы увидеть, успешен ли запрос, если же нужно откорректировать таблицу с помощью запроса SQL, то следует использовать команду SQL Update.

SQL - свойство типа TStrings, определяет текст SQL-запроса, который используется при выполнении методов Open или ExecSQL.

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

UpdateMode - свойство типа TUpdateMode, определяет способ обновления записей из промежуточного буфера.

Следующие свойства компоненты TQuery используются в динамических SQL-запросах. Приведем некоторые из них:

DataSource - свойство типа TDataSource, определяет источник данных, значения полей которого используются как параметры для динамического запроса.

Params[Index] - свойство типа TParams, задает список элементов типа TParams, которые определяют параметры в динамическом запросе. С помощью этого свойства в редакторе значений параметров задаются начальные величины параметров. Чтобы перейти к редактору значений параметров запроса, нужно активизировать мышью значение этого свойства.

Класс TQuery добавляет к наследуемым от классов TDataSet, TBDEDataSet и TDBDataSet следующие методы (некоторые из них):

ExecSQL - процедура выполняет SQL-запрос.

Prepare - процедура посылает запрос в BDE для проверки синтаксиса и оптимизации. Рекомендуется выполнять для динамических запросов.

События, которые обрабатываются компонентой TQuery, полностью наследуются от класса TDataSet.

При подстановке переменных связи в динамический запрос программным методом с помощью свойства Params выполняются обычно следующие шаги:

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

  2. подготавливается объект TQuery с помощью выдачи команды Prepare;

  3. Свойству Params присваиваются конкректные значения;

4) Открывается запрос.

6-й учебный вопрос:

Примеры

наименование вопроса практического занятия (формулировка задания или задачи)

содержание учебного вопроса, принципов его рассмотрения, решение задания:

Пример № 1. Создание запроса для вывода записей, имеющих фамилию, начинающуюся с одной и той же буквы, из БД «Телефонная книжка»

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

  1. Загрузим заготовку проекта, созданную в практическом занятии № 2. Зададим свойству Caption формы значение «Информация о людях (запрос)». Сразу же сохраним все составные части проекта в файлах с теми же именами, что и прежние, но с добавлением цифры «5» в конце имени: MyExUnitDB5 .pas, MyExampleDB5.dpr.

  2. Со страницы DataAccess поместим на форму Form1 компоненту Query (Запрос).

Выберем компоненту Query 1, активизируем свойство SQL и в появившемся текстовом редакторе введем следующие строки, которые задают запрос на языке SQL:

SELECT D.*,D1.*

FROM "<путь к файлу>\People.db" D, "<путь к файлу>\Tel.db" D1

WHERE

(D.IDPeople = D1.IDPeople) AND (D.Family Like :FirstChar). Оператор Like позволяет отобрать записи, которые определяются параметром FirstChar в поле Family. Затем активизируем свойство Params и в появившемся окне редактора параметров запроса Form1.Query 1 Parameters выполним следующее. Выберем из списка Parameter Name (Название параметра) FirstChar, в строке ввода со списком DataType (тип данных) выберем String и в строке Value (Значение) введем А% - начальное значение. Завершим настройку нажатием кнопки ОК.

  1. Установим у свойств Active и RequestLive компоненты Query1 значение True, используя инспектор объектов.

  2. Со страницы DataAccess палитры компонент поместим на форму Form1 еще одну компоненту DataSource. Активизируем ее и установим свойство DataSet в Query1.

  3. Перейдем к форме Form1. Справа от компоненты DBGrid1 поместим со страницы Standart палитры компонент две компоненты Label. Свойству Caption компоненты Label6 зададим значение Постраничный, а свойству Caption компоненты Label7 - Просмотр.

  4. Ниже, под компонентами Label6 и Label7, поместим со страницы Standart кнопку Button. Изменим ее свойство Caption на Просмотр. При нажатии на эту кнопку будет происходить переход на новую форму, на которой будет реализован постраничный просмотр БД «Телефонная книжка». Активизируем ее и в появившемся обработчике события OnClick введем следующее:

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2.Visible := True;

end;

Свойство Visible обеспечивает отображение формы на экране после своего создания.

  1. Добавим в форму Form1 со страницы Additional палитры компонент компоненту Bevel. Поместим ее позади компонент Label6, Label7 и Button1. Теперь эта группа компонент будет выделяться на форме. Изменим ее свойство Style на bsRaised (она будет выпуклой).

  2. Создадим теперь вышеуказанную форму. Для этого выполним следующие действия:

8.1. Добавим в проект форму командой главного меню File|New Form.

  1. Изменим свойство Caption формы Form2 на «Постраничный просмотр» и сохраним форму под именем MyExUnitQuery.pas.

  2. В тексте модуля Form2 в секции implementation напишем следующую строчку для связи данной формы с Form1:

USESMyExUnitDB5;

Перейдем снова к форме Form1. В тексте ее модуля установим связь с Form2, для чего в секции implementation допишем:

USES MyExUnitQuery;

8.4. В верхний левый угол формы поместим компоненту ComboBox со страницы Standart палитры компонент. Изменим ее свойство Text на A. Затем активизируем свойство Items и в появившемся окне редактора введем на каждой строке последовательно по одной букве от «А» до «Я», за исключением, быть может, букв «Ь» и «Ъ». Завершим ввод нажатием кнопки ОК.

8.5. Со страницы Standart палитры компонент с помощью мыши поместим рядом с компонентой ComboBox 1 компоненту Button. Изменим ее свойство Caption на «Страница». Затем активизируем кнопку и в появившемся обработчике события OnClick введем оператор, задающий отображение в форме результатов выполнения запроса в компоненте Query1. Обработчик будет иметь следующий вид:

procedure TForm2.Button1ClickSender: TObject); begin

WITH Form1 .Query1 DO BEGIN Close; Prepare;

Params[0].AsString := ComboBox 1.Text + '%'; Open; END; end;

9. Поместим на форму Form2 еще одну компоненту Button, справа от компоненты Button1. Изменим ее свойство Caption на Назад. При помощи

этой кнопки мы сможем вернуться к форме Form1 во время работы приложения. Активизируем кнопку Button2 и в открывшемся обработчике события ОпСНск введем следующее:

procedure TForm2.Button2Click(Sender: TObject); begin

Close; end;

  1. Ниже помещенных нами компонент разместим на всю оставшуюся часть формы компоненту DBGrid со страницы DataControls палитры компонент. Зададим свойству DataSourse значение Form1 .DataSource3. При помощи редактора списка полей Editing DBGrid1 .Columns определим поля, которые будут отображаться в таблице (эти действия были описаны в лаб./раб. №2): Family, Name, SecName, Number, Type, задавая при этом через сложное свойство Titel заголовки столбцов в DBGrid1: Фамилия, Имя, Отчество, Номер, Тип соответственно.

  2. Поместим в низ формы Form1, приблизительно в центр, еще одну кнопку Button, которая в тексте модуля будет иметь имя Button2. Изменим ее свойство Caption на Выход (выход из приложения). Активизируем ее и в обработчике события напишем:

procedure TForm1.Button2Click(Sender: TObject);

begin

Close; end;

  1. Запустим программу командой Run|Run. В результате появится окно, в котором при нажатии на кнопку Просмотр появится еще одно окно, где, выбирая в выпадающем списке разные буквы и нажимая кнопку Страница, можем видеть, как меняется набор отображаемых записей в таблице DBGrid в соответствии с первой буквой значения фамилии.

  2. Завершим работу нажатием кнопки Выход в основном окне. 14.Сохраним все изменения в проекте.

При программном использовании TQuery следует сначала закрыть текущий запрос и удалить все строки, которые уже могут находиться в свойстве SQL:

Query1.Close;

Query1.SQL.Clear;

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

Query1.SQL.Add('Select * From People.db');

Можно использовать свойство Add для добавления в запрос SQL от одной до x строк.

Для того, чтобы Delphi обработало операторы SQL и вернуло курсор с результатами запроса, требуется написать следующий оператор:

Query 1.Open;

Если возвращать курсор не обязательно, то можно сделать вызов ExecSQL. Вызывать ExecSQL также требуется, если происходит вставка, исключение и корректировка данных, т.е. вместо строки Query1.Open нужно будет записать:

Query1.ExecSQL;

Query1.Refresh;

Отметим также, что операторы Select возвращают курсор и поэтому требуют вызова Open. Delete, Insert и Update не возвращают курсор и поэтому сопровождаются вызовом ExecSQL.

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

Пример № 2. Создание запроса для ограничения числа отображаемых записей из БД «Телефонная книжка» (программный путь)

В телефонной книжке, как правило, располагается много записей и просмотр всех их последовательно затруднителен. Рассмотрим простейшее разбиение таких записей на следующие две части: в первую войдут те, которые содержат фамилии, начинающиеся на буквы от «А» до «М», а во вторую - от «Н» до «Я», причем записи будут выводиться в алфавитном порядке. Будем использовать TQuery программно.

1. Загрузим заготовку проекта, созданную в предыдущем примере. Зададим свойству Caption формы Form1 значение «Информация о людях (запрос 2)». Сразу же сохраним все составные части проекта в файлах с теми же именами, что и прежние, но с добавлением цифры 6 в конце имени: MyExUnitDB6.pas, MyExUnitQuery6.pas и MyExampleDB6.dpr. В тексте модуля формы Form1 заменим раздел объявления используемых модулей в секции implementation

USES MyExUnitQuery; на раздел

USES MyExUnitQuery6;

А в тексте модуля формы Form2 заменим раздел объявления используемых модулей в секции implementation

USESMyExUnitDB5; на раздел

USES MyExUnitDB6;

А ее свойство Caption изменим на «Ограниченный просмотр». Изменим немного вид формы Form1: свойство Caption у компоненты Label6 с Постраничный на Ограниченный.

2. Перейдем к форме Form2. Удалим из нее две компоненты - ComboBox1 и Button1 (кнопка Страница).

На место удаленных компонент поместим со страницы Standart две компоненты Button, а у компоненты DBGrid1 свойство DataSource сделаем пустым, чтобы первоначально в ней не было никаких записей.

3. Выберем кнопку Button1 и изменим ее свойство Caption на «А - М». Активизируем ее и в появившемся обработчике события OnClick введем следующие строки:

procedure TForm2.Button1Click(Sender: TObject); begin

WITH Form1.Query 1 DO BEGIN Close; SQL.Clear;

SQL.Add('SELECT D.*, D1.*'); SQL.Add('FROM "People.db" D, "Tel.db" D1'); SQL.Add('WHERE');

SQL.Add('(D1.IDPeople = D.IDPeople)AND(D.Family < "Н")'); SQL.Add('ORDER BY D.Family ASC'); Open; END;

Form1.DataSource3.DataSet := Form1.Query 1; DBGrid1 .DataSource := Form1 .DataSource3; end;

4. Выберем кнопку Button3 и изменим ее свойство Caption на «Н - Я». Активизируем ее и в появившемся обработчике события OnClick внесем следующее:

procedure TForm2.Button3Click(Sender: TObject); begin

WITH Form1.Query 1 DO BEGIN Close; SQL.Clear;

SQL.Add('SELECT D.*, D1.*'); SQL.Add('FROM "People.db" D, "Tel.db" D1'); SQL.Add('WHERE');

SQL.Add('(D1.IDPeople = D.IDPeople)AND(D.Family >= "Н")'); SQL.Add('ORDER BY D.Family ASC'); Open; END;

Form1.DataSource3.DataSet := Form1.Query 1; DBGrid1 .DataSource := Form1 .DataSource3; end;

  1. Запустим программу командой Run|Run.

  2. Перейдем ко второй форме, нажав кнопку Просмотр. Нажимая кнопки «А - М» и «Н - Я», можем видеть, как меняется набор отображаемых записей.

  3. Завершим работу приложения.

  4. Сохраним все изменения в проекте.

  1. Заключение

Подведение итогов занятия

Мы изучили основы работы с QuickReport и научились создавать SQL запросы.

Форма отчетности о проведении практического занятия

Письменный отчет и электронный вид

(письменный отчет – форма отчета в приложении; не предусмотрено; иное)

Задачи и вопросы для самостоятельной работы студентов по тематике практического занятия:

Используя приложение, созданное в практическом занятии № 2, спроектируйте и создайте отчет, содержащий следующую информацию:

Вариант 1.

Список поставщиков и поставляемых ими деталей (номер, вес и цвет детали),

сгруппированный по номеру детали.

Вариант 2.

Список участников соревнований, сгруппированный по городам (с указанием

количества участников из каждого города).

Вариант 3.

Список номеров заданий по дисциплинам с указанием коэффициента сложности и ФИО студента, выполняющего задание.

Вариант 4.

Список рабочих, сгруппированных по цехам, с указанием ФИО, должности и

заработной платы в порядке ее возрастания.

Вариант 5.

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

Вариант 6.

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

Вариант 7. Список номеров телефонов, сгруппированных по их типу, с указанием ФИО владельца, адреса владельца и года установки, а также количество телефонов данного типа в конце каждой группы.

Вариант 8.

Список названий игрушек, сгруппированных по возрастным категориям, с указанием цены, количества и названия фабрики, изготовившей игрушку. Вывести общее количество всех игрушек, имеющихся в ассортименте, в конце отчета.

Вариант 9.

Список студентов, сгруппированных по группам, с указанием ФИО студента и всех его оценок.

Вариант 10.

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

Вариант 11.

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

Вариант 12.

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

Вариант 13.

Список нападающих, сгруппированных по командам, с указанием ФИО нападающего, числа заброшенных шайб, даты приема в команду и количества сыгранных матчей. Вывести количество нападающих данной команды в конце каждой группы.

Вариант 14.

Список студентов, сгруппированных по группам, с указанием ФИО студента, номера его зачетной книжки и дисциплин, которые он желает изучать.

Вариант 15.

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

Вариант 16.

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

Вариант 17.

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

Вариант 18.

Список ветеранов спорта, сгруппированных по виду спорта, с указанием ФИО спортсмена, города и возрастной группы. Подсчитать количество ветеранов данного вида спорта в конце каждой группы.

Вариант 19.

Список рожениц, сгруппированных по палатам, с указанием ФИО матери, ФИО лечащего врача, даты рождения ребенка, пола ребенка, а также количества рожениц в данной палате в конце каждой группы.

Вариант 20.

Список слушателей, сгруппированных по организациям, с указанием ФИО слушателя, названий дисциплин и оценок по каждой дисциплине.

Вывести количество слушателей, у которых по всем прослушанным дисциплинам стоит "отлично", в конце отчета.

Вариант 21.

Список студентов, сгруппированных по группам, с указанием ФИО студента, наименования дисциплины, оценки, даты экзамена по каждому предмету, фамилии преподавателя по предмету, размера стипендии, а также количества студентов в каждой группе.

Вариант 22.

Список больных, сгруппированных по степени тяжести состояния, с указанием ФИО больного, даты рождения больного, ФИО лечащего врача, даты поступления и начального диагноза. Указать количество больных в тяжелом состоянии в конце отчета.

Вариант 23.

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

Вариант 24.

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

Используя приложение, созданное в практическом занятии № 2, спроектируйте и создайте запрос следующего вида:

Вариант 1.

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

Вариант 2.

Запрос, для вывода списка участников конкурса, приехавших из Ульяновска, содержащий фамилию, имя, отчество участника, фамилию тренера.

Вариант 3.

Запрос для вывода списка студентов, у которых оценка выше или равна 0,5, с указанием ФИО студента, номера группы, названия дисциплины, варианта задания и коэффициента его сложности.

Вариант 4.

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

Вариант 5.

Запрос для вывода списка изделий за каждый день недели с указанием типа изделия и его стоимости.

Вариант 6.

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

Вариант 7.

Создайте отчет, содержащий номера телефонов абонентов, у которых есть льготы, с указанием ФИО и адреса владельца, года установки. Отчет создайте на основе компоненты TQuery.

Вариант 8.

Запрос для вывода списка игрушек, предназначенных для одной и той же возрастной категории, с указанием названия игрушки, ее цены и количества.

Вариант 9.

Запрос для вывода списка студентов, у которых есть своя семья.

Вариант 10.

Запрос для вывода списка Российских спортсменов, с указанием фамилии, имени, отчества спортсмена, пола, года рождения.

Вариант 11.

Создайте отчет, содержащий номера всех рейсов, у которых есть хотя бы одно свободное место, с указанием пункта назначения, времени вылета и времени прибытия. Отчет создайте на основе компоненты TQuery.

Вариант 12.

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

Вариант 13.

Запрос для вывода списка нападающих, у которых количество сыгранных матчей больше трех, а число заброшенных шайб больше 15, с указанием ФИО нападающего и названия команды.

Вариант 14.

Запрос для вывода списка студентов, обучающихся в одной и той же группе, с указанием ФИО студента, номера его зачетной книжки и выбранных дисциплин. Вариант 15.

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

Вариант 16.

Запрос для вывода списка фирм, когда-либо покупавших товары.

Вариант 17.

Запрос для вывода списка наименований лекарств, произведенных на какой-либо фабрике.

Вариант 18.

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

Вариант 19.

Запрос для вывода списка рожениц, лечащихся у одного и того же врача, с указанием ФИО матери, номера палаты, в которой она лежит, и даты рождения ребенка.

Вариант 20.

Запрос для вывода списка слушателей, которые не сдали хотя бы одну дисциплину, с указанием ФИО слушателя и названия организации.

Вариант 21.

Создайте отчет, содержащий список студентов, получающих стипендию, с указанием группы и размера стипендии Отчет создайте на основе компоненты TQuery. Вариант 22.

Запрос для вывода списка больных, лечащихся у одного и того же врача, с указанием ФИО больного, даты его рождения, пола, начального диагноза и степени тяжести состояния больного.

Вариант 23.

Запрос для вывода списка призывников, не пригодных к службе, с указанием ФИО призывника и года его рождения.

Вариант 24.

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

Ответы на вопросы студентов.

  1. Методические рекомендации преподавателю по подготовке и проведению практического занятия

– Методика подготовки места проведения занятия и учебно-материального обеспечения

Аудитория.

Практическое занятие разработано « 08 » июля 2006г.

к.т.н., доцент

/ Выжигин А.Ю. /

(ученое звание, степень)

(подпись, фамилия и инициалы автора)

Технический редактор:

Забава А. В.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее