Назад Оглавление Дальше

Работа 2. Делфи - проект: интерфейс к БД Interbase


Справочную информацию по Interbase можно найти , например на http://klog.h17.ru/interbase/

Задание

  1. Использовать БД InterBase, созданную в работе 1.
  2. Создать приложение-клиент в Borland Delphi с визуальными и невизуальными компонентами.
  3. Подключится из приложения к БД InterBase.
  4. Создайте запросы с параметром:
    • Подсчитайте количество билетов, проданных на заданный рейс.
    • Выведите список билетов, проданных на заданный рейс.
    • Подсчитайте количество билетов, проданных на все рейсы за указанное число и сумму выручки..

Алгоритм

  1. Запускаем Делфи7. Для появившейся формы устанавливаем заголовок - свойство Caption : БД : mybase1

  2. Устанавливаем компоненты для связи с БД

    • 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


  3. Теперь установим комоненты для просмотра и редактирования данных таблицы1 (BILETI)
    • IBTable1 (на закладке Interbase), DataSource1 (закладка Data Access), DBGrid1, DBNavigator1 (закладка Data Controls). Их расположение см на рисунке:



    • Установим необходимые для нормальной работы связи между компонентами
    • Проверим, что IBDatabase1.Connected = true, IBTransaction1.Active = true
    • Установим IBTable1.Database = IBDatabase1, затем выберем из списка TableName = BILETI, DataSourse1.DataSet = IBTable1, DBGrid1.DataSource = DataSource1. После этого в окне DBGrid1 должны появиться данные таблицы (на этапе создания проекта). Если этого нет - проверьте повторно все настройки. Иногда полезно отключить БД, т е установить IBDatabase1.Connected = false, а затем установить все их заново, начиная с IBDatabase1.Connected = true.
    • Над окошком DBGrid1 полезно поставить Label с надписью Таблица Билеты.
    • Под окошком DBGrid1 поставим DBNavigator1, присвоим: DBNavigator1.DataSource = DataSource1. Откройте (кнопкой справа) свойство hints и вставьте строки:
      Первая запись
      Предыдущая запись
      Следующая запись
      Последняя запись
      Вставить запись
      Удалить запись 
      Править запись 
      Сохранить изменения 
      Отменить изменения
      Обновить данные из БД
      Затем установите DBNavigator1.ShowHints = true.
    • если хотите, выберите - какие из этих кнопок вам нужны, остальные - спрячьте (DBNavigator1.VisibleButtons)
    • Для работы с таблицей Поезда выполним всё аналогично. Установим IBTable2 (на закладке Interbase), DataSource2 (закладка Data Access), DBGrid2, DBNavigator2 (закладка Data Controls). Установим необходимые связи между компонентами а также IBTable2.TableName = poezda. Данные должны появиться в окошке DBGrid2 Однако эту таблицу удобнее расположить ниже таблицы Рейсы.
    • Для работы с таблицей Рейсы выполним всё аналогично. Установим IBTable3 (на закладке Interbase), DataSource3 (закладка Data Access), DBGrid3, DBNavigator3 (закладка Data Controls). Установим необходимые связи между компонентами а также IBTable3.TableName = REISIДанные должны появиться в окошке DBGrid3

  4. Теперь добавим возможность делать запросы к нашей БД. Преимущество запросов в том, что можно менять текст запроса и получать соответсвующие результаты. В том числе - результаты из нескольких таблиц. Можно создать новую таблицу и т д. Добавим 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 и вы увидите данные табл. Билеты.

  5. Удобно вводить текст запроса в окошко компонента 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.

  6. Этот же 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
Rambler's Top100
Hosted by uCoz