Работа 2. Делфи - проект: интерфейс к БД Interbase
Справочную информацию по Interbase можно найти , например на
http://klog.h17.ru/interbase/
Задание
- Использовать БД InterBase, созданную в работе 1.
- Создать приложение-клиент в Borland Delphi с визуальными и невизуальными компонентами.
- Подключится из приложения к БД InterBase.
- Создайте запросы с параметром:
- Подсчитайте количество билетов, проданных на заданный рейс.
- Выведите список билетов, проданных на заданный рейс.
- Подсчитайте количество билетов, проданных на все рейсы за указанное число и сумму выручки..
Алгоритм
- Запускаем Делфи7. Для появившейся формы устанавливаем заголовок - свойство Caption : БД : mybase1
- Устанавливаем компоненты для связи с БД
- IBDatabase1, IBTransaction1 (на закладке Interbase). На IBDatabase1 делаем правый щелчок, выбираем Database Editor. Здесь щелкаем Browse и находим нашу БД: C:\dbase1\DB1.GDB - (файл должен находиться в папке)
- На панели Database Parameters впишите:
User Name: SYSDBA
Password : masterkey
Character set: WIN1251
Уберите птичку Login prompt, щелкните ОК . Согласитесь на отключение БД, если будет запрос.
- Установите (в инспекторе объектов) свойства: IBDatabase1.DefaultTransaction = IBTransaction1,
IBTransaction1.Default = IBDatabase1
- Теперь установим комоненты для просмотра и редактирования данных таблицы1 (BILETI)
- Теперь добавим возможность делать запросы к нашей БД. Преимущество запросов в том, что можно менять текст запроса и получать соответсвующие результаты. В том числе - результаты из нескольких таблиц. Можно создать новую таблицу и т д.
Добавим IBQuery1 и для работы с ним: DataSource4 , DBGrid4. В свойство IBQuery1.SQL впишем что-нибудь, чтобы получить результат, например:
select * from POEZDA
Выполним необходимые соединения:
IBQuery1.Database = Database1; DataSource4.Datasource = IBQuery1; DBGrid4.Datasource = DataSource4;
Если после этого - для пробы установить IBQuery1.active = true, то в окне DBGrid4 должны появиться данные таблицы POEZDA (на этапе создания проекта). Можете сделать IBQuery1.active = false, вписать другой запрос в
IBQuery1.SQL , например,
select * from BILETI
, затем IBQuery1.active = true и вы увидите данные табл. Билеты.
- Удобно вводить текст запроса в окошко компонента Memo. Ставим компонент Memo1, можно заполнить его свойство Lines, например, таким запросом:
select * from bileti
where cena < 1300
order by cena
Сделаем чтобы запрос из окошка Memo1 выполнялся при нажатии Alt-Enter (и фокусе ввода в окне Memo1). Выделим на форме Memo1, в инспекторе объектов перейдём на закладку Events (события). Сделаем дв.щелчок в поле справа от OnKeyDown. В редакторе появится обработчик этого события. Сделаем его таким:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=13) and (ssAlt in Shift) then
begin
IBQuery1.active:=false;
IBQuery1.sql.clear;
IBQuery1.sql.Assign(memo1.Lines);
IBQuery1.active:=true;
end;
end;
Конечно, можно хранить тексты запросов в файлах и вставлять их в окно Memo1 методом
Memo1.Lines.LoadFromFile('имя файла'); А для выбора файла пользоваться компонентом OpenDialg.
- Этот же IBQuery1 используем для составления запросов с параметром . Параметр вписывается в окно Edit и исполняется при нажатии Enter (и фокусе ввода в соответствующем окне Edit). Ниже приведены обработчики нажатия на Enter:
procedure TForm1.edFieldKeyPress(Sender: TObject; var Key: Char);
begin
if key= #13 then
begin
IBQuery1.active:=false;
IBQuery1.sql.clear;
IBQuery1.sql.append
('select count(*) as "Продано билетов" from bileti '+
' where nomreis = ' + edField.text );
IBQuery1.active:=true;
end;
end;
procedure TForm1.edReisKeyPress(Sender: TObject; var Key: Char);
begin
if key= #13 then
begin
IBQuery1.active:=false;
IBQuery1.sql.clear;
IBQuery1.sql.append
('select * from bileti '+
' where nomreis = ' + edReis.text );
IBQuery1.active:=true;
end;
end;
procedure TForm1.edSumKeyPress(Sender: TObject; var Key: Char);
begin
if key= #13 then
begin
IBQuery1.active:=false;
IBQuery1.sql.clear;
IBQuery1.sql.append
('select count(*),sum(cena) from bileti,reisi ');
IBQuery1.sql.append(' where (dataotpr = ''' + edSum.text +
''') and (reisi.nomreis = bileti.nomreis)');
IBQuery1.active:=true;
end;
end;
Скачать все файлы делфи-проекта и файл БД - DB1.gdb