Иллюстрированный самоучитель по C++ Builder

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

Программа "Ежедневник" спроектирована таким образом, что при каждом ее запуске в диалоговом окне выводится текущая дата и список дел, запланированных на этот и ближайшие дни. Вывод даты и названия дня недели в поле Label выполняет функция обработки события onActivate (ее текст приведен в листинге 5.3).

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

Листинг 5.3. Функция обработки события 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) +
 " " + stMonth[Month-l] + " " +
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("На сегодня и ближайшие дни никаких дел не запланировано.");
}
}

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.