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

Работа 5 - Сортировка, поиск и фильтрация данных в БД и выборках


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

Задание:

  1. Создайте БД с информацией о студентах и их успеваемости формата InterBase.
  2. Создайте приложение в Delphi, через основное меню которого можно получить информацию о студентах, результатах их сессии и изучаемых предметах.
  3. Структура таблиц:
    СтудентыСессияПредмет
    Код студентаКод студентаКод предмета
    ГруппаКод предметаНаименование предмета
    ФИООценкаФИО преподавателя
    КурсДата экзамена 
    Пол  
    Дата рождения  
    Форма обучения  

Создание базы данных

Создадим БД в C:\dbase1\STUDENTS.GDB . Запускаем IBConsole.exe . Далее:

Создание таблиц- IBConsole, SQL-запросы:

CREATE TABLE "STUD" 
( "KODSTUD"	SMALLINT NOT NULL,
  "GRUP"	CHAR(10) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
  "FIO"	CHAR(30) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
  "KURS"	SMALLINT NOT NULL,
  "POL"	CHAR(1) CHARACTER SET WIN1251 NOT NULL,
  "DATROJD"	DATE NOT NULL,
  "FORMA"	CHAR(10) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
 PRIMARY KEY ("KODSTUD") );

CREATE TABLE "PREDMET" 
( "KODPREDM"	SMALLINT NOT NULL,
  "NAZVAN"	CHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
  "FIO"	CHAR(30) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
 PRIMARY KEY ("KODPREDM") );

CREATE TABLE "SESS" 
( "KODSTUD"	SMALLINT NOT NULL,
  "KODPREDM"	SMALLINT NOT NULL,
  "OCENKA"	SMALLINT NOT NULL,
  "DATEKZ"	DATE NOT NULL );

ALTER TABLE "SESS" ADD FOREIGN KEY ("KODSTUD") REFERENCES STUD ("KODSTUD");
Для ввода запросов: Меню | Tools | Interacive SQL.
Справку по синтаксису запросов вы найдёте в файле \Program Files\Borland\InterBase\bin\SqlRef.hlp (англ)

Для заполнения таблиц данными: щелкаю в левом окне Tables, затем - в правом: дв щелчок по таблице, затем перейти на закладку Data. После заполнения 1-й строки - щелкнуть клавишу "стрелка вниз". Для сохранения изменений - щелкнуть кнопку Птичка, для сохранения в БД - щелкнуть кнопку Commit & Refresh. Можно также пользоваться кнопками: + (вставить), - (удалить) и т д. Добавляем в таблицу несколько записей

Создание Делфи-проекта для работы с базой данных

Для просмотра данных используется 2 способа:

  1. Использую IBTable. Изменяя свойство IBTable1.TableName, подключаюсь к нужной таблице. Для сортировки использую IBTable1.IndexFieldNames. А также подключаю DataSource1 к IBTable1; Всё вместе это выглядит так:
    procedure TForm1.N8Click(Sender: TObject);
    begin
    IBTable1.Active:=false;
    IBTable1.TableName:='PREDMET';
    IBTable1.IndexFieldNames:='KODPREDM';
    DataSource1.DataSet:= IBTable1;
    IBTable1.Active:=true;
    end;
    
  2. Использую IBQuery. В этом случае текст SQL-запроса помещаю в свойство IBQuery1.SQL, затем делаю IBQuery1 активным и, естественно, подключаю DataSource1 к IBQuery1. Например:
    procedure TForm1.N4Click(Sender: TObject);
    begin
    IBTable1.Active:= false;
    IBQuery1.Active:=false;
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.Append('select * from stud order by forma, grup, fio');
    IBQuery1.Active:=true;
    DataSource1.DataSet:=IBQuery1;
    end;
    

Текст модуля

unit unStud;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, DBCtrls, Grids, DBGrids, DB, IBQuery,
  IBCustomDataSet, IBTable, IBDatabase, StdCtrls;

type
  TForm1 = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBTable1: TIBTable;
    IBQuery1: TIBQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    Edit1: TEdit;
    Label1: TLabel;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.N4Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select * from stud order by forma, grup, fio');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select * from stud ');
IBQuery1.SQL.Append(' where grup = ''' +Edit1.Text+'''');
IBQuery1.SQL.Append(' order by forma, grup, fio');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

procedure TForm1.N6Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select forma, grup, stud.fio, nazvan, ocenka, datekz ');
IBQuery1.SQL.Append('from stud, predmet, sess ');
IBQuery1.SQL.Append('where (stud.kodstud= sess.kodstud) ');
IBQuery1.SQL.Append('and (predmet.kodpredm = sess.kodpredm) ');
IBQuery1.SQL.Append('order by forma, grup, stud.fio ');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

procedure TForm1.N11Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select stud.fio, grup, nazvan, forma, ocenka, datekz ');
IBQuery1.SQL.Append('from stud, predmet, sess ');
IBQuery1.SQL.Append('where (stud.kodstud= sess.kodstud) ');
IBQuery1.SQL.Append('and (predmet.kodpredm = sess.kodpredm) ');
IBQuery1.SQL.Append('group by forma, nazvan, grup, stud.fio, ocenka, datekz ');
IBQuery1.SQL.Append('order by stud.fio, datekz ');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

procedure TForm1.N12Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select sess.kodpredm, nazvan as "Предмет", ');
IBQuery1.SQL.Append('max(ocenka) as "Макс.оценка",min(ocenka) as "Мин.оценка" ');
IBQuery1.SQL.Append('from  sess, predmet ');
IBQuery1.SQL.Append('where predmet.kodpredm = sess.kodpredm ');
IBQuery1.SQL.Append('group by sess.kodpredm, nazvan ');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

procedure TForm1.N13Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select  datekz as "Дата экзамена",  ');
IBQuery1.SQL.Append('max(stud.kurs) as "Самый старший курс в этот день" ');
IBQuery1.SQL.Append('from  sess, stud  ');
IBQuery1.SQL.Append('where (stud.kodstud = sess.kodstud) ');
IBQuery1.SQL.Append('group by datekz order by datekz ');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

procedure TForm1.N8Click(Sender: TObject);
begin
IBTable1.Active:=false;
IBTable1.TableName:='PREDMET';
IBTable1.IndexFieldNames:='KODPREDM';
DataSource1.DataSet:= IBTable1;
IBTable1.Active:=true;
end;

procedure TForm1.N9Click(Sender: TObject);
begin
IBTable1.Active:=false;
IBTable1.TableName:='PREDMET';
IBTable1.IndexFieldNames:='NAZVAN';
DataSource1.DataSet:= IBTable1;
IBTable1.Active:=true;
end;

procedure TForm1.N7Click(Sender: TObject);
begin
IBTable1.Active:= false;
IBQuery1.Active:=false;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Append('select stud.fio, nazvan, ocenka, datekz ');
IBQuery1.SQL.Append('from stud, predmet, sess ');
IBQuery1.SQL.Append('where (stud.kodstud= sess.kodstud) ');
IBQuery1.SQL.Append('and (predmet.kodpredm = sess.kodpredm) ');
IBQuery1.SQL.Append('order by nazvan, stud.fio ');
IBQuery1.Active:=true;
DataSource1.DataSet:=IBQuery1;
end;

end.
Скачать все файлы делфи-проекта и файл БД - STUDENTS.GDB
Rambler's Top100
Hosted by uCoz