Сергей Талипов
Базы данных на Delphi 7

ЛЕКЦИЯ № 1

1. СОЗДАНИЕ ПО НА ОСНОВЕ БАЗ ДАННЫХ В DELPHI

Программирование баз данных – очень большой и серьезный раздел самого что ни на есть практического программирования, многие программисты большую часть своего времени тратят именно на проектирование баз данных и разработку приложений, работающих с ними. Это неудивительно – в настоящее время каждая государственная организация, каждая фирма или крупная корпорация имеют рабочие места с компьютерами. Имеется масса данных, которые нужно не только сохранить, но и обработать, получить комплексные отчеты. Без баз данных сегодня не обойтись. А завтра они будут еще нужней.

Недостаточно просто написать программу, взаимодействующую с БД. Нужно уметь правильно спроектировать эту базу данных. Проектирование баз данных, в общем, является первым шагом разработки приложения. Только когда база данных спроектирована, программист приступает непосредственно к проекту приложения.

При написании программ работы с базами данных (БД) на «Делфи» обычно используется метод доступа через BDE – систему. BDE – система представляет из себя набор драйверов, связывающих прикладную программу на «Делфи» с физическими файлами БД.

В «Делфи» понятие «таблица данных» и «база данных» различаются. Таблицей называется совокупность данных, нормализованных в табличную форму. Примером таблиц служат классические БД типа FoxPro и DBase. База данных – это файл, содержащий в себе несколько таблиц, которые имеют, как правило, внутренние взаимосвязи по ключевым полям. Базы данных используются в крупных промышленных СУБД типа «ORACLE» и других клиент – серверных системах.

Для ознакомления с программированием баз данных будем пользоваться таблицами типа DBase и FoxPro. Для начала любой работы с БД из под «Делфи» необходимо настроить BDE – систему. Для этого служит специальная программа «BDE Administrator». Для создания таблиц и наполнения их данными можно воспользоваться программой «DataBase Desktop» из установленного комплекта «Делфи».

2. ПРОСТЕЙШАЯ ПРОГРАММА

Для создания простейшей программы понадобится одна форма, не визуальные компоненты «DataSource» и «Table» из вкладки «Data Access», и визуальные компоненты «DBGrid» и «DBGrid» из вкладки «Data Controls». Расположите компоненты на форме как показано на рис.1.

Рис. 1

Не визуальный компонент «Table» предназначен для непосредственного доступа к таблице данных через BDE – систему. Визуальный компонент «DBGrid» служит для просмотра/редактирования записей в таблице данных, компонент «DBNavigator» служит для перемещения (навигации) по таблице данных. Не визуальный компонент «DataSource» служит посредником между компонентом «Table» и всеми визуальными компонентами.

Программная часть программы состоит из двух обработчиков событий «OnActivate» и «OnClose» для формы. Ниже приведен исходный текст данных обработчиков.

procedure TForm1.FormActivate(Sender: TObject);

begin

try { Установка защиты на операторы }

  Table1.DatabaseName:='c:\uoo\dbf'; { Установка пути к таблице данных }

  Table1.TableName:='u2_spec.dbf'; { Указание имени файла таблицы данных с расширением }

  DataSource1.DataSet:=Table1; { Связуем компонент Table1 с компонентом DataSource1 }

  DBGrid1.DataSource:=DataSource1; { Связуем компонент DBGrid1 с компонентом DataSource1 }

  DBNavigator1.DataSource:=DataSource1; { Связуем компонент DBNavigator1 с компонентом DataSource1 }

  if not Table1.active then Table1.Open; { Если таблица еще не открыта, то открыть ее }

except { Если произошла ошибка при открытии таблицы данных, то выдать сообщение }

  showmessage('Error !');

end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin { Если таблица данных открыта, то закрыть ее }

try if Table1.active then Table1.Close; except end;

end;

ЛЕКЦИЯ № 2

1. МЕТОДЫ И СВОЙСТВА КОМПОНЕНТ ДОСТУПА К ТАБЛИЦАМ ДАННЫХ

Компонент “TTable” служит для непосредственной связи с базой данных (таблицей). Данный компонент имеет ряд основных методов:

Open – открытие базы данных

Close – закрытие базы данных

Refresh (для BDE) / Requery (для ADO) – обновление базы данных с диска

Edit – перевод БД в режим редактирования текущей записи

Post – запоминание изменений для редактируемой текущей записи (вызывается после метода «Edit»)

Cancel – отмена изменений для редактируемой текущей записи (вызывается после метода «Edit», если нужно отменить изменения)

Insert – вставка новой пустой записи в БД

Append – добавление в конец новой пустой записи в БД

Delete – удаление текущей записи из БД

EmptyTable – удаление всех данных в таблице

DeleteTable – удаление БД с диска

First – переход на первую запись БД

Last – переход на последнюю запись БД

Next – переход на следующую запись БД

Prior – переход на предыдущую запись БД

MoveBy (-10) – переход на -10 записей БД (можно на любой целое число до начала или конца БД)

DisableControls – запретить отображение значений из БД во всех связанных с ней визуальных компонентах

EnableControls – разрешить отображение значений из БД во всех связанных с ней визуальных компонентах

Компонент “TTable” имеет ряд основных свойств:

Active – если «True», то база данных открыта

RecNo – выдает номер текущей записи БД

RecordCount – выдает количество записей в БД

FieldValues – доступ к значению поля БД

Modified – если «True», то текущая запись была изменена

Bof – если «True», то текущая запись – первая

Eof – если «True», то текущая запись – последняя

ЛЕКЦИЯ № 3

1. КОМПОНЕНТЫ ОТОБРАЖЕНИЯ ЗАПИСЕЙ БД

Компонент “DBEdit” служит для отображения и изменения значения одного конкретного поля текущей записи базы данных. Основные свойства этого компонента:

DataField := ‘CODE’; // Имя поля БД для отображения

DataSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

 Компонент “DBText” служит только для отображения значения одного конкретного поля текущей записи базы данных. Основные свойства этого компонента:

DataField := ‘CODE’; // Имя поля БД для отображения

DataSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

Компонент “DBMemo” служит для отображения значения одного конкретного memo-поля для текущей записи БД. . Основные свойства этого компонента:

DataField := ‘CODE’; // Имя поля БД для отображения

DataSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

Компонент “DBImage” служит для отображения значения одного конкретного Image-поля для текущей записи БД. Компонент поддерживает только «bmp» формат. Основные свойства компонент:

DataField := ‘CODE’; // Имя поля БД для отображения

DataSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

Для “DBImage”:

Stretch := true; // Включение режима масштабирования рисунка

procedure TForm1.N1Click(Sender: TObject);

{ Скопировать картинку из таблицы данных в буфер обмена }

begin

  DBImage1.CopyToClipboard;

end;

procedure TForm1.N2Click(Sender: TObject);

{ Вставить картинку из буфера обмена в поле таблицы данных }

begin

  DBImage1.PasteFromClipboard;

end;

procedure TForm1.N3Click(Sender: TObject);

{ Загрузить картинку из файла в таблицу данных }

begin

  if opendialog1.Execute=true then begin

    try ADOTable1.edit; except end;

    DBImage1.Picture.LoadFromFile(OpenDialog1.FileName);

    try ADOTable1.post; except end;

  end;

end;

procedure TForm1.N4Click(Sender: TObject);

{ Сохранить картинку из таблицы данных в файл }

begin

  if savedialog1.Execute=true then

    DBImage1.Picture.SaveToFile(SaveDialog1.FileName);

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Удаление картинки из базы }

begin

  try ADOTable1.Edit;

  ADOTable1['Oblochka']:=null;

  ADOTable1.Post; except end;

end;

Компонент “DBLookupComboBox” служит для выбора конкретной записи БД по значению из конкретного поля базы данных. Данный компонент представляет собой выпадающий список с перечнем значений поля БД для всех записей:

KeyField := ‘CODE’; // Имя поля БД для отображения

ListSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

Компонент “DBLookupListBox” служит для выбора конкретной записи БД по значению из конкретного поля базы данных. Данный компонент представляет собой прокручиваемый список с перечнем значений поля БД для всех записей:

KeyField := ‘CODE’; // Имя поля БД для отображения

ListSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

Компонент “DBGrid” служит для отображения значения всех записей и полей БД. Основные свойства этого компонента:

DataSource := DataSource1; // Имя компонента типа “ DataSource” для связи с БД

2. ПРИМЕР ИСПОЛЬЗОВАНИЯ МЕТОДОВ И СВОЙСТВ КОМПОНЕНТА «TTABLE»

procedure TForm1.Button1Click(Sender: TObject);

begin

Table1.Append;

Table1.FieldValues['Name'] := Edit1.text;

Table1. ['Year'] := StrToInt(Edit2.text);

Table1.Post;

end;

* * * *

Table1.Edit;

Table1.FieldByName(‘Name’).AsString := ‘Fred’;

Table1.Post;

* * * *

  Table1.Insert;

  Table1['Name'] := 'Russia';

  Table1['Sity'] := 'Moscow';

  Table1.Post;

* * * *

if MessageDlg('Сохраннить запись?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Table1.Post else Table1.Cancel;

* * * *

procedure TForm1.Button1Click(Sender: TObject);

var i: integer; k: real;

begin

  k:=0;

  with ProgressBar1 do begin

    Min := 0; Max := Table1.RecordCount;

    Table1.First;

    for i := Min to Max do begin

      Position := i; s:=s+ Table1[‘sum’];

      Table1.Next;

    end;

  end;

end;

* * * *

with Table1 do begin

  DisableControls;

  try

    First;

    while not EOF do Delete;

  finally

    EnableControls;

  end;

end;

ЛЕКЦИЯ № 4

1. СОЗДАНИЕ ПОЛЕЙ ВЫБОРА И ВЫЧИСЛЯЕМЫХ ПОЛЕЙ

Поля выбора «Lookup» используются для создания виртуальных полей, данные в которых пользователь не набирает вручную, а выбирает из выпадающего списка. После выбора значения из списка оно отображается на экране, а в файл БД записывается код выбранного значения из выпадающего списка в соответствующее поле БД. Выпадающий список формируется из каких либо двух полей другой таблицы. Одно поле другой таблицы хранит код записи, а другое соответствующий текст, который появляется в выпадающем списке. Lookup-поля используются для подключения к основной таблице вспомогательных таблиц-справочников БД. Рассмотрим применение полей выбора на примере.

Например, имеется следующие таблицы:

Таблица 1. Диски – CD (Table_CD)

Код диска | Название диска | Код фирмы
| (Name_CD) | (Kod_Firm)
0000001 | Итнернет – 2001 | 00001
0000002 | Суперсистемный диск 2k2 | 00002
0000003 | English Platinum (2) | 00003
0000004 | All stars disco 2 | 00004
0000005 | Золотая бухгалтерия 2001 | 00002

Таблица 2. Фирмы – поставщики (Table_Firm)

Код фирмы (Kod_Firm) | Название фирмы (Name_Firm)
00001 | Красные Челны
00002 | Технопром
00003 | CD-маркер
00004 | Мегаполис

Данные таблицы имеют общее поле «Код фирмы». Необходимо сделать так, чтобы при просмотре первой таблицы вместо кодов фирм выходило соответствующее название фирмы. Для этого необходимо в первой таблице поле «код фирмы» сделать невидимым для визуальных компонент, и добавить к таблице «Lookup»-поле. Данное поле просмотра будет смотреть код фирмы в первой таблице у каждой записи, находить соответствующую запись с данным кодом во второй таблице, брать из второй таблицы соответствующее коду название фирмы и подставлять его в качестве своего значения. В результате первая таблица будет отображаться следующим образом:

Таблица 1. Диски – CD (Table_CD)

Код диска | Название диска | Фирма (Loolup-поле)
| (Name_CD) | (nFirm)
0000001 | Итнернет – 2001 | Красные Челны
0000002 | Суперсистемный диск 2k2 | Технопром
0000003 | English Platinum (2) | CD-маркер
0000004 | All stars disco 2 | Мегаполис
0000005 | Золотая бухгалтерия 2001 | Технопром

Если при просмотре таблицы 1 мы поменяем для первой записи значение фирмы «Красные челны» на «Технопром» (через выпадающий список), то в поле «Код фирмы» таблицы 1 запишется значение «00002», взятое из таблицы 2. Таким образом, поля просмотра позволяют хранить в базе данных только нужные коды, а их текстовые значения брать из другой базы данных и подставлять для просмотра и выбора.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.