Выбор информации из базы данных. Перенос программы управления базой данных на другой компьютер.
Программа "Ежедневник" спроектирована таким образом, что при каждом ее запуске в диалоговом окне выводится текущая дата и список дел, запланированных на этот и ближайшие дни. Вывод даты и названия дня недели в поле 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 и возложить задачу создания псевдонима на программу работы с базой данных. Очевидно, что такой подход облегчает администрирование базы данных.