Смекни!
smekni.com

Лабораторные работы по базам данных в Delphi (стр. 3 из 4)

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 видел данные из поля таблицы, следует указать в свойствах:

  • DataSource – источник данных;
  • DataField – поле для редактирования.

Этот компонент с заданными уже свойствами может появиться автоматически при перетаскивании имени поля из окна редактора полей.

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 и в свойстве OptionsdgEditing инспектора объектов поставить false.

Лабораторная работа № 3

Цели работы:

  1. Ознакомиться с сортировкой записей в базе данных.
  2. Поиск полей с помощью методов Locate и Lookup;

Сортировка:

Порядок расположения записей в таблице БД может быть неопределенным. По умолчанию записи не отсортированы или сортируются, например, для таблиц Paradox по ключевым полям, а для таблиц dBase в порядке их поступления в файл таблицы.

С отсортированными записями набора данных работать более удобно. Сортировка заключается в упорядочивании записей по определенному полю в порядке возрастания или убывания содержащихся в нем записей.

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

Задать индекс, по которому выполняется сортировка записей, можно с помощью свойств:

· IndexName – указывается имя индекса, установленное при его создании;

· IndexFieldName – указываются имена полей, образующий соответствующий индекс.

  1. Откроем приложение.
  2. Добавим на форму компоненты ComboBox и Button.

  1. В свойстве Items компоненты ComboBox запишем параметры сортировки: Фамилия, Специальность, Курс, Дата рождения, Номер зачетки.
    1. Условия сортировки задаются вторичными индексами. То есть сортировка по фамилии происходит по вторичному ключу IDFio так как в него первым входит поле SFio. Для того, чтобы сортировка проходила по выбранным параметрам необходимо вхождение соответствующих полей в разные вторичные ключи.
  2. Текст процедуры для события OnClick при нажатии кнопки «Сортировка» на форме Студенты:

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 – допускается частичное совпадение.

    На форму добавить компоненту Edit.

    Текст процедуры для события OnChange компоненты Edit на форме Студенты:

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. Открыть новую форму и ввести компоненты как показано на рисунке. Эта форма вызывается нажатием кнопки поиска на главной форме.