МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Ужгородський національний університет
Інженерно-технічний факультет
Кафедра Комп’ютерних систем та мереж
КУРСОВА РОБОТА
з дисципліни “Основи баз даних” на тему:
Розміри відсоткових ставок по кредитам в комерційних банках міста Ужгорода з використанням InterBase
ЗмістВступ 3
Розділ І. Теоретичні відомості. 4
1.1.Поняття бази даних 4
1.2.Еволлюція баз данних 5
1.3.Архітектура «Клієнт-Сервер» 6
1.4.Створення таблиць за допомогою SQL-запитів в IBConsole 7
Розділ ІІ. Проектування баз даних 11
2.1. Постановка задачі на розробку програми 11
Висновок 14
Додаток 15
Текст основного модуля 15
Перелік використаної літератури 25
Вступ
Основні ідеї сучасної інформаційної технології базуються на концепції баз даних (БД). Відповідно до даної концепції основою інформаційної технології є дані, організовані в БД, що адекватно відбивають реалії дійсності в тій або іншій предметній області, і які забезпечують користувача актуальною інформацією у відповідній предметній області.
Основне призначення системи управління базами даних (скорочено – СУБД) — створення та підтримка в актуальному стані бази даних, а також зв'язок її з програмами розв'язування завдань (прикладні програми користувачів).
У світі існує безліч СУБД. Незважаючи на те, що вони можуть по-різному працювати з різними об'єктами і надають користувачу різні функції й засоби, більшість СУБД спираються на єдиний устояний комплекс основних понять. Це дає нам можливість розглянути одну систему й узагальнити її поняття, прийоми й методи на весь клас СУБД.
Система управління базами даних (СУБД) поєднує відомості з різних джерел в одній реляційній базі даних. Створювані форми, запити і звіти дозволяють швидко й ефективно обновляти дані, отримувати відповіді на питання, здійснювати пошук потрібних даних, аналізувати дані, друкувати звіти, діаграми і поштові наклейки.
Розділ І. Теоретичні відомості.
Поняття бази даних
Відомі два підходи до організації інформаційних масивів: файлова організація та організація у вигляді бази даних. Файлова організація передбачає спеціалізацію та збереження інформації, орієнтованої, як правило, на одну прикладну задачу, та забезпечується прикладним програмістом. Така організація дозволяє досягнути високої швидкості обробки інформації, але характеризується рядом недоліків.
Характерна риса файлового підходу - вузька спеціалізація як обробних програм, так і файлів даних, що служить причиною великої надлишковості, тому що ті самі елементи даних зберігаються в різних системах. Оскільки керування здійснюється різними особами (групами осіб), відсутня можливість виявити порушення суперечливості збереженої інформації. Розроблені файли для спеціалізованих прикладних програм не можна використовувати для задоволення запитів користувачів, які перекривають дві і більше області. Крім того, файлова організація даних внаслідок відмінностей структури записів і форматів передання даних не забезпечує виконання багатьох інформаційних запитів навіть у тих випадках, коли всі необхідні елементи даних містяться в наявних файлах. Тому виникає необхідність відокремити дані від їхнього опису, визначити таку організацію збереження даних з обліком існуючих зв'язків між ними, яка б дозволила використовувати ці дані одночасно для багатьох застосувань. Вказані причини обумовили появу баз даних.
База даних може бути визначена як структурна сукупність даних, що підтримуються в активному стані та відображає властивості об'єктів зовнішнього (реального) світу. В базі даних містяться не тільки дані, але й описи даних, і тому інформація про форму зберігання вже не схована в сполученні "файл-програма", вона явним чином декларується в базі.
База даних орієнтована на інтегровані запити, а не на одну програму, як у випадку файлового підходу, і використовується для інформаційних потреб багатьох користувачів. В зв'язку з цим бази даних дозволяють в значній мірі скоротити надлишковість інформації. Перехід від структури БД до потрібної структури в програмі користувача відбувається автоматично за допомогою систем управління базами даних (СУБД).
Еволлюція баз данних
Пpостi файли. Хаpактеpизується послiдовною оpганiзацiєю фiзичних даних.
- оpiєнтацiя на одне застосування;
- високий piвень надлишковостi;
- вiдсутня незалежнiсть;
- забезпечується тiльки ввiд/вивiд даних без поточної їх обpобки;
- цiлiснiсть та захист вiдсутнi;
- пpацює тiльки в пакетному pежимi;
Файловi системи з типовими методами доступу. Хаpактеpизується набоpами даних з послiдовним чи пpямим доступом.
- пеpеважна оpiєнтацiя на одне застосування;
- значний piвень надлишковостi;
- iнфоpмацiю на носiях можна змiнювати без змiни пpикладних пpогpам;
- пpисутнi типовi методи доступу з piзними механiзмами адpесацiї;
- низька надiйнiсть системи;
- дозволяється pобота в pеальному часi та опеpативна обpобка даних;
Пеpшi СУБД.
- багато застосувань;
- мiнiмальна надлишковiсть;
- незалежнiсть фiзичної стpуктуpи даних вiд пpикладних пpогpам;
- забезпечуються piзнi шляхи доступу до одних i тих же даних для piзних застосувань; адpесацiя на piвнi полiв та гpуп; пошук по багатьом ключам;
- пiдтpимка цiлiсностi та захисту;
Сучаснi СУБД.
- логiчна та фiзична незалежнiсть даних;
- пiдтpимка шиpокого дiапазону мов пpогpамування piзного пpизначення;
- високий piвень iнтеpфейсу;
Архітектура «Клієнт-Сервер»
Курсова робота була розроблена на сервері InterBase. Пояснити цей вибір неважко:
InterBase – «рідний» сервер для Delphi (тому для доступа до нього непотрібно встановлювати додаткові драйвери SQL Links, які необхідні при роботі програм, написаних на Delphi, із інших СУБД).
В Delphi входить локальний сервер IB
SQL-сервер IB являється «промисловою» СУБД, призначена для зберігання і видачі великих об’ємів даних при використанні архітектури «клієнт-сервер» в умовах одночасної робот из БД великої кількості клієнтських програм.
Для задання посилальної і змістової цілісності в БД визначаються:
Відношення підпорядкованості між таблицями БД шляхом визначення первинних(PRIMARY) ключів у батьківських і зовнішніх(FOREIGN) ключів у дочірніх таблицях.
Бізнес-правила за допомогою тригерів (TRIGGER) – підпрограм, автоматично виконуємих сервером до і(або) після події зміни запису в таблиці БД.
Унікальні значення необхідних полів шляхом створення і використовування генератора(GENERATOR).
Деякі технічні характеристики сервера (К -1024 байта)
Характеристика
Значення
Максимальний розмір одної БД
Рекомендуется не выше 10 Гбайт. Однако известны случаи объема одной БД в 10-20 Гбайт
Максимальне число таблиць в одній БД
65,536
Максимальне число полів в одній таблиці
1000
Максимальна кількість записів в одній таблиці
Не ограничено
Максимальна довжина запису
64 К (не считая полей BLOB)
Максимальна довжина поля
32 К (кроме полей BLOB)
Максимальна довжина поля BLOB
Не ограничена
Максимальне число індексів в БД
65,536
Максимальное число полей в индексе
16
Максимальна кількість вложеності SQL-запита
16
Створення таблиць за допомогою SQL-запитів в IBConsole
Середовище IBconsole широко використовується для програмування баз даних. Найчастіше, бази даних як певний підбір даних, організовані за допомогою таблиць. В реляційних базах даних таблиці представляють інформацію про об”єкти одного типу. Одиницею таблиці є запис, що містить декілька полів. Головне вікно програми має наступний вигляд:
Створювати таблиці в IBConsole, проводити їх модифікацію та отримувати з них дані можна, зокрема, через написання на мові SQL (Structured Query Language) запитів. Основними групами операторів SQL є оператори визначення даних та оператори маніпулювання даними.
Оператори визначення даних дозволяють створювати і видаляти таблиці, змінювати визначення таблиць і додавати правила цілостності.
Створення таблиць.
CREATE TABLE "MAIN"
(
"N" VARCHAR(30) CHARACTER SET WIN1251,
"FAM" VARCHAR(100) CHARACTER SET WIN1251,
"NAME" VARCHAR(100) CHARACTER SET WIN1251,
"POB" VARCHAR(100) CHARACTER SET WIN1251,
"TYPEKR" VARCHAR(12) CHARACTER SET WIN1251,
"PLASE" VARCHAR(100) CHARACTER SET WIN1251,
"STREET" VARCHAR(100) CHARACTER SET WIN1251,
"BUD" VARCHAR(10) CHARACTER SET WIN1251,
"KV" VARCHAR(10) CHARACTER SET WIN1251,
"TEL" VARCHAR(100) CHARACTER SET WIN1251,
"IDNUM" VARCHAR(30) CHARACTER SET WIN1251,
"STAVKA" DOUBLE PRECISION,
"KRED" DOUBLE PRECISION,
"TERMIN" INTEGER,
"DATAOF" VARCHAR(30) CHARACTER SET WIN1251,
"DATAZAK" VARCHAR(30) CHARACTER SET WIN1251,
"PASPORT" VARCHAR(30) CHARACTER SET WIN1251,
"ZASTAVA" VARCHAR(100) CHARACTER SET WIN1251,
"CINAZASTAVU" VARCHAR(100) CHARACTER SET WIN1251,
"MONTHS" INTEGER,
"BANKTYPE" VARCHAR(100) CHARACTER SET WIN1251,
"SUMASPLAT" INTEGER
);
При запуску цього запиту створюється таблиця з ім’ям main, в якій є поля N,FAM,NAME,POB,TYPEKR,PLASE,STREET,BUD,KV,TEL,IDNUM,STAVKA,KRED,TERMIN,DATAOF,
DATAZAK,PASPORT,ZASTAVA,CINAZASTAVU,MONTHS,SUMASPLAT,BANKTYPE
текстового типу.
Вилучення таблиць.
SQL
DROP TABLE main
При запуску цього запиту таблиця main знищується.
Оператори маніпулювання даними використовуються для видалення, додавання та пошуку записів в таблицях.
Додавання записів.
Щойно створену таблицю students можна заповнити даними.
INSERT INTO main (id,name,surname)
VALUES (‘00000001’, Будник’,’Андрій’,……)
Інструкція VALUES вставляє в таблицю main один рядок, параметри VALUES: VALUES (‘00000001’, Будник’,’Андрій’,……)записуються у відповідні поля таблиці.
Модифікація даних.
UPDATE main
SET lastname=”Іванович”
Пошук даних.
Вибір даних з таблиці здійснюється за допомогою інструкції SELECT.
SELECT * FROM main,income,free
WHERE main.N=income.N and main.N=free.N and
main.name =’ Іванович’
Для виконання всіх попередніх вправ було використано IBConsole, але все це можна зробити і за допомогою елемента керування TQuery в програмах, написаних на Delphi.
Друга таблиця по «Поручителях»
Розділ ІІ. Проектування баз даних
2.1. Постановка задачі на розробку програми
Дана програма створена для полегшення та автоматизації роботи по наданню кредитів в комерційних банках.
База даних легко коригується і може розширюватися простим додаванням позичальників, типів кредитів, відсоткових ставок,поручителів і т.д.
Програма дуже зручна і легка у застосуванні. Завдяки ній легко можна знайти дані які стосуються даного позичальника, …..
2.3. Деякі форми програми
Вигляд пронрами :
Вибравши пункт «Оформити кредит»:
Вибравши “Застава”, бачимо:
Вибравши “Поручитель”, бачимо:
Встановивши курсор на таблиці БД на буть якого позичальника , якщо він має поручителя то будуть виведені данні про нього.
Спільним полем є ‘Щомісячний внесок’.
Висновок
На даній курсовій роботі я набув навичок у програмуванні в Delphi 7 з використанням SQL-запитів, а також з використанням InterBase.
Основним завдання було розробити програму «Оформлення кркдитів». Дана програма може бути використана в Банках. Зміна даних в БД проводиться легко і користувачу непотрібно знати принцип роботи програми. Меню має інтуїтивно зрозумілий вигляд, що полегшує користування цією програмою.
Додаток
Текст основного модуля
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IBQuery, Grids, DBGrids, DB, IBCustomDataSet, IBDatabase,
ExtCtrls, DBCtrls,unit2, StdCtrls, Menus;
type
TForm1 = class(TForm)
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
EXIT1: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
Image1: TImage;
Image2: TImage;
IBQuery1: TIBQuery;
Label1: TLabel;
IBQuery2: TIBQuery;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Bevel1: TBevel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
curdate: string;
implementation
uses Unit4;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//ibtransaction1.Active:=true;
curdate:=DateToStr(Date);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Visible:=true;
end;
procedure TForm1.N12Click(Sender: TObject);
begin
form1.Visible:=false
end;
procedure TForm1.N10Click(Sender: TObject);
begin
if image1.Visible=false then image1.Visible:=true else
image2.Visible:=false
end;
procedure TForm1.N11Click(Sender: TObject);
begin
if image2.Visible=false then image2.Visible:=true else
image1.Visible:=false
end;
procedure TForm1.N16Click(Sender: TObject);
begin
Form4.visible:=True
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var n: integer;
fam,name,pob,num,obl,plase,street,bud,kv,tel,pasport,sumaspl:string;
begin
n:=dbgrid1.SelectedIndex;
dbgrid1.SelectedIndex:=0;
num:=dbgrid1.SelectedField.AsString;
dbgrid1.SelectedIndex:=n;
ibquery2.Active:=false;
ibquery2.SQL.Text:='select * from por where N='+#39+num+#39;
ibquery2.Active:=true;
fam:=ibquery2.FieldByName('fam').AsString;
if fam<>'' then
begin
label1.Visible:=true;
label2.Visible:=true;
label3.Visible:=true;
label4.Visible:=true;
label5.Visible:=true;
label6.Visible:=true;
label7.Visible:=true;
label8.Visible:=true;
label9.Visible:=true;
label10.Visible:=true;
label11.Visible:=true;
label12.Visible:=true;
label13.Visible:=true;
label14.Visible:=true;
label15.Visible:=true;
label16.Visible:=true;
label17.Visible:=true;
label18.Visible:=true;
label19.Visible:=true;
label20.Visible:=true;
label21.Visible:=true;
fam:=ibquery2.FieldByName('fam').AsString;
name:=ibquery2.FieldByName('name').AsString;
pob:=ibquery2.FieldByName('pob').AsString;
obl:=ibquery2.FieldByName('obl').AsString;
plase:=ibquery2.FieldByName('plase').AsString;
street:=ibquery2.FieldByName('street').AsString;
bud:=ibquery2.FieldByName('bud').AsString;
kv:=ibquery2.FieldByName('kv').AsString;
tel:=ibquery2.FieldByName('tel').AsString;
pasport:=ibquery2.FieldByName('pasport').AsString;
label1.Caption:=fam;
label2.Caption:=name;
label3.Caption:=pob;
label4.Caption:=obl;
label5.Caption:=plase;
label6.Caption:=street;
label7.Caption:=bud;
label8.Caption:=kv;
label9.Caption:=tel;
label10.Caption:=pasport;
end
else
begin
label1.Visible:=false;
label2.Visible:=false;
label3.Visible:=false;
label4.Visible:=false;
label5.Visible:=false;
label6.Visible:=false;
label7.Visible:=false;
label8.Visible:=false;
label9.Visible:=false;
label10.Visible:=false;
label11.Visible:=false;
label12.Visible:=false;
label13.Visible:=false;
label14.Visible:=false;
label15.Visible:=false;
label16.Visible:=false;
label17.Visible:=false;
label18.Visible:=false;
label19.Visible:=false;
label20.Visible:=false;
label21.Visible:=false;
end;
ibquery2.Active:=false;
ibquery2.SQL.Text:='select sumasplat from main where N='+#39+num+#39;
ibquery2.Active:=true;
label23.Caption:=ibquery2.fieldbyname('sumasplat').AsString;
end;
end.
Unit – 2
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, IBCustomDataSet, IBDatabase, IBQuery;
type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label5: TLabel;
Label6: TLabel;
Edit5: TEdit;
Label7: TLabel;
Label8: TLabel;
Edit7: TEdit;
Edit6: TEdit;
Edit8: TEdit;
Label9: TLabel;
Edit9: TEdit;
Label10: TLabel;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Edit14: TEdit;
Label15: TLabel;
ComboBox3: TComboBox;
Label16: TLabel;
RadioGroup1: TRadioGroup;
Button1: TButton;
Button2: TButton;
Edit15: TEdit;
Edit16: TEdit;
Label17: TLabel;
Label18: TLabel;
Button3: TButton;
DataSource1: TDataSource;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
IBQuery1: TIBQuery;
procedure Button2Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
Form3: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button2Click(Sender: TObject);
begin
form3:=Tform2.Create(nil);
form3.Edit1.Destroy;
form3.Label1.Destroy;
form3.Label5.Destroy;
form3.ComboBox1.Destroy;
form3.ComboBox2.Destroy;
form3.ComboBox3.Destroy;
form3.Label6.Destroy;
form3.Edit5.Destroy;
form3.Edit6.Destroy;
form3.Edit7.Destroy;
form3.Edit8.Destroy;
form3.Label7.Destroy;
form3.Label8.Destroy;
form3.Label9.Destroy;
form3.Label16.Destroy;
form3.RadioGroup1.Destroy;
form3.Button2.Destroy;
form3.Edit2.Top:=form3.Edit2.Top;
form3.Button3.Visible:=true;
form3.Button1.Visible:=false;
form3.Visible:=true;
end;
procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
if radiogroup1.ItemIndex = 1 then begin
button2.Visible:=true;
edit15.Visible:=false;
edit16.Visible:=false;
Label17.Visible:=false;
Label18.Visible:=false;
end
else if radiogroup1.ItemIndex = 0 then begin
button2.Visible:=false;
Edit15.Visible:=true;
Label17.Visible:=true;
Label18.Visible:=true;
edit16.Visible:=true;
end;
end;
procedure TForm2.Button1Click(Sender: TObject);
var summa:integer;
summaS:string;
begin
summa:= Round(((StrToFloat(edit7.Text)/100)* StrToFloat(edit5.Text)*(StrToInt(edit6.Text)/12) + StrToFloat(edit7.Text))/StrToInt(edit6.Text));
//summa:= Round(((StrToFloat(edit7.Text)* StrToFloat(edit5.Text)/100)+ StrToFloat(edit7.Text))/ StrToInt(edit6.Text))
SummaS:=IntToStr(summa);
ibquery1.Active:=false;
ibquery1.SQL.Text:='insert into main (N,fam,name,pob,typekr,STAVKA,termin,kred,dataof,pasport,plase,street,bud,kv,tel,banktype,sumasplat) values('+#39+edit1.Text+#39+','+#39+edit2.Text+#39+','+#39+edit3.Text+#39+','+#39+edit4.Text+#39+','+#39+combobox1.Text+','+combobox2.Text+#39+','+#39+edit5.Text+#39+','+#39+edit6.Text+#39+','+#39+edit7.Text+#39+','+#39+edit8.Text+#39+','+#39+edit9.Text+#39+','+#39+edit10.Text+#39+','+#39+edit11.Text+#39+','+#39+edit12.Text+#39+','+#39+edit13.Text+#39+','+#39+edit14.Text+#39+','+#39+combobox3.Text+#39+','+#39+summaS+#39+')';
ibquery1.Active:=true;
IBTransaction1.CommitRetaining;
form1.IBQuery1.Active:=false;
form1.IBQuery1.SQL.Text:='select N, FAM, NAME, POB, PLASE, STREET, BUD, KV, TEL, PASPORT from MAIN'; //, TYPEKR, KRED, STAVKA
form1.IBQuery1.Active:=true;
form2.Visible:=false;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
form3.ibquery1.Active:=false;
form3.ibquery1.SQL.Text:='insert into por (N,fam,name,pob,pasport,plase,street,bud,kv,tel) values('+#39+form2.edit1.Text+#39+','+#39+form3.edit2.Text+#39+','+#39+form3.edit3.Text+#39+','+#39+form3.edit4.Text+#39+','+#39+form3.edit9.Text+#39+','+#39+form3.edit10.Text+#39+','+#39+form3.edit11.Text+#39+','+#39+form3.edit12.Text+#39+','+#39+form3.edit13.Text+#39+','+#39+form3.edit14.Text+#39+')';
form3.ibquery1.Active:=true;
form3.IBTransaction1.CommitRetaining;
form3.Visible:=false;
end;
end.
Unit – 3
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm3 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
end.
Unit – 4
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm4 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Button1: TButton;
Image1: TImage;
Image2: TImage;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
end.
Перелік використаної літератури
Сорокин А. В. Delphi. Разработка баз данных. — СПб: Питер, 2005. — 480 с.
Фаронов В. В. Delphi 2005. Разработка приложений для баз данных и Интернета. — СПб: Питер, 2005. — 608 с.
Епанешников А. М., Епанешников В. А. Delphi. Программирование СУБД. — М.: ДИАЛОГ-МИФИ, 2001. — 528 с.
Ковязин А. Н., Востриков С. М. Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/Firebird/Yaffil. — М.: Кудиц, 2005. — 496 с.
Скляр А. М. Введение в InterBase. — М.: Горячая линия–Телеком, 2002. — 517 с.
Фленов М. Е. Библия Delphi. — СПб: BHV, 2004. — 880 с.
Хармон Э. Руководство разработчика баз данных в Delphi/Kylix. — М.: Вильямс, 2002. — 368 с.
Галисеев Г. В. Программирование в среде Delphi 7. Самоучитель. — К.: Диалектика, 2003. — 288 с.
Керман М. К. Программирование и отладка в Delphi. Учебный курс. — М.: Вильямс, 2004. — 720 с.
Пачеко К. Delphi for .NET. Руководство разработчика. — М.: Вильямс, 2005. — 960 с.