Программирование баз данных – очень большой и серьезный раздел самого что ни на есть практического программирования, многие программисты большую часть своего времени тратят именно на проектирование баз данных и разработку приложений, работающих с ними. Это неудивительно – в настоящее время каждая государственная организация, каждая фирма или крупная корпорация имеют рабочие места с компьютерами. Имеется масса данных, которые нужно не только сохранить, но и обработать, получить комплексные отчеты. Без баз данных сегодня не обойтись. А завтра они будут еще нужней.
Недостаточно просто написать программу, взаимодействующую с БД. Нужно уметь правильно спроектировать эту базу данных. Проектирование баз данных, в общем, является первым шагом разработки приложения. Только когда база данных спроектирована, программист приступает непосредственно к проекту приложения.
При написании программ работы с базами данных (БД) на «Делфи» обычно используется метод доступа через BDE – систему. BDE – система представляет из себя набор драйверов, связывающих прикладную программу на «Делфи» с физическими файлами БД.
В «Делфи» понятие «таблица данных» и «база данных» различаются. Таблицей называется совокупность данных, нормализованных в табличную форму. Примером таблиц служат классические БД типа FoxPro и DBase. База данных – это файл, содержащий в себе несколько таблиц, которые имеют, как правило, внутренние взаимосвязи по ключевым полям. Базы данных используются в крупных промышленных СУБД типа «ORACLE» и других клиент – серверных системах.
Для ознакомления с программированием баз данных будем пользоваться таблицами типа DBase и FoxPro. Для начала любой работы с БД из под «Делфи» необходимо настроить BDE – систему. Для этого служит специальная программа «BDE Administrator». Для создания таблиц и наполнения их данными можно воспользоваться программой «DataBase Desktop» из установленного комплекта «Делфи».
Для создания простейшей программы понадобится одна форма, не визуальные компоненты «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;
Компонент “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», то текущая запись – последняя
Компонент “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” для связи с БД