- •Базы данных в Delphi Оглавление
- •Глава I. Базы данных в Delphi 3
- •Глава II. Наборы данных 11
- •Глава I. Базы данных в Delphi
- •1.1. Ведение в базы данных
- •1.2. Таблицы баз данных.
- •1.3. Таблицы формата dBase и Paradox
- •Сравнительная характеристика dBase и Paradox
- •1.4. Практическая работа
- •1.5. Самостоятельная работа
- •Глава II. Наборы данных
- •2.1. Набор данных
- •2.2. Практическая работа
- •2.3. Самостоятельная работа
- •2.4. Режимы наборов данных
- •2.5. Практическая работа
- •2.6. Перемещение по записям набора данных
- •2.7. Практическая работа
- •2.8. Доступ к полям
- •2.9. Практическая работа
- •2.10. Практическая работа
- •2.11. Способы задания состава полей набора данных
- •Редактор полей
- •2.12. Вычисляемые поля
- •2.13. Практическая работа №7
- •Глава III. Индексирование баз данных
- •3.1. Установка текущего индекса
- •3.2. Сортировка набора данных
- •3.3. Практическая работа
- •Глава IV. Фильтрация записей
- •4.1. Фильтрация по выражению
- •4.2. Практическая работа
- •4.3. Практическая работа
- •4.4. Фильтрация по диапазону
- •4.5. Самостоятельная работа
- •Глава V. Поиск записей в наборе данных.
- •5.1. Поиск записей
- •5.2. Поиск записей по нескольким полям.
- •5.3. Практическая работа
- •Глава VI. Модификация набора данных
- •6.1. Редактирование записей
- •6.2. Добавление записей
- •6.3. Удаление записей
- •6.4. Практическая работа
- •Глава VII. Работа со связанными таблицами
- •7.1. Организация связей между таблицами
- •7.2. Практическая работа
- •7.3. Самостоятельная работа
- •Глава VIII. Работа с отчетами
- •8.1. Объект QuickRep
- •8.2. Компоненты, размещаемые в полосе
- •8.3. Практическая работа
6.2. Добавление записей
Добавлять записи можно только к модифицируемому НД.
Для добавления записи нужно выполнить следующие действия:
перевести НД в режим вставки;
задать значения полей текущей записи;
подтвердить сделанные изменения или отказаться от них, после чего НД снова переходит в режим просмотра.
Метод Insert переводит НД в режим вставки и добавляет к нему новую пустую запись. Новая запись вставляется перед текущей записью. При необходимости перед вызовом метода Insert необходимо выполнить перемещение текущего указателя на ту запись НД, перед которой вставляется новая запись.
Метод Append вставляет новую запись в конец НД.
Для компонента DBGrid новая запись добавляется к НД при нажатии клавиши [Insert] или при переходе на последнюю запись. Если на форме находится компонент DBNavigator , то новая запись добавляется при нажатии кнопки Insert Record (Вставить запись).
6.3. Удаление записей
Удаление текущей записи выполняет метод Delete, который работает только с модифицируемым НД. В случае успешного удаления записи текущей становится следующая запись, если же удалялась последняя запись, то курсор перемещается на предыдущую запись, которая после удаления становится последней.
При удалении записи генерируются события BeforeDelete и AfterDelete.
Если при удалении записи требуется подтверждение удаления, то можно написать следующий обработчик события OnClick для кнопки Button «Удалить запись»:
procedure TForm1.Button1Click(Sender: TObject);
begin
if MessageDlg ('Удалить запись?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Table1.Delete;
end;
Удаление нескольких последовательно расположенных записей имеет особенность, связанную с тем, что при вызове метода Delete в цикле по перебору удаляемых записей не нужно вызывать методы, перемещающие указатель текущей записи. после удаления текущей записи указатель автоматически перемещается на соседнюю (обычно следующую) запись. Так можно удалить все записи НД:
procedure TForm1.Button1Click(Sender: TObject);
var n:longint;
begin
Table1.Last;
For n:= Table1.RecordCount downto 1 do Table1.Delete;
end;
В примере перебор записей выполняется с конца НД. После удаления текущей записи указатель снова оказывается на последней записи.
Перед удалением записи часто предварительно выполняется поиск записи, удовлетворяющей заданным условиям. Для отбора группы удаляемых записей используется фильтрация. Метод Delete позволяет удалить записи, видимые в НД. Поэтому с помощью фильтрации можно временно оставить в НД записи, которые подлежат удалению, а после удаления фильтрацию отключить.
6.4. Практическая работа
Создадим приложение для добавления, вставки, удаления записей таблицы Chitateli.db. В программе предусмотреть блокировку изменения записей.
Расположите на форме компоненты в соответствии с рисунком:
Для блокировки редактирования НД используется компонент CheckBox1 «Редактирование НД запрещено». Если флажок компонента установлен, то в НД невозможно внести какие-либо изменения. Для компонента CheckBox1 напишите следующий обработчик события OnClick:
procedure Tform1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
Table1.Active:=False;
Table1.ReadOnly:=True;
Table1.Active:=True;
end
else
begin
Table1.Active:=False;
Table1.ReadOnly:=False;
Table1.Active:=True;
end;
end;
При щелчке по кнопке Добавить запись в конец НД будет появляться дополнительное окно формы в модальном режиме для добавления новой записи:
Для этого добавьте к проекту новую форму. Перейдите на первую форму. Выберите в главном меню Delphi пункт меню File, в этом пункте команду Use unit… В появившемся окне выберите Unit2. Нажмите ОК. В окне кода программы появится следующий раздел:
implementation
uses Unit2;
Перейдите на вторую форму и выполните аналогичные действия. В окне кода программы появится аналогичный раздел:
implementation
uses Unit1;
Разместите на второй форме четыре компонента DBEdit. Этот компонент представляет собой поле, в котором возможно отображение и изменение его значений.
Расположите на второй форме две кнопки BitBtn. В процессе ввода пользователь может утвердить ввод, нажав кнопку «Ввод», или отменить его, нажав кнопку «Отмена». После закрытия модальной формы ввода проверяется, какая кнопка нажата. Если «Ввод», то сделанные изменения принимаются, в противном случае – нет.
Для окна формы напишите обработчик события OnCreate:
procedure TForm2.FormCreate(Sender: TObject);
begin
DBEdit1.DataSource:=Form1.DataSource1;
DBEdit1.DataField:='Fio';
DBEdit2.DataSource:=Form1.DataSource1;
DBEdit2.DataField:='DataR';
DBEdit3.DataSource:=Form1.DataSource1;
DBEdit3.DataField:='Adres';
DBEdit4.DataSource:=Form1.DataSource1;
DBEdit4.DataField:='NomerChit';
BitBtn1.ModalResult:=mrOk;
BitBtn2.ModalResult:=mrCancel;
end;
Для кнопки «Добавить запись в конец НД» напишите обработчик события OnClick:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if table1.ReadOnly=False then
begin
Table1.Append;
if Form2.ShowModal=mrOk then
Table1.Post
else
Table1.Cancel;
end
else
ShowMessage('Редактирование записей запрещено!');
end;
Для кнопки «Вставить запись» – следующую процедуру:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if table1.ReadOnly=False then
begin
Table1.Insert;
if Form2.ShowModal=mrOk then
Table1.Post
else
Table1.Cancel;
end
else
ShowMessage('Редактирование записей запрещено!');
end;
Для кнопки «Удалить запись»:
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if table1.ReadOnly=False then
begin
if Messagedlg('Удалить запись?',
mtConfirmation,[mbYes, mbNo],0)=mrYes then
Table1.delete;
end
else
ShowMessage('Редактирование записей запрещено!');
end;
После щелчка по этой кнопке на экране появляется окно, в котором происходит подтверждение или отказ от удаления текущей записи:
