- •Методичні вказівки
- •Лабораторна робота №1
- •Хід роботи
- •Короткі теоретичні відомості
- •Контрольні питання
- •Лабораторна робота №2
- •Короткі теоретичні відомості
- •Котрольні питання
- •Лабораторна робота №3 Тема: Використання масивів
- •Хід роботи
- •Котрольні питання
- •Лабораторна робота №4
- •Хід роботи
- •Котрольні питання
- •Лабораторна робота №5
- •Котрольні питання
- •Лабораторна робота №6 Тема: Розробка мультимедійних програм
- •Хід роботи
- •Завдання для самостійного виконання:
- •Контрольні питання
- •Лабораторна робота №7 Тема: Створення нової компоненти
- •Хід роботи
- •1. Вибір базового класу
- •2. Створення модуля компоненту
- •3. Встановлення компоненту
- •4. Ресурси компоненту
- •5. Установка
- •6. Перевірка компоненти
- •Контрольні питання
- •Лабораторна робота №8 Тема: Створення довідкової системи
- •1. Підготовка довідкової інформації
- •2. Проект довідкової системи
- •2. Використання Microsoft Word
- •3. Використання html Help Workshop
- •4. Створення файлу довідки
- •5. Компіляція
- •6. Вивід довідкової інформації
- •Контрольні питання
- •Лабораторна робота №9 Тема: Створення інсталяційного пакету
- •1. Новий проект
- •2. Структура
- •3. Вибір встановлюваних компонентів
- •4. Конфігурування системи користувача
- •5. Настройка діалогів
- •6. Системні вимоги
- •7. Створення образу установчого диску
- •Котрольні питання
- •Лабораторна робота №10
- •Завдання для самостійної роботи:
- •Короткі теоретичні відомості Компонент tTable
- •Контрольні питання
- •Лабораторна робота №11
- •Хід роботи
- •12. Змінити дану програму так, щоб всі невізуальні компоненти мітились на модулі даних. Короткі теоретичні відомості
- •Модулі даних
- •Контрольні питання
- •Лабораторна робота №12 Тема: Налаштування та робота з базами даних
- •Хід роботи
- •Короткі теоретичні відомості
- •Контрольні питання
- •11. Розмітити на першій формі дві кнопки для перегляду створених звітів. Короткі теоретичні відомості Створення простого звіту
- •Створення звітів "master-detail"
- •Відображення графічних і мемо-полів в звітах
- •Попередній перегляд звітів
- •Котрольні питання
- •Лабораторна робота № 14
- •Хід роботи
- •Короткі теоретичні відомості
- •Контрольні питання
- •Література:
- •Студентами денного відділення спеціальності
- •5.05010301 «Розробка програмного забезпечення»
- •8 2100, Вул.Раневицька, 12, м.Дрогобич Львівської обл.
Короткі теоретичні відомості
При роботі з базою даних користувача, як правило, цікавить не весь її вміст, а деяка конкретна інформація. Знайти потрібні відомості можна послідовним переглядом записів. Проте такий спосіб пошуку незручний і малоефективний.
Більшість систем управління базами даних дозволяють виконувати вибірку потрібної інформації шляхом виконання запитів. Користувач формулює запит, вказуючи критерій, якому повинна задовольняти інформація, що цікавить його, а система виводить записи, що задовольняють запиту.
Для вибірки з бази даних записів, що задовольняють деякому критерію, призначений компонент Query.
Компонент Query, як і компонент Table, є записами бази даних, але на відміну від останнього він представляє не всю базу даних (всі записи), а тільки її частину — записи, що задовольняють критерію запиту.
В табл. 5.13 перераховані деякі властивості компоненту Query.
Таблиця 5.13. Властивості компоненту Query
Властивість |
Визначає |
Name |
Ім'я компоненту. Використовується компонентом DataSource для зв'язку результату виконання запиту (набору записів) з компонентом забезпечуючим проглядання записів, наприклад DBGrid |
SQL |
Записаний на мові SQL запит до бази даних (до таблиці) |
Active |
При присвоєнні властивості значення true активізується процес виконання запиту |
RecordCount |
Кількість записів, що задовольняють критерію запиту |
Для того щоб під час розробки програми задати, яка інформація повинна бути виведена з бази даних, у властивість SQL треба записати запит — команду на мові SQL (Structured Query Language, мова структурованих запитів).
В загальному вигляді Sql-запит на вибірку даних з бази даних (таблиці) виглядає так:
SELECT СписокПолів FROM Таблиця "WHERE (Критерій) ORDER СписокПолів
де:
SELECT — команда "вибрати з таблиці записи і вивести вміст полів, імена яких вказані в списку";
FROM — параметр команди, який визначає ім'я таблиці, з якої потрібно зробити вибірку;
WHERE — параметр, який задає критерій вибору. В найпростішому випадку критерій — це інструкція перевірки вмісту поля;
ORDER — параметр, який задає умову, відповідно до якої будуть впорядковані записи, що задовольняють критерію запиту.
Наприклад, запит
SELECT Date_F, Task_F FROM ':organizer:org.db' WHERE ( Date F = '09.02.2009') ORDER Date F
забезпечує вибірку записів з бази даних organizer (з таблиці org.db), в яких в полі Date_F знаходиться текст 09.02.2009, тобто формує список заходів, призначених на 9 лютого 2009 року.
Інший приклад. Запит
SELECT Date_F, Task_F FROM ':organizer:org.db' WHERE
(Date_F >= 10.02.2009') AND ( Date_F <= '16.02.2009') ORDER Date_F
формує список справ, призначених на тиждень (з 10 по 16 лютого 2009 року).
Запит може бути сформований і записаний у властивість SQL компоненту Query під час розробки форми або під час роботи програми.
Нижче приведений фрагмент коду, який формує запит (тобто записує текст запиту у властивість SQL компоненту Query) на вибір інформації з таблиці org бази даних organizer. Передбачається, що рядкова змінна today (тип Ansistring) містить дату у форматі dd/mm/yyyy.
Forml->Queryl->SQL->Add("SELECT Date_F, Task_F");
Forml->Queryl->SQL->Add("FROM ':organizer:org.db'");
Forml->Queryl->SQL->Add("WHERE (Date_F = '" + today + "')");
Forml->Queryl->SQL->Add("ORDER Date_F");
Якщо запит записаний у властивість SQL компоненту Query під час розробки форми додатку, то під час роботи програми критерій запиту можна змінити простою заміною відповідного рядка тексту запиту.
Наприклад, для запиту:
SELECT Date_F, Task_F from ':organizer:org.db'
WHERE
( Date_F= '09.02.2009') ORDER Date_F
інструкція заміни критерію виглядає так:
Queryl->SQL->Strings[3] = " (Date_F = '" + tomorrow + "')";
Слід звернути увагу на те, що властивість SQL є структурою типу ТStrings, в якій рядки нумеруються з нуля.
Приклад 1. Обробка події Click на кнопці Сьогодні
void fastcall TForml::ButtonlClick(TObject *Sender)
{
AnsiString today = FormatDateTime("dd/mm/yyyy",Now());
Forml->Label2->Caption = "Сьогодні";
// змінити критерій запиту
Queryl->SQL->Strings[3] = "(Date_F= '" + today + "')";
// виконати запит
Forml->Queryl->Open ( ) ;
Forml->DataSourcel->DataSet = Forml->Queryl;
if ( !Forml->Queryl->RecordCount)
{
ShowMessage ("На сьогодні ніяких справ не заплановано!");
} }
// Натиснення на кнопці Цей тиждень
void _ fastcall TForml: :Button3Click (TObject *Sender)
{ // від поточного дня до кінця тижні (до неділі)
TDateTime Present, EndOfWeek;
Label2->Caption = "На цьому тижні";
Present= Now (); // Now — повертає поточну дату
// для доступу до StartOfWeek, EndOfWeek, YearOf і WeekOf
// треба підключити DateUtils.hpp (див. директиви #include)
EndOfWeek = StartOfAWeek(YearOf(Present),WeekOf(Present)+1);
Queryl->SQL->Strings[3] ="(Date_F >= ' "+ FormatDateTime("dd/mm/yyyy",Present) +" ') AND " + "(Date_F ( ' "+ FormatDateTime("dd/mm/yyyy",EndOfWeek)+" ') " ;
Queryl->Open() ;
if ( Queryl->RecordCount)
{
DataSourcel->DataSet = Forml->Queryl;
} else
ShowMessage ("На цей тиждень ніяких справ не заплановано.");
}
Приклад: Натиснення на кнопці Все
void _ fastcall TForml : :Button4Click(TObject *Sender)
{
// встановити: джерело даних — таблиця
// таким чином, відображається вся БД
Forml->DataSource1->DataSet = Forml->Table1;
Label2->Caption = "Все, що заплановано зробити";
}
Програма "Щоденник" спроектована таким чином, що при кожному її запуску в діалоговому вікні виводиться поточна дата і список справ, запланованих на цей і найближчі дні. Вивід дати і назви дня тижня в полі Label виконує функція обробки події onActivate. Ця ж функція формує критерій запиту до бази даних, що забезпечує вивід списку задач, рішення яких заплановано на сьогодні (в день запуску програми) і на завтра. Якщо програма запускається в п'ятницю, суботу або неділю, то завтрашнім днем вважається понеділок. Такий підхід дозволяє зробити попереджуюче нагадування, адже, можливо, що користувач не включить комп'ютер у вихідні дні.
Приклад: Функція обробки події OnActivate
AnsiString stDay[7]={"понеділок", "вівторок", "середа", "четвер", "пятниця", "субота", "неділя"};
AnsiString stMonth[12]={"січня","лютого","березня", "квітня", "травня", "червня", "липня", "серпня", "вересня", "жовтня", "листопада", "грудня"};
// активація форми
void___fastcall TForml::FormActivate(TObject *Sender)
{
TDateTime Today , // сьогодні
NextDay; // наступний день (не обов'язково завтра)
Word Year, Month, Day; // рік, місяць, день
Today = Now ();
DecodeDate(Today, Year, Month, Day);
Labell->Caption = "Сьогодні " + IntToStr (Day) + " " + stMonthtMonth-1] + " " + IntToStr(Year) + " року " + stDay[DayOfWeek(Today) -1] ;
Label2->Caption = "Сьогодні і найближчі дні";
// обчислимо наступний день
// якщо сьогодні п'ятниця, то, щоб не забути
// що заплановано на понеділок, вважаємо, що наступний
// день - понеділок
switch ( DayOfWeek(Today)) {
case 6 : NextDay = Today + 3; break;
// сьогодні п'ятниця
case 7 : NextDay = Today + 2; break;
// сьогодні субота
default : NextDay - Today + 1; break;
}
// запит до бази даних; чи є справи, заплановані на сьогодні і наступного дня
Queryl->SQL->Strings[3]=
"(Date_F>='"+ FormatDateTime("dd/mm/yyyy",Today) +"' ) AND "+ " (Date_F <=' "+ FormatDateTime ("dd/mm/yyyy ",NextDay) +" ') ";
Queryl->Open();
DataSourcel->DataSet = Forml->Queryl;
if ( ! Queryl->RecordCount)
{
ShowMessage("Ha сьогодні і найближчі дні ніяких справ не заплановано.");
} }
Перенесення програми управління базою даних на інший комп'ютер
Часто виникає необхідність перенести базу даних на інший комп'ютер. На відміну від процесу перенесення звичайної програми, коли, як правило, достатньо скопіювати тільки виконуваний файл (ехе-файл), при перенесенні програми управління базою даних необхідно виконати перенесення BDE.
Тут слід пригадати, що BDE є сукупністю програм, бібліотек і драйверів, що забезпечують роботу прикладної програми з базою даних. Виконати перенесення BDE на інший комп'ютер "вручну" досить важко. Тому для перенесення (розповсюдження) програми, що працює з базами даних, Borland рекомендує створити інсталяційну програму, яка виконає копіювання всіх необхідних файлів, у тому числі і компонентів BDE. Як засіб створення настановної програми Borland настійно радить використовувати утиліту InstallShield Express, яка входить в склад всіх наборів C++ Builder. Версія цієї утиліти, що поставляється з C++ Builder спеціально пристосована до задачі перенесення і настройки BDE.
