39031

Базовые технологии доступа к БД в Borland C++ Builder. Лабораторная работа

Лабораторная работа

Информатика, кибернетика и программирование

Указания к выполнению лабораторной работы Ранее уже говорилось что наборы данных представляют собой группы записей переданных из базы данных в приложения для просмотра и редактирования. Каждый набор данных инкапсулирован в специальном компоненте доступа к данным. Основные свойства и методы базового класса наборов данных TDtSet уже были рассмотрены нами ранее.

Русский

2013-09-30

125.5 KB

36 чел.

Лабораторная работа № 5

Базовые технологии доступа к БД в Borland C++ Builder

(Окончание)

Цель работы: Изучить основные способы работы с наборами данных в среде Borland C++ Builder. Получить навыки проектирования несложных фактографических систем.

Указания к выполнению лабораторной работы

Ранее уже говорилось, что наборы данных представляют собой группы записей, переданных из базы данных в приложения для просмотра и редактирования. Каждый набор данных инкапсулирован в специальном компоненте доступа к данным. Основные свойства и методы базового класса наборов данных (TDataSet) уже были рассмотрены нами ранее. Кроме того, мы познакомились с основными компонентами наборов данных, взаимодействующих с базами данных посредством BDE (TTable, TQuery и др.). Компоненты наборов данных предоставляют разработчику довольно широкие возможности для эффективной обработки данных. Рассмотрим некоторые из них:

  •  Навигация по набору данных. Осуществляется с помощью уже рассматривавшихся методов перемещения курсора (указателя текущей записи) по набору данных: First(), Last(), Next(), Prior(), MoveBy(int). Например, для последовательного перебора записей, начиная с текущей позиции до конца набора данных Table1, можно использовать следующий цикл перебора:

Table1->Open()

...

while (!Table1->Eof)

{

... // выполняются некоторые действия

Table1->Next();

}

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

  •  void* GetBookmark() – создает и возвращает закладку для текущей записи набора данных;
    •  GotoBookmark(void *bookmark) – перемещает курсор на запись, которая соответствует параметру bookmark (закладке).
  •  Сортировка записей является важной и довольно сложной проблемой. Можно выделить три способа определения нужного порядка следования записей:
    •  Индексирование полей таблиц БД. Этот способ является возможным при использовании компонента набора данных TTable. При проектировании базы данных для каждой таблицы можно задать одно или несколько индексированных полей, позволяющих упорядочивать записи по значениям этого поля по возрастанию, либо по убыванию. После этого записи набора данных можно упорядочивать по любому индексированному полю, присвоив его наименование свойству IndexName. Рассмотрим, например, таблицу городов из базы данных, построенной для ИС «Телефонный справочник» (см. лабораторные работы № 3 и 4). Изначально список записей в наборе данных будет соответствовать действительному порядку размещения записей в таблице БД, поэтому при последовательном просмотре набора данных в программе получим:

Москва

Новосибирск

Санкт-Петербург

Бердск

Используя конструктор таблицы в Microsoft Access, сделаем поле city_name указанной таблицы индексированным. После этого, в качестве свойства IndexName для табличного набора данных можно указывать не только поле первичного ключа city_id, но и  поле city_name. В последнем случае последовательный просмотр набора данных в программе даст упорядоченный список наименований городов:

Бердск

Москва

Новосибирск

Санкт-Петербург

  •  Определение порядка следования записей при построении SQL-запроса. Этот способ используется при работе с компонентами TQuery, TStoredProc и их аналогами. Способы упорядочения записей в SQL-запросах на выборку данных будут подробно рассмотрены в курсе «Базы Данных».
    •  Сортировка записей внутренними средствами компонента набора данных. Данный способ может быть использован не всегда, поскольку его применение ограничивается как свойствами компонента набора данных (который может не поддерживать внутреннюю сортировку записей), так и свойствами базы данных, с которой взаимодействует приложение. Компонент TTable имеет свойство IndexFieldNames, которому можно присваивать список наименований полей, по которым будет производиться упорядочение. Поля в списке должны быть только полями данных (вычисляимые и поля синхронного просмотра не допускаются); одно поле отделяется от другого через точку с запятой. Сортировка набора данных при непустом значении свойства IndexFieldNames выполняется следующим образом: сначала записи упорядочиваются по значению первого поля, затем, если эти значения совпадают, – то по значениям второго поля и так далее. Список полей может состоять из единственного поля. Например, можно сортировать записи рассмотренной выше таблицы городов по значению кода города. Для этого достаточно присвоить свойству IndexFieldNames его наименование: (city_code). При этом поле city_code не обязательно должно быть индексированным*. Список записей при последовательном просмотре набора данных в этом случае примет вид:

Новосибирск

Бердск

Москва

Санкт-Петербург

  •  Поиск записей в наборе данных может выполняться двумя способами.
    •  Для позиционирования на нужной записи используются методы Locate и Lookup:

virtual bool __fastcall Locate(const AnsiString KeyFields, const System::Variant &KeyValues, TLocateOptions Options);

virtual System::Variant __fastcall Lookup(const AnsiString KeyFields, const Variant &KeyValues, const AnsiString ResultFields);

Метод Locate ищет первую запись, удовлетворяющую критерию поиска, и, если такая запись найдена, делает ее текущей. Параметр KeyFields должен содержать список наименований одного или нескольких полей, по которым ведется поиск. В случае нескольких полей их названия разделяются точкой с запятой. Критерии поиска задаются в вариантном массиве KeyValues так, что i-тое значение в этом массиве автоматически ставится в соответствие i-тому полю в KeyFields. Параметр Options позволяет включить дополнительные необязательные режимы поиска. Метод Locate возвращает значение true, если запись найдена и установлена в качестве текущей, и false – в противном случае.

Примеры:

// Запись "НоВоСиБиРсК" в таблице городов отсутствует, поэтому

// результат выполнения функции Locatefalse.

Table1->Locate("city_name","НоВоСиБиРсК",TLocateOptions());

// Запись "НоВоСиБиРсК" в таблице городов отсутствует, но включен

// режим поиска без учета высоты букв, поэтому результат выполнения

// функции Locate – true.

Table1->Locate("city_name","НоВоСиБиРсК",TLocateOptions()<<loCaseInsensitive);

 Метод Lookup, также как и метод Locate, находит запись, удовлетворяющую заданным условиям поиска, но не делает ее текущей, а возвращает значения некоторых полей этой записи. Кроме параметров KeyFields и KeyValues, смысл которых совпадает с одноименными параметрами метода Locate,  функция метода Lookup содержит параметр ResultFields, который определяет список наименований полей, значения которых будут возвращены. Результатом метода является вариантный массив значений, причем i-тое значение в этом массиве соответствует i-тому полю списка ResultFields. Если запись, удовлетворяющая условиям поиска, не обнаружена, то возвращается пустое значение (Null()) Метод Lookup целесообразно использовать в тех случаях, когда изменять текущую запись нежелательно.

Пример.

// Узнаем по имени города значение его префикса.

Variant V = Table1->Lookup("city_name","Новосибирск","city_code");

if (V == Null()) ShowMessage("Null");

else ShowMessage(V);  // Результат: 383

  •  Для фильтрации записей по определенному критерию используются свойства Filter, Filtered и FilterOptions, а также событие OnFilterRecord.

Свойство Filter позволяет задать критерий фильтрации. В этом случае набор данных будет отфильтрован, как только его свойство Filtered станет равным true. Синтаксис описания критериев фильтрации предоставляет разработчику довольно широкие возможности, в частности:

  •  Использование наименований полей и константных значений;
  •  Использование операций сравнения (<,>,=,>=,<=,<>);
  •  Использование арифметических операций;
  •  Использование логических операций (NOT, AND, OR);
  •  Использование спецсимвола “*” для фильтрации по частичному соответствию.

Пример.  

Выбрать из набора данных все города, которые либо начинаются с буквы «М», либо имеют префикс, начинающийся с 38.

Table1->Filter = "city_name = 'М*' OR city_code='38*'";

Table1->Filtered = true;

Table1->First();

 while(!Table1->Eof)

{

     ShowMessage(Table1->FieldByName("city_name")->Value);

 Table1->Next();

}

Результат:

Новосибирск

Москва

Бердск

Чтобы реализовать более сложные алгоритмы фильтрации набора данных можно использовать событие OnFilterRecord. Оно возникает всякий раз, когда значение свойства Filtered устанавливается в true. Обработчик этого события имеет два параметра: указатель на фильтруемый набор данных (приведенный к базовому классу TDataset) и переменную Accept, в которую в результате выполнения обработчика должно быть помещено либо значение  true, ели запись удовлетворяет условиям фильтра, либо значение false в противном случае. Следует помнить, что при включении фильтра указанное событие вызывается для каждой записи, поэтому для больших наборов данных такая фильтрация может выполняться довольно долго.

Помимо общих способов поиска и фильтрации данных  компонент TTable имеет целый ряд специфических методов: FindKey(), FindNearest(), SetRange() и др. Их изучение студентам предлагается провести самостоятельно.

Задания к лабораторной работе

  1.  В соответствии с вариантом задания спроектировать и реализовать простейшую фактографическую информационную систему.
  2.  При проектировании БД рекомендуется использовать результаты выполнения лабораторных работ 4 и 5 курса «Информационные системы».
  3.  При реализации программного приложения для работы с БД выполнить следующие требования:
    1.  Разработку программного приложения начать с проектирования пользовательского интерфейса и подготовки прототипа приложения.
    2.  Развитие проекта программного приложения осуществлять в соответствии с принципами итеративной разработки.
    3.  Обеспечить возможность добавления, редактирования и удаления записей во все основные таблицы БД;
    4.  Обязательно использовать компонент TDBLookupComboBox для редактирования и/или определения условий поиска информации.
    5.  Обязательно использовать поля синхронного просмотра и вычисляемые поля;
    6.  Обязательно использовать один из способов упорядочения набора данных;
    7.  Обязательно использовать один из способов поиска информации в наборе данных.
  4.  В отчет о выполнении лабораторной работы включить:
    1.  Модель данных (ER-диаграмму) ИС;
    2.  Перечень и содержание выполненных итераций по разработке программного приложения;
    3.  Результаты тестирования программы;
    4.  Выводы по проделанной работе.

Варианты заданий

  1.  ИС пункта проката. Таблица предметов содержит название предмета, количество предметов в пункте проката, стоимость одних суток проката. Таблица выданных предметов содержит наименование предмета, фамилию арендатора, дату выдачи, количество суток, на которое произведена выдача, ожидаемую дату возврата, реальную дату возврата, сумму оплаты.

Обязательные требования к ИС :

  1.  Возможность получения информации о выданных предметах с дополнительным полем, в котором рассчитывается сумма оплаты за прокат. Учесть, что при выдаче предмета более, чем на десять дней, арендатору должна быть предоставлена скидка в 10%.
  2.  Возможность получения списка всех выданных предметов;
  3.  Возможность получения списка всех предметов, которые не были сданы в срок;

  1.  ИС кадров предприятия. Основная таблица содержит фамилию, отдел, оклад, дату рождения, дату приема, дату увольнения (если работает – пустое значение). Справочная таблица отделов содержит название отдела, фамилию начальника.

Обязательные требования к ИС :

  1.  Возможность получения информации о сотрудниках и их заработной плате. Учесть, что заработная плата сотрудников, работающих в организации более 5 лет, должна быть увеличена на 20% по сравнению с окладом.
    1.  Возможность получения информации об отделах с дополнительными вычисляемыми полями, в которых указывается численность отдела и общий фонд заработной платы (с надбавками).

  1.  ИС склада. Имеется справочник клиентов и справочник товаров. Справочник товаров содержит наименование, количество, цену. Справочник клиентов содержит имя и адрес клиента. Таблица фактур содержит наименование товара, приобретенное количество, наименование покупателя, дату приобретения, дату оплаты.

Обязательные требования к ИС :

  1.  Возможность получения информации по каждому товару с указанием стоимости каждой покупки;
    1.  Возможность получения информации по каждому клиенту с указанием списка неоплаченных им покупок и их количества;
    2.  Возможность получения списка всех неоплаченных фактур с указанием общей суммы к оплате.

  1.  ИС телефонной станции. Справочник абонентов содержит номер телефона, фамилию, адрес абонента. Справочник городов содержит коды городов, названия городов и зону. Тарифный справочник определяет стоимость одной минуты разговора в зависимости от зоны. Основная таблица содержит дату переговоров, время переговоров, дату оплаты (если отсутствует, то разговор не оплачен), номер телефона абонента, код города, продолжительность разговора.

Обязательные требования к ИС :

  1.  Возможность получения информации о междугородних переговорах с указанием стоимости звонка. Учесть, что если звонок был произведен в ночное время (от 22:00 до 06:00), абоненту предоставляется скидка в 50%;
    1.  Возможность получения списка городов из самой дорогой тарифной зоны.

  1.  БД радиостанции. Справочники звукооператоров и ведущих содержат фамилии, нормированный оклад (за 20 часов в эфире в месяц), дату принятия на работу. Основная таблица содержит название передачи, дату и время выхода в эфир, продолжительность в часах, фамилии звукооператора и ведущей.

Обязательные требования к ИС :

  1.  Возможность получения информации о выходах сотрудников радиостанции в эфир в течение текущего месяца (с указанием оплаты за каждый выход). Учесть, что расчет оплаты производится по вычисленному в соответствии с окладом часовому тарифу с 50% надбавкой за работу в ночные часы (22:00-8:00) и с 10% надбавкой за стаж работы более 5 лет.
    1.  Возможность получения информации о передачах, которые выходили в заданное время заданного дня недели.

  1.  ИС библиотеки. Основный справочник книг содержит шифр книги, фамилию автора, название книги, код УДК, стоимость, количество экземпляров Каталог читателей содержит номер билета, фамилию читателя, домашний адрес. Основная таблица выданных книг содержит шифр книги, номер билета, дату выдачи, дату фактического возврата (если книга на руках, то пустое значение), дату обязательного возврата (2 недели от даты выдачи).

Обязательные требования к ИС :

  1.  Возможность получения информации о выданных книгах с указанием количества просроченных дней и суммы штрафа. Учесть, что начисление штрафа начинается с 3-го дня просрочки и составляет 5% от стоимости книги.
    1.  Возможность получения информации о количестве выданных и количестве просроченных книг для некоторого читателя.

  1.  ИС деканата. Справочник «Студенты» содержит номер студенческого билета, ФИО студента, номер группы. Справочник «Дисциплины» -  шифр и название предмета. Таблица «Успеваемость» содержит номер студенческого билета, название дисциплины и полученные оценки.

Обязательные требования к ИС :

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

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

Обязательные требования к ИС :

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

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

Обязательные требования к ИС :

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

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

Обязательные требования к ИС :

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

  1.  ИС супермаркета. Справочник товаров содержит информацию о коде товара (штрих-код), его наименовании, цене, критическом количестве оставшихся товаров.  Справочник операций содержит сведения о коде, наименовании и знаке операции: «+»  – поступление товара, «–» – расход товара (например, совершение покупки), «0» –прочие операции. Журнал операций содержит сведения о типе операции, коде и количестве товара, участвующего в операции, номере обосновывающего документа (например, кассового чека). 

Обязательные требования к ИС :

  1.  Возможность получения информации о товарах, запасы которых необходимо пополнить (фактическое количество в магазине меньше критического)
  2.  Возможность получения информации об операциях, связанных с расходом любого выбранного товара с указанием стоимости каждой операции;
  3.  Возможность получения информации о самой крупной покупке любого выбранного товара за день;
  4.  Возможность получения информации о самой крупной покупке, совершенной одним клиентом.

Контрольные вопросы

  1.  Понятие набора данных.
  2.  Класс TDataSet и производные компоненты наборов данных.
  3.  Навигация по набору данных.
  4.  Способы упорядочения записей в наборе данных.
  5.  Поиск данных методом Locate. Необязательные режимы поиска.
  6.  Зависит ли результат выполнения метода Locate от способа упорядочения записей. Ответ обосновать.
  7.  Поиск данных методом Lookup.
  8.  Фильтрация данных. Синтаксис строки критерия фильтрации.
  9.  Свойство FilterOption.
  10.  Фильтрация данных с использованием события OnFilterRecord.

* Следует еще раз подчеркнуть, что возможность сортировки набора данных по произвольному списку полей может быть ограничена типом используемой СУБД. Для Microsoft Access или более мощных клиент-серверных СУБД это допустимо, но для некоторых файловых БД (например, Paradox или dBASE), такая возможность отсутствует.


 

А также другие работы, которые могут Вас заинтересовать

47000. Защитное заземление 43.35 KB
  Защитное заземление (рис. 6) - это преднамеренное электросоединение металлических нетоковедущих частей ЭУ или другого электрооборудования (ЭО), которые могут оказаться под U, с заземляющим устройством (ЗУ). Его применяют в электросетях с изолированной нейтралью U до 1 кВ
47003. Причины первой мировой войны 43.5 KB
  Покровский Стремившийся доказать что царская Россия есть главная виновница войны Покровский в то же время признавал что в основе международных противоречий вызвавших империалистическую войну лежал англогерманский конфликт за которым по значению следовал германофранцузский. Гуч в книге Накануне войны вышедшей в 1938 г. предпринял попытку доказать что возникновение войны в 1914 г.
47006. ТЕОРИЯ ПОДОБИЯ В ПРИМЕНЕНИИ К ДИФФЕРЕНЦИАЛЬНОМУ УРАВНЕНИЮ ТЕПЛОПРОВОДНОСТИ 43.9 KB
  Считаем также что начальная температура тела одинакова и не зависит от координат т.4 где α – коэффициент теплоотдачи от тела к омывающей среде Tw температура стенки тела . С другой стороны плотность теплового потока у стенки тела равна: ∂T ∂ϑ qw = −λ = −λ 4.5 ∂n ∂n w w где λ коэффициент теплопроводности тела ∂T производная температуры в теле по нормали к поверхности.