Лабораторные работы по базам данных в Delphi
Лабораторная работа № 1
Цель работы:
- Ознакомить с утилитой DatabaseDesktop.
- Усвоить процесс создания и редактирования таблиц с помощью DatabaseDesktop.
Database Desktop
- это утилита, которая поставляется вместе с Delphi для интерактивной работы с таблицами различных форматов локальных баз данных - Paradox и dBase, а также SQL-серверных баз данных InterBase, Oracle, Informix, Sybase (с использованием SQL Links). Исполняемый файл утилиты называется DBD32.EXE
. Для запуска Database Desktop просто дважды щелкните по ее иконке.
Запуск
Database
Desktop
:
Запустить Delphi
1.1 В меню Delphi выбрать раздел Tools
2.2 В появившемся списке выбрать строку Database
Desktop
Щелкнуть по кнопке Пуск
1.1 Из главного меню выбрать строку Программы
2.2 В появившемся списке выбрать строку Delphi
7
3.3 В следующем списке выбрать строку Database
Desktop
После запуска DatabaseDesktop на экране появится окно:
Создание таблиц в
Database
Desktop
:
- Запускаем программу Database Desktop;
- В появившемся окне выбираем: File
►
New
►
Table
.
Формат таблицы выбираем Paradox
.
После этого появится окно создания таблицы, в котором можно определить поля таблицы и их тип:
По умолчанию сразу после открытия окна в правой его части в списке Table
properties
выбран пункт Validity
Chekcs
, что позволяет контролировать содержимое полей. С помощью флажка Required
Fields
можно потребовать обязательного заполнения поля при вводе новой записи. Также можно контролировать минимальное и максимальное значение числового поля в строках Minimum
Value
и Maximum
Value
. В строке Default
Value
можно указать значение поля по умолчанию – при вводе новой записи значение в это поле поместит BDE
.С помощью строки Picture
можно задать шаблон для автоматического форматирования значения поля. Например, если задан шаблон (###)###-#### и в поле введена строка 9054005647, она будет автоматически преобразована к виду (905)400-5647.
Кнопки предназначены для:
Borrow
…
– осуществляет копирование структуры таблицы из другой таблицы
Save
as
…
– сохраняет изменения в структуре таблицы
Cancel
– выход без сохранения
Help
– вызов справки
Чтобы определить структуру таблицы в этом окне необходимо заполнить следующие графы:
· Field Name
-
Имя
поля
.
· Type
- Тип поля.
Вызывает список допустимых типов, щелчком правой кнопки мыши или клавишей пробел.
· Size
- Размер.
Определяет размер поля. Не все типы полей имеют размер. Большинство типов имеют стандартный размер, который не может быть изменен. Размер в основном меняется у строковых типов (Alpha), бинарных (Binary) и др.
· Key
- Ключ
. Двойной щелчок мышью определяет ключевое поле. Ключевыми могут быть только первые поля, то есть второе поле сможет быть ключевым только вместе с первым.
Типы полей формата Paradox
A
lpha |
строка длиной 1-255 байт, содержащая любые печатаемые символы |
N
umber |
числовое поле длиной 8 байт, значение которого может быть положительным и отрицательным. Диапазон чисел - от 10-308
до 10308
с 15 значащими цифрами |
$
(Money) |
числовое поле, значение которого может быть положительным и отрицательным. По умолчанию, является форматированным для отображения десятичной точки и денежного знака |
S
hort |
числовое поле длиной 2 байта, которое может содержать только целые числа в диапазоне от -32768 до 32767 |
Long I
nteger |
числовое поле длиной 4 байта, которое может содержать целые числа в диапазоне от -2147483648 до 2147483648 |
#
(BCD) |
числовое поле, содержащее данные в формате BCD (Binary Coded Decimal). Скорость вычислений немного меньше, чем в других числовых форматах, однако точность - гораздо выше. Может иметь 0-32 цифр после десятичной точки |
D
ate |
поле даты длиной 4 байта, которое может содержать дату от 1 января 9999 г. до нашей эры - до 31 декабря 9999 г. нашей эры. Корректно обрабатывает високосные года и имеет встроенный механизм проверки правильности даты |
T
ime |
поле времени длиной 4 байта, содержит время в миллисекундах от полуночи и ограничено 24 часами |
@
(Timestamp) |
обобщенное поле даты длиной 8 байт - содержит и дату и время |
M
emo |
поле для хранения символов, суммарная длина которых более 255 байт. Может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (1-240) - остальные символы сохраняются в отдельном файле с расширением .MB |
F
ormatted Memo |
поле, аналогичное Memo, с добавлением возможности задавать шрифт текста. Также может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в отдельном файле с расширением .MB. Однако, Delphi в стандартной поставке не обладает возможностью работать с полями типа Formatted Memo |
G
raphic |
поле, содержащее графическую информацию. Может иметь любую длину. Смысл размера - такой же, как и в Formatted Memo. Database Desktop “умеет” создавать поля типа Graphic, однако наполнять их можно только в приложении |
O
LE |
поле, содержащее OLE-данные (Object Linking and Embedding) - образы, звук, видео, документы - которые для своей обработки вызывают создавшее их приложение. Может иметь любую длину. Смысл размера - такой же, как и в Formatted Memo. Database Desktop “умеет” создавать поля типа OLE, однако наполнять их можно только в приложении. Delphi “напрямую” не умеет работать с OLE-полями, но это легко обходится путем использования потоков |
L
ogical |
поле длиной 1 байт, которое может содержать только два значения - T
(true, истина) или F
(false, ложь). Допускаются строчные и прописные буквы |
+
(Autoincrement) |
поле длиной 4 байта, содержащее нередактируемое (read-only) значение типа long integer
. Значение этого поля автоматически увеличивается (начиная с 1) с шагом 1 - это очень удобно для создания уникального идентификатора записи (физический номер записи не может служить ее идентификатором, поскольку в Парадоксе таковой отсутствует. В InterBase также отсутствуют физические номера записей, но отсутствует и поле Autoincrement. Его с успехом заменяет встроенная функция Gen_id
, которую удобней всего применять в триггерах) |
B
inary |
поле, содержащее любую двоичную информацию. Может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в отдельном файле с расширением .MB. Это полнейший аналог поля BLOb в InterBase |
By
tes |
строка цифр длиной 1-255 байт, содержащая любые данные |
Создадим таблицу с данными о студентах. Укажем такие данные, как: ФИО, дата рождения, на основании какого приказа студент принят в университет, номер зачетки, специальность, курс, стипендия. Во всех текстовых полях, необходимо указать размер.
Созданную таблицу сохраняем под названием Student.db и закрываем окно создания таблиц.
Иногда может понадобиться отредактировать уже созданную таблицу для того, чтобы добавить, изменить или удалить некоторые поля, изменить свойства таблицы.
Редактирование таблицы:
1. Определение вторичных индексов.
1.1. Открыть таблицу Student.db (File
►
Open
►
Table
)
1.2. Из меню Table
выбрать пункт Restructure
. Откроется окно редактирования полей таблицы.
1.3. В выпадающем списке Table properties
выбрать Secondary Indexes
и нажать кнопку Define
.
В окне Define
Secondary Index
определяются вторичные индексы:
С помощью флажков группы Index
options
можно определить следующие особенности индекса:
· Unique
– индекс будет содержать уникальные значения;
· Maintained
– индексные поля сортируются по возрастанию значений;
· Case
sensitive
– индекс чувствителен к регистру букв в текстовых полях;
· Descending
– индексные поля сортируются по убыванию значения.
1.4. Выбрать «
SFio
»
из списка Fields
и нажать кнопку с изображенной стрелкой вправо. В списке Indexed fields
(индексированные поля) появится «
SFio
».
То же самое проделать с полями «
SSpec
»
и «
SKurs
».
1.5. Закрытьокно“Define Secondary Index”
1.6. В появившемся окне ввести имя индекса IDFio
и нажать "OK"
.
2. Теперь, так как на факультете всего две специальности, то можно переопределить тип поля «
SSpec
»
. Для работы будет гораздо удобнее, чтоб это поле было типа Logical
.
2.1. Навести курсор на тип поля «
SSpec
»
и написать тип поля «
L
»
.
3. Определим языковой драйвер. Это следует делать для правильного отображения русскоязычного текста.
3.1. Открыть окно редактирования полей таблицы Student.db.
3.2. В выпадающем списке Table properties
выбрать Table
Language
и нажать кнопку Modify
.
3.3. В появившемся окне выбрать из списка Pdox
ANSI
Cyrillic
.
3.4. Сохранить таблицу.
4. Для логического типа значение по умолчанию зададим False
.
Заполнение данными в таблице
Student
.
db
:
· Открыть таблицу (File
►
Open
►
Table
)
· Выбрать Table
►
Edit
data
или нажать клавишу F
9
.
· Создать несколько записей.
Создание псевдонима:
Псевдоним указывает местонахождение файлов БД и представляет собой специальное имя для обозначения каталога. Использование псевдонимов существенно облегчает перенос файлов БД в другие каталоги и на другие компьютеры. При этом не требуется изменять приложение, которое осуществляет доступ к таблицам БД. Если в приложение местонахождения таблицы указано с помощью псевдонима, то после перемещения БД для обеспечения работоспособности приложения достаточно изменить путь, на который указывает псевдоним. Если же в приложение путь к БД указан в явном виде, то есть без псевдонима, то после перемещения БД нужно перемещать само приложение – вносить изменения в исходный код и заново его транслировать.
Регистрация псевдонима:
1. Воспользуемся приложением SQLExplorer, запускаемым командой Database
►
Explore
.
В левой части окна приводится список всех зарегистрированных в системе BDE
баз данных, в правой – свойства текущей базы, выбранной в списке.
2. Создадим псевдоним для базы данных. Для этого выполним команду Object
►
New
и в диалоговом окне выбора драйвера укажем значение Standart
.
3. После щелчка на кнопке ОК в списке появится новый элемент, помеченный зеленым треугольником.
4. По умолчанию формируется имя базы данных Standard
1
, изменим его на Student
.
5. Убедимся, что в свойствах Default
Driver
(Драйвер по умолчанию) стоит значение Paradox. В свойстве Path
укажем каталог, в котором хранится наши таблица.
6. Теперь зарегистрированную в системе BDE
базу сохраним, выбрав для этого Apply
в контекстном меню объекта Student.
7. На вопрос о необходимости сохранения изменений нажать Yes
. Теперь таблица доступны из среды BDE
под именем Student.
8. Закройте Sql
Explorer
.
Лабораторная работа № 2
Цель работы:
1. Изучить начальные этапы создания приложения для работы с базами данных в среде Delphi:
· ознакомить с компонентами доступа к БД: TTable
,
TDataSource
;
· ознакомить с компонентами управления БД: TDBGrid
,
TDBNavigator
.
2. Усвоить ввод и редактирование текста.
Методика создания приложения для работы с базой данных ничем не отличается от методики создания обычной программы: к форме добавляются необходимые компоненты, устанавливаются значения свойств компонентов, разрабатываются необходимые процедуры обработки событий.
Приложение работы с базой данных должно содержать компоненты, обеспечивающие доступ к данным, возможность просмотра и редактирования содержимого полей. Компоненты доступа к данным находятся на вкладке Data
Access
и BDE
палитры компонентов, а компоненты отображения данных — на вкладке Data Controls.
Основные компоненты доступа и управления к базам данных:
Компоненты доступа к базам данных
:
TTable
- обеспечивает взаимодействие с таблицей БД, т.е. компонент TTable
указывает, откуда брать данные и какие поля будут составлять набор данных. Компонент TTable
имеет следующие основные свойства:
· DatabaseName
– база данных
· TableName
- имя таблицы
· Active
– активация таблицы (значение True
активирует ее)
Свойство DatabaseName
определяет базу данных, в которой находится таблица. Это свойство может содержать:
* псевдоним (псевдоним)
* путь для локальных БД
* путь и имя файла базы данных для Local InterBase
* локальный псевдоним, определенный через компонент TDatabase
.
Свойство TableName
определяет имя таблицы базы данных.
TDataSource
- определяет связь между базой данных и компонентами управления данными, то есть компонент TDataSource
является промежуточным звеном между компонентом Table
1
, соединенным с реальной БД и визуальными компонентами DBGrid
1
и DBNavigator
1
, с помощью которых пользователь взаимодействует с таблицей.
В большинстве случаев, все, что нужно сделать с DataSource
- это указать в свойстве DataSet
соответствующий TTable
. Затем, у визуального компонента вроде DBGrid
или DBNavigator
в свойстве DataSource
указывается TDataSource
, который используется в настоящее время.
Компоненты управления данными с палитры
Data
Contorls
:
TDBGrid
- отображает содержимое таблицы БД в виде сетки, в котором столбцы соответствуют полям, а строки записям таблицы.
Компонент имеет следующие свойства:
· Data
Source
– содержит ссылку на компонент типа TDataSource
, служащий источником данных;
· Editor
Mode
– если содержит true
, пользователь может редактировать ячейку после нажатия клавиши F
2
или Enter
. Игнорируется, если свойство Option
включает значение goEditing
или goAlwaysShowEditor
;
· Option
– определяет вид и поведение компонента;
o dgEditing
– разрешает изменение набора данных;
o dgAlwaysShowEditor
– автоматически переводит столбец в режим редактирования при его выделение;
o dgTitles
– показывает заголовки столбцов;
o dgIndicator
– показывает индикатор текущей строки в самом левом фиксированном столбце;
o dgColumnResize
– разрешает пользователю вручную изменять ширину столбцов;
o dgColLines
– показывает разделяющие вертикальные линии;
o dgRowLines
– показывает разделяющие горизонтальные линии;
o dgTabs
– разрешает переход от столбца к столбцу с помощью клавиши Tab
;
o dgRowSelect
– разрешает выделение цветом всей выбранной строки;
o dgAlwaysShowSelection
– выделение текущей строки сохраняется, если компонент теряет фокус ввода;
o dgConfirmDelete
– удаление строки должно подтверждаться;
o dgCancelOnExit
– если пользователь вставил пустую строку и покинул ее, она не помещается в набор данных;
o dgMultiSelect
– разрешает множественный выбор строк.
TDBNavigator
- осуществляет перемещение и редактирование записей (вид и назначение кнопок указаны в пункте DBNavigator
). С помощью свойства DataSource
компонент связывается с нужным источником данных Т
DataSource
– это все, что необходимо для его нормальной работы. Свойство ConfirmDelete
управляет отображением диалогового окна с просьбой подтвердить удаление записи (значение True
этого свойства выводит окно).
Создание приложения:
1. Запустить Delphi.
2. В свойстве Caption
изменить имя формы на Студенты
.
3. Установить на форму компоненту TTable
.
4. Определить следующие свойства компоненты Table
1
.
· определить псевдоним - выбрать в свойстве DatabaseName
инспектора объектов псевдоним «Student»
.
· задать имя таблицы - выбрать в свойстве TableName
таблицу Student.
· активизировать таблицу - установить в свойстве Active
значение true
(это будет возможно после выполнения пункта 4).
5. Разместить на форму компоненту DataSource
с закладки Data
Access
и в свойстве DataSet
инспектора объектов выбрать компоненту Table
1
.
6. Расположить на форме компоненту DBGrid
с закладки Data
Controls
и в свойстве DataSource
выбрать DataSource
1
.
Если вы внесли несколько записей, то форма Студенты
примет вид:
Редактор полей:
Для управления отображением данных таблицы используют специальный редактор полей - Editor
Field
.
Для вызова Editor
Field
следует:
- Дважды щелкнуть по Table
1
.
- Для открывшегося окна вызвать контекстное меню и выбрать пункт Add All Field
, если необходимо добавить все поля таблицы.
- Add
Field
для выбора отдельного поля.
Редактор полей имеет следующие свойства:
- DisplayLabel
–
задает имя полю;
- DisplayWidth
– определяет количество символов, которое будет выводится в поле;
Определим свойства для полей таблицы Student
.
db
.
1. Выбрать в окне редактора полей таблицы поле SFio
и в свойстве DisplayLabel
инспектора объектов изменить SFio
на ФИО
. Выбрать свойство DisplayWidth
и заменить размер на 35.
2. Так же поменять свойства других полей таблицы.
3. Для полей логического типа в свойстве DisplayValues
можно написать варианты для значений True
и False
. В поле SSpec
в этом свойстве написать «Математика;Физика
» (без пробела, разделяя «;»). Получиться как показано на рисунке.
4. Если возникнет необходимость можно скрыть любое поле, выбрав его и в свойстве Visible
инспектора объектов установив значение false
.
После выполненных действий сетка DBGrid
1
будет выглядеть так:
Ввод данных:
Компоненты для организации доступа к таблицам БД позволяют выполнять всевозможные операции с наборами данных: добавлять или удалять записи, перемещаться по ним. При этом следует иметь в виду, что в любой момент времени доступна для выполнения конкретных действий только одна запись, называемая текущей.
В этой лабораторной работе рассматриваются наиболее часто используемые методы компоненты Table
.
Основные методы для организации доступа компоненты Table
:
- Append
– добавить новую запись в конец таблицы.
- Delete
– удалить текущую строку.
- Edit
– перейти в режим редактирования. После этого можно изменять значения полей.
- Insert
– вставить новую строку в таблицу.
- Post
– принять все изменения.
- Refresh
– обновить информацию о данных.
- UpdateRecord
– обновить текущую запись.
1. Откроем созданное приложение.
2. Разместим на форме три компоненты SpeedButton
из палитры Additional
. Одна из кнопок будет добавлять запись, другая – изменять данные в записи, третья – удалять. Назовем их соответственно.
3. Создадим новую форму, которая будет вызываться нажатием кнопки «Добавить»
. На форме расположены 4 компоненты Edit
, компонент DateTimePicker
с закладки Win
32
, компонент CheckBox
и компонент RadioGroup
.
4. Текст процедуры для события OnClick
кнопки «Добавить»
на форме Студенты
:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form
2.
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
;
Комметарий:
в строке Form
1.
Table
1.
Insert
вызывается метод, который допускает вставку новой строки в таблицу, которая находится на форме «Студенты
». Без вызова этого метода дальнейшая работа по вставке записи в таблицу невозможна. Запись Form
1.
Table
1.
FieldByName
('
SFio
').
Text
:=
Edit
1.
Text
означает, что текст, который находится в Edit
1
по нажатии кнопки будет перенесен в таблицу на форме «Студенты
» в новую запись в текстовое поле ФИО
. Остальные записи в процедуре работают аналогичным образом. Запись if
form
1.
Table
1.
Modified
then
form
1.
Table
1.
Post
сохраняет изменения в таблице. Close
–
закрывает форму «Добавление записи
».
6. По нажатии кнопки Cancel
осуществляется выход. То же и на форме «Редактирование записи».
7. Текст процедуры для события OnClick
при нажатии клавиши «Удалить»
на форме Студенты
:
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
Table1.Delete //удаляет текущую запись в таблице
end;
Редактирование данных:
Компоненты, отражающие информацию, делятся на две категории – те, которые не связаны с таблицами БД, и компоненты, связанные с таблицами и обменивающиеся с ними информацией. В первую категорию входят обычные компоненты Delphi. Компоненты второй категории расположены на странице Data
Controls
. Почти каждая из них имеет аналог среди обычных компонент; основные отличия заключаются в том, что они могут работать с данными, хранящимися в БД. К этой группе относится компонента DBEdit
, которая используется для ввода текстовой однострочной информации.
Чтобы компонент DBEdit
видел данные из поля таблицы, следует указать в свойствах:
- DataSource – источник данных;
- DataField – поле для редактирования.
Этот компонент с заданными уже свойствами может появиться автоматически при перетаскивании имени поля из окна редактора полей
.
1. Создадим новую форму: Редактирование записи
.
2. В случае перетаскивания поля логического типа, на форме автоматически устанавливается компонента DBCheckBox
, что не всегда удобно.
2.1. Установим на форму компоненту DBRadioGroup
с закладки Data
Control
.
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. Пользователь имеет возможность редактировать записи в таблице напрямую. Чтобы это предотвратить используется свойство компоненты DBGrid
dgEditing
. Нужно выделить DBGrid
1
и в свойстве Options
►
dgEditing
инспектора объектов поставить false
.
Лабораторная работа № 3
Цели работы:
- Ознакомиться с сортировкой записей в базе данных.
- Поиск полей с помощью методов Locate
и Lookup
;
Сортировка:
Порядок расположения записей в таблице БД может быть неопределенным. По умолчанию записи не отсортированы или сортируются, например, для таблиц Paradox
по ключевым полям, а для таблиц dBase
в порядке их поступления в файл таблицы.
С отсортированными записями набора данных работать более удобно. Сортировка заключается в упорядочивании записей по определенному полю в порядке возрастания или убывания содержащихся в нем записей.
Сортировка набора данных TTable
выполняется автоматически по текущему индексу. При смене индекса происходит переупорядочивание записей. Таким образом, возможна по полям, для которых создан индекс. Для сортировки по нескольким полям нужно создать индекс, включающий эти поля.
Задать индекс, по которому выполняется сортировка записей, можно с помощью свойств:
· IndexName
– указывается имя индекса, установленное при его создании;
· IndexFieldName
– указываются имена полей, образующий соответствующий индекс.
- Откроем приложение.
- Добавим на форму компоненты ComboBox
и Button
.
- В свойстве Items
компоненты ComboBox
запишем параметры сортировки: Фамилия, Специальность, Курс, Дата рождения, Номер зачетки.
Условия сортировки задаются вторичными индексами. То есть сортировка по фамилии происходит по вторичному ключу IDFio
так как в него первым входит поле SFio
. Для того, чтобы сортировка проходила по выбранным параметрам необходимо вхождение соответствующих полей в разные вторичные ключи.
- Текст процедуры для события 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;
const
ResultFields: String
): Variant;
В параметре ResultFields
перечисляются поля, значения которых требуется получить в случае успешного поиска. Тип результата – Variant
или вариантный массив.
1. Добавить на главную форму новую кнопку «Поиск».
2. Открыть новую форму и ввести компоненты как показано на рисунке. Эта форма вызывается нажатием кнопки поиска на главной форме.
3. Поиск будет происходить по фамилии введенной в компоненте Edit1 после нажатия кнопки на форме «Поиск методом Lookup».
procedure TForm5.Button1Click(Sender: TObject);
var LookupResult: Variant;
begin
LookupResult:=Form1.Table1.Lookup('SFio', Edit1.Text, 'SData; SOsn; SNom; SSpec; SKurs'); //
ищем
поля
'
Дата
рождения
'
//’
Основание
’, ’
Номер
зачетки
’, ’
Специальность
’, ’
Курс
’
if VarIsArray (LookupResult) then
begin
Edit2.Text:=LookupResult[0]; //
записывает
значения
Edit3.Text:=LookupResult[1]; //
в
искомых
полях
в
Edit4.Text:=LookupResult[2]; //
соответствующие
Edit5.Text:=LookupResult[3]; //
компоненты
if Edit5.Text='False' then
Edit5.Text:='
Физика
' //
поиск
полей
логического
типа
else Edit5.Text:='Математика';
Edit6.Text:=LookupResult[4];
end
;
end
;
Лабораторная работа № 4
Цели:
Ознакомиться с фильтрацией записей.
Фильтрацию можно отнести к одному из методов поиска. Потому что фильтрация – выбор из набора данных только тех записей, которые удовлетворяют конкретным условиям. Например, можно указать отображение только записей, в которых поле «Фамилия
» содержит значение «Иванов
». Применение фильтра к набору данных определяется свойством Filtered
логического типа. Значение True
определяет применение в качестве фильтра выражения, указанного в свойстве Filter
:
Поле [Оператор сравнения] ‘Значение’
Например, если отобразить все записи, в которых поле «Фамилия
» равно значению «Сидоров», то нужно указать:
Table1.Filter:=’Фамилия=’’Сидоров’’’;
Фильтрация записей:
1. Открыть приложение.
2. Добавить на форму компоненту TEdit
.
3. Текст процедуры для события OnChange
:
begin
Table1.Filtered:=true; //
включение
фильтрации
Table1.Filter:='SNom = ‘+Edit2.Text;
//
задает
критерий
фильтрации
end;
4. Этот способ фильтрации пригоден только для числовых полей.
5. При применении фильтра можно указать свойства:
a. foCaseInsensitive
– нечувствительность к регистру букв;
b. foNoPartialCompare
– поиск на точное соответствие.
6. Для фильтрации текстовых полей, например по полю «Фамилия» необходимо изменить текст процедуры.
procedure TForm1.Edit2Change(Sender: TObject);
begin
Table1.Filtered:=true;
Table1.Filter:='SFio='+#39+Edit2.Text+'*'+#39;
end;
7. В этом случае фильтрация проходит по текстовому полю. Знак «#39» означает знак апострофа, так как ввод фамилии при использовании фильтра происходит в апострофах. А символ «*» означает любые символы, то есть при вводе только одной буквы на экране появятся все фамилии начинающиеся на букву.
Лабораторная работа № 5
Цели:
1. Усвоить возможность связи таблицам.
Установка связи между таблицами:
Для демонстрации связи между таблицами необходимо создать еще одну таблицу. Создайте таблицу успеваемости студентов. В нее войдут поля: учебный год, сессия (зима или лето), предмет, ФИО преподавателя, дата аттестации по предмету, дата сдачи, оценка.
1. Эта таблица будет дочерней для таблицы Студенты
. В таблице Успеваемость
надо ввести дополнительно числовое поле и определить его вторичным ключом.
2. Разместите таблицу успеваемости на форме Студенты
.
3. В свойстве компоненты Table
2
Master
Source
написать Data
Source
1.
Это означает, что вторая таблица станет дочерней для первой.
4. Двойным щелчком по свойству Master
Fields
вызовем окно FieldLinkDesigner (Дизайнер поля связи):
4. ВыбратьвспискеAvailable Index (
Доступные
индексы
)
изокнаField Link Designer
индексIDGod
(этовторичныйиндексвторойтаблицы).
5. В левом списке Detail
Field
выделить IdU
, а в правом списке Master
Field
(Основа)
выделить Ind
.
6. Нажать на кнопку Add
(Добавить)
и закрыть окно.
7. Таким образом между таблицами установилась связь. Она называется связь один ко многим
.
8. К дочерней таблице добавить кнопки для ввода и редактирования данных также как и для таблицы Студенты
.
Лабораторная работа № 6
Цели работы:
Ознакомиться с возможностью создания отчета.
Создание отчетов:
Отчет — это печатный документ, содержащий записи БД. В Delphi для создания отчетов служит генератор отчетов QuickReport
, содержащий обширный набор компонентов. Компоненты, предназначенные для создания отчетов, находятся на закладке QReport
палитры компонентов.
Главным элементом отчета является компонент-отчет QuickRep
, представляющий собой основу, на которой размещаются другие компоненты. Компонент QuickRep
обычно размещается на отдельной форме, предназначенной для создания отчета.
Свойства компоненты QuickRep
:
· Bands
– здесь указываются компоненты размещаемые в QuickRep
.
· DataSet
– здесь указывается набор данных из которой отчет будет брать данные.
· Frame
– здесь указывается параметры рамки.
· Options
– здесь доступны три параметра. Если FirstPageHeader
равно true
, то заголовок печатается только на первой странице отчета. Если LastPageFooter
равен true
, то нижний колонтитул печатается только на последней странице отчета. Если установить свойство Compression
в true
, то отчет будет сохраняться в сжатом виде.
· ReportTitle
– здесь находится заголовок печатаемого документа.
· SnapToGrid
– нужно ли выравнивать компоненты по установленной сетке.
· Zoom
– масштаб отображения данных.
Настройку параметров отчета можно выполнить с помощью окна Report
Settings
, вызываемый двойным щелчком мыши по компоненте QuckRep
. Предпочтительно пользоваться именно этим окном, так как здесь всегда можно просмотреть будущий результат.
- Открыть приложение «Студенты
».
- Добавить на главную форму кнопку «Создание
отчета
».
- Создать новую форму «Отчет
», которая будет вызываться нажатием на кнопку «Создание отчета
».
- На форму установить компоненту QuickRep
с закладки QReport
. Выделить этот компонент и в объектном инспекторе включить параметры HasTitle
и HasDetail
свойства Bands
.
- Расположим компоненты в секциях QuickRep1
, которые будут отображать нужную информацию отчета. На закладке QReport
палитры компонентов доступны следующие компоненты, которые можно расположить в этих разделах:
- QRLabel
– надпись. Этот компонент похож на стандартный компонент TLabel
и просто отображает нужные данные.
- QRDBText
– данные. Этот компонент тоже похож на TLabel
, только он предназначен для отображения значения какого либо поля из базы данных.
- QRSysData
– системная информация. Это опять копия TLabel
только с возможностью отображать системную информацию – дату, время, номер страницы, номер строки в таблицы, общее количество страниц и т.д.
- QRImage
– картинка. Компонент схожий с TImage
.
- Увеличить область заголовка Title
. В верхний угол поместите один компонент QRSysData
. Выделить его и в свойстве Data
выбрать значение qrsDateTime
. Теперь этот компонент будет отображать в правом, верхнем углу дату распечатки документа.
- В центре области Tittle
установить компонент QRLabel
, увеличь шрифт в свойстве Font
и написать в свойстве Caption
текст «Студенты
».
- Расположить в области Tittle
компоненты QRLabel
и дать им заголовки: ФИО, Дата рождения, Номер зачетки, Специальность, Курс.
- Перейти к области Detail
. Под заголовками поставить пять компонентов QRDBText
. Установить в свойстве DataSet
компонентов QRDBText
набор данных - Form
1.
Table
1
,
а в свойстве DataField
для QRDBText
1
указать SFio
. У всех остальных компонентов QRDBText
указать соответствующие имена полей.
Перейти в главный модуль и по нажатию кнопки “Печать” написать следующий код.
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
Form4.QuickRep1.Preview; //
вызывается
метод
Preview
//
компонента
QuickRep
. Этот метод показывает окно
//
предварительного просмотра созданного документа.
е
nd
;
Запустить программу, выделить какую-нибудь строку и нажать кнопку печати. Откроется окно предварительного просмотра.
- Выделить компонент QuickRep1
и в свойстве DataSet
указать таблицу Form
1.Table1
.
- Если сделать это, то компонент QuickRep1
автоматически будет перебирать все записи из этой таблицы и использовать их в компонентах, которые стоят в блоке DetailBand1
.
- После этого в отчете появятся все записи таблицы:
- Установить на форму отчета компонент – QRSubDetail
с закладки QReport
. Этот компонент предназначен для перебора данных относящихся к подчиненным таблицам.
- Установить следующие свойства: DataSet
– Form
1.Table2
, чтобы связать блок с таблицей Uspevaemost
.
db
, которая является подчиненной к основной Studenti
.
db
.
- В свойстве Master
нужно указать главный компонент с основными данными. Выбрать в этом свойстве QuickRep1
.
- Расположить на компоненте QRSubDetail
компоненты QRDBText
в свойстве указав, к каким полям подчиненной таблицы они обращаются.
- Получится следующий вид отчета:
|