Для создания отчетности существует очень много способов. Наиболее "продвинутый", но и наиболее сложный – вывод отчета с помощью компонентов отчетности, таких как Quick Report. Другой профессиональный способ – вывод отчета в файл MS Excel или MS Word. Мы разберем самый простой способ отчетности – будем выводить отчет в компонент Memo, а при желании – сохранять его в файл.
Создайте новую форму. В свойстве Name укажите fOtchet, в свойстве Caption – "Отчет", а саму форму сохраните в модуле Otchet.
Далее, в верхнюю часть формы установим Memo, и растянем его по всему верху (свойство Align = alTop ).
В нижней части поместим кнопку и компонент SaveDialog. На кнопке напишем "Сохранить в файл".
У Memo уберем весь текст, и установим вертикальную прокрутку. Не забудем добавить к этой форме модуль DM с помощью команды Uses Unit, а в главной форме той же командой добавим новое окно Otchet.
По нажатию кнопки напишем такой код:
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
Теперь нам необходимо написать код, по которому Memo будет заполняться данными. Это лучше всего сделать по событию главной формы onShow:
var
s : String;
begin
//очищаем Memo:
Memo1.Lines.Clear;
//устанавливаем закладку:
bm := fDM.TBooks.Bookmark;
//готовим таблицу:
fDM.TBooks.First;
fDM.TBooks.Filtered := False;
//делаем отпервой до последней записи:
while not fDM.TBooks.Eof do begin
//собираем данные в переменную s:
s := 'Автор: '+ GetFIO(fDM.TBooks['Avtor'])+#13+#10;
s := s + 'Название: '+ fDM.TBooks['Nazvanie']+#13+#10;
s := s + 'Экземпляров: '+ IntToStr(fDM.TBooks['Exemp'])+#13+#10;
s := s + 'Стоимость: '+ FloatToStr(fDM.TBooks['Cena'])+#13+#10;
s := s + 'Дата поставки: '+DateToStr(fDM.TBooks['Date'])+#13+#10;
s := s + '--------------------------------------------' +#13+#10;
fDM.TBooks.Next;
Memo1.Lines.Add(s);
end; //while
//переходим на закладку:
fDM.TBooks.Bookmark := bm;
bm := '';
Мы указали функцию GetFIO(), которой пока нет. Эта функция будет принимать номер автора, и возвращать его фамилию, имя и отчество. Создайте эту функцию выше процедуры onShow:
function GetFIO(i : Integer):String;
begin
Result := '';
fDM.TAvtors.First;
while not fDM.TAvtors.Eof do begin
if fDM.TAvtors['Key2'] = i then begin
Result := fDM.TAvtors['FIO'];
Break;
end; //if
fDM.TAvtors.Next;
end; //while
if Length(Result)= 0 then
Result := 'Автор не найден';
end;
Вот теперь все! Сохраните проект, скомпилируйте его и посмотрите, как он работает. Мы в этом проекте использовали почти все приемы работы с таблицами, хотя приложение, конечно, получилось не совсем профессиональным. Например, если удалить автора из таблицы авторов, то разрушится целостность таблиц – книга будет указывать автора, которого нет. В профессиональных проектах все это учитывается, однако на это уходит гораздо больше времени, и пишется гораздо больше кода. Когда вы освоите работу с таблицами самостоятельно, для вас все это не будет представлять никаких проблем.
Подытоживая сказанное о базах данных, заметим еще раз, что приложения бывают локальными – когда приложение и сама база данных располагаются на машине клиента. Такой подход следует использовать в приложениях, в которых сотрудники предприятия не должны обращаться к одним и тем же данным, например, в собственном телефонном справочнике, в приложении с кулинарными рецептами, в каталоге домашней библиотеки и тому подобными программами.
Сетевая база данных работает примерно так же, как локальная, только сама база данных находится на сетевом ресурсе, и с ее данными работают несколько клиентских приложений. Такой подход следует использовать для небольших сетевых приложений, когда сотрудников, работающих с данными тоже немного. Если записей в таблице перевалит за десяток тысяч, то обработка такой базы данных очень сильно загрузит сеть.
Клиент – серверная база данных работает иначе. Данные хранятся на сервере. Там же хранится СУБД (Система Управления Базами Данных). Пользователь работает не напрямую с данными, а получает к ним доступ из СУБД с помощью SQL – запросов. Сервер эти данные обрабатывает, и пользователю возвращается результат – только те данные, которые необходимы. А в предыдущем случае каждый клиент получал свою копию полной БД. Нетрудно сообразить, что клиент – серверный подход значительно ускоряет работу с БД и снижает нагрузку на сеть.
Однако начинать программирование БД следует все же с локальных приложений. По мере накопления опыта вы будете двигаться дальше, к сетевым и клиент – серверным БД.