2. Разместим на форме три компоненты SpeedButton из палитры Additional. Одна из кнопок будет добавлять запись, другая – изменять данные в записи, третья – удалять. Назовем их соответственно.
3. Создадим новую форму, которая будет вызываться нажатием кнопки «Добавить». На форме расположены 4 компоненты Edit, компонент DateTimePicker с закладки Win32, компонент CheckBox и компонент RadioGroup.
4. Текст процедуры для события OnClick кнопки «Добавить» на форме Студенты:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form2.ShowModal; //открывает форму «Добавление записи»
end;
5. Текст процедуры для события OnClick кнопки «ОК» на форме Добавление записи:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Table1.Insert;
Form1.Table1.FieldByName('SFio').Text:=Edit1.Text;
Form1.Table1.FieldByName('SOsn').Text:=Edit2.Text;
Form1.Table1.FieldByName('SNom').Text:=Edit3.Text;
Form1.Table1.FieldByName('SKurs').Text:=Edit4.Text;
Form1.Table1.FieldByName('SData').AsDateTime:=DateTimePicker1.Date;
if CheckBox1.Checked then
Form1.Table1.FieldByName('SStip').Text:='да'
else
Form1.Table1.FieldByName('SStip').Text:='нет';
//при нажатии на флажок полю SStip (Стипендия) передается
//значение True, в противном случае вводится передается
//значение False
case RadioGroup1.ItemIndex of
0: Form1.Table1.FieldByName('SSpec').Text:='Математика';
1: Form1.Table1.FieldByName('SSpec').Text:='Физика';
end;
if form1.Table1.Modified
then form1.Table1.Post;
close;
Комметарий: в строке Form1.Table1.Insertвызывается метод, который допускает вставку новой строки в таблицу, которая находится на форме «Студенты». Без вызова этого метода дальнейшая работа по вставке записи в таблицу невозможна. Запись Form1.Table1.FieldByName('SFio').Text:=Edit1.Text означает, что текст, который находится в Edit1 по нажатии кнопки будет перенесен в таблицу на форме «Студенты» в новую запись в текстовое поле ФИО. Остальные записи в процедуре работают аналогичным образом. Запись ifform1.Table1.Modifiedthenform1.Table1.Postсохраняет изменения в таблице. Close – закрывает форму «Добавление записи».
6. По нажатии кнопки Cancel осуществляется выход. То же и на форме «Редактирование записи».
7. Текст процедуры для события OnClick при нажатии клавиши «Удалить» на форме Студенты:
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
Table1.Delete //удаляет текущую запись в таблице
end;
Редактирование данных:
Компоненты, отражающие информацию, делятся на две категории – те, которые не связаны с таблицами БД, и компоненты, связанные с таблицами и обменивающиеся с ними информацией. В первую категорию входят обычные компоненты Delphi. Компоненты второй категории расположены на странице DataControls. Почти каждая из них имеет аналог среди обычных компонент; основные отличия заключаются в том, что они могут работать с данными, хранящимися в БД. К этой группе относится компонента DBEdit, которая используется для ввода текстовой однострочной информации.
Чтобы компонент DBEdit видел данные из поля таблицы, следует указать в свойствах:
Этот компонент с заданными уже свойствами может появиться автоматически при перетаскивании имени поля из окна редактора полей.
1. Создадим новую форму: Редактирование записи.
2. В случае перетаскивания поля логического типа, на форме автоматически устанавливается компонента DBCheckBox, что не всегда удобно.
2.1. Установим на форму компоненту DBRadioGroup с закладки DataControl.
2.2. В свойстве DataSource укажем DataSource1.
2.3. В свойстве DataField укажем SSpec.
3. Текст процедуры для события OnClick при нажатии клавиши «Изменить» на форму Студенты:
begin
Form3.ShowModal //вызов Form3
end;
4. Текст процедуры для события OnClick при нажатии клавиши «Сохранить» на форму Редактирование:
begin
if form1.Table1.Modified
then form1.Table1.Post; //всеизменениявтаблицесохраняются
close;
end;
5. Пользователь имеет возможность редактировать записи в таблице напрямую. Чтобы это предотвратить используется свойство компоненты DBGriddgEditing. Нужно выделить DBGrid1 и в свойстве Options► dgEditing инспектора объектов поставить false.
Цели работы:
Сортировка:
Порядок расположения записей в таблице БД может быть неопределенным. По умолчанию записи не отсортированы или сортируются, например, для таблиц Paradox по ключевым полям, а для таблиц dBase в порядке их поступления в файл таблицы.
С отсортированными записями набора данных работать более удобно. Сортировка заключается в упорядочивании записей по определенному полю в порядке возрастания или убывания содержащихся в нем записей.
Сортировка набора данных TTable выполняется автоматически по текущему индексу. При смене индекса происходит переупорядочивание записей. Таким образом, возможна по полям, для которых создан индекс. Для сортировки по нескольким полям нужно создать индекс, включающий эти поля.
Задать индекс, по которому выполняется сортировка записей, можно с помощью свойств:
· IndexName – указывается имя индекса, установленное при его создании;
· IndexFieldName – указываются имена полей, образующий соответствующий индекс.
begin
Case ComboBox1.ItemIndex of
0: Table1.IndexFieldNames:='SFio'; //привыборестроки «Фамилия»
//сортировка идет по вторичному индексу IDFio
1: Table1.IndexFieldNames:='SSpec';
2: Table1.IndexFieldNames:='SKurs';
3: Table1.IndexFieldNames:='SData';
4: Table1.IndexFieldNames:='SNom';
end;
end;
Замечание: во вторичный индекс IDFioвходят поля: SFio, SKurs, SSpec. То есть при совпадении фамилии сортировка идет уже по курсу и т.д.
Пример:
Поиск:
Метод Locate ищет первую запись, удовлетворяющую критерию поиска, и если такая запись найдена, делает ее текущей. В этом случае в качестве результата возвращается значение True. Если запись не найдена, возвращается значение False и курсор не меняет своего положения.
function Locate (const KeyFields: String; const KeyValues: Variant;
Options: TLocateOptions): Boolean;
Список полей, по которым ведется поиск, задается в параметре KeyFields, поля разделяются точкой с запятой. ПараметрKeyValues типа Variant указывает значение полей для поиска. Если поиск ведется по одному полю, то параметр содержит одно значение, соответствующие типу поля, заданного для поиска.
Параметр Options позволяет задать значение, которое обычно используется при поиске строк. Этот параметр принадлежит к множественному типу TLocateOptions и принимает комбинации следующих значений:
· LoCaseInsensitive –регистр букв не учитывается;
· LoPartialKey – допускается частичное совпадение.
begin
table1.Locate('SFio',Edit1.Text,[loPartialKey]);
end;
Метод Lookup находит запись, удовлетворяющую условию поиска, но не делает ее текущей, а возвращает значения некоторых ее полей. Независимо от результата поиска записи указатель текущей записи в НД не изменяется. В отличие от метода Locate, метод Lookup осуществляет поиск только на точное соответствие критерию поиска значения поля поиска записи.
function Lookup (const KeyFields: String;const KeyValues: Variant;
constResultFields: String): Variant;
В параметре ResultFields перечисляются поля, значения которых требуется получить в случае успешного поиска. Тип результата – Variantили вариантный массив.
1. Добавить на главную форму новую кнопку «Поиск».
2. Открыть новую форму и ввести компоненты как показано на рисунке. Эта форма вызывается нажатием кнопки поиска на главной форме.