Слайд 2Навигация по набору данных
Существует два способа работы с записями
в НД.
Слайд 31 способ
Способ, основанный на использовании операторов SQL, предполагает оперирование группами
записей. Именно так работают SQL-операторы группового обновления НД UPDATE, INSERT,
DELETE и выборки групп записей SELECT. Записи, удовлетворяющие некоторому условию, выдаются группами; даже если условию удовлетворяет только одна запись, считается, что в данном случае группа состоит из одной записи
Слайд 42 способ
Состоит в оперировании единичными записями. Если необходимо изменить, добавить
или удалить группу записей, необходимая операция выполняется для каждой из
таких записей. Для этого такие записи в НД нужно отыскать, для чего применяются навигационные методы. Они всегда работают с единичной записью и связанны с понятием курсора НД.
Слайд 5Понятие курсора набора данных.
Под курсором набора данных понимается указатель
текущей записи в конкретном наборе данных. Текущая запись - та
запись, над которой в данный момент времени можно выполнять какие-либо операции (удаление, изменение, чтение значений, содержащихся в записи полей).
Слайд 6Существует 5 методов для изменения курсора НД:
Слайд 7Определение начала и конца набора данных
Свойство property BOF: Boolean;
Возвращает True, если курсор установлен на первую запись в наборе
данных.
Слайд 8Свойство property EOF: Boolean;
извращает True, если курсор установлен на последнюю
запись в наборе данных.
Слайд 9Порядок следования и порядок сортировки записей
Т.К. набор данных -понятие
логическое, а не физическое, то для TTable последовательность расположения записей
в наборе данных определяется используемьым индексом, обуславливающим сортировку
Слайд 10Начиная работать с НД, имеющим одну сортировку записей, мы можем
затем переопределить сортировку, и записи "перестроятся" в соответствии с новой
сортировкой, т.е. логический порядок их следования изменится.
Слайд 11Пример
Пусть, например, имеется ТБД, состоящая из 2 полей: Name (Фамилия
сотрудника) и Oklad (Оклад). Пусть в ТБД имеется 5 записей,
которые вводились следующим образом и. следовательно, в таком порядке и хранятся:
Слайд 13Пусть данная ТБД проиндексирована по 2 индексам. Первый - по
возрастанию поля Name, второй - по возрастанию поля Oklad.
Слайд 14Если порядок прохождения записей определяется
индексом по полю Name (Tablel.IndexfieldNames
:= 'Name'),
получим следующий НД
Слайд 15Если порядок прохождения записей определяется индексом по полю Oklad. получим
следующий НД
Слайд 16Для реализации этих действий
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.IndexFieldNames:='Name'
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.IndexFieldNames:='Oklad'
end;
Слайд 18Обработчик нажатия клавиши Button3
procedure TForm1.Button3Click(Sender: TObject);
begin
Table1.First; (*Навигация по набору вниз*)
while
not Table1.Eof do begin
Table1.Edit;
Table1Oklad.Value:=Table1Oklad.Value-1000 ;
Table1.Post;
Table1.Next;
end;
end;
Слайд 19procedure TForm1.Button3Click(Sender: TObject);
begin
Table1.Last; (*Навигация по набору вверх*)
while not Table1.Bof do
begin
Table1.Edit;
Table1Oklad.Value:=Table1Oklad.Value+1000 ;
Table1.Post;
Table1.Prior;
end;
end;
Слайд 20Метод Locate
Метод Locate ищет первую запись, удовлетворяющую критерию поиска, и
если такая запись найдена, делает ее текущей. В этом случае
в качестве результата возвращается True. Если поиск был неуспешен, возвращается False.
Слайд 21function Locate(const KeyFields: string; const Key Values: Variant);
Список KeyFields указывает
поле или несколько полей, по которым ведется поиск, в виде
строкового выражения. В случае нескольких поисковых полей их названия разделяются точкой с запятой.
Критерии поиска задаются в вариантном массиве Key Values так, что i-e значение в Key Values ставится в соответствие i-му полю в KeyFields. В случае поиска по одному полю в Key Values указывается одно значение.
Слайд 22Options позволяет указать необязательные значения режимов поиска:
loCaselnsensilive - поиск ведется
без учета высоты букв, т.е. если в Key Values указано
'принтер', а в некоторой записи в данном поле встретилось 'Принтер' или 'ПРИНТЕР', запись считается удовлетворяющей условию поиска;
loPartialKey - запись считается удовлетворяющей условию поиска, если она содержит часть поискового контекста; например, удовлетворяющими контексту 'Ма' будут признаны записи с значениями в искомом поле "Машин ', 'Макаров' и т.д.
Слайд 24procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Locate( 'FIO','Си',[LoPartialKey]);
end;
Слайд 26procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.First;
WHILE Table1.Locate('Oklad', Edit1.Text,[]) do Table1.Delete;
end;
Можно упростить, используя оператор
With
Слайд 27procedure TForm1.Button1Click(Sender: TObject);
begin
WITH Table1 do begin
First;
WHILE Locate('Oklad', Edit1.Text,[]) do Delete;
END;
//with
end;
Слайд 28TQuery
Реализует набор данных, источником данных для которого являются одна или
несколько таблиц БД. Структура записи НД, состав НД определяются SQL-запросом
(оператор SELECT). Кроме выдачи НД, используется для групповых операций обновления, добавления или удаления в ТБД, а также может выполнять любые действия.
При помощи TQuery можно реализовывать как статические, так и динамические (изменяющиеся в процессе выполнения приложения) SQL-запросы.
Слайд 29TIndexDefs
Позволяет получить информацию об индексах, определенных для данной ТБД, и
об индексных полях для текущего индекса; реализует поиск индекса по
группе индексных полей.
Слайд 30TFieldDefs
Позволяет получить информацию о полях, определенных в составе записей данной
ТБД.
Слайд 31TField
Реализует поле НД. Помимо полей, физически определенных в ТБД и
включенных в состав конкретного НД, компонент TField создается для каждого
вычисляемого поля или поля, возвращающего значение из другого НД (lookup), а также для результатов вычисления выражений и агрегатных функций в SQL-запросах.
Слайд 32TBatchMove
Позволяет осуществлять копирование и перенесение записей из одних НД в
другие.
Слайд 33Обзор визуальных компонентов для работы с базами данных
TDBText
Показывает "только для
чтения" значение поля текущей записи НД. (страница компонентов DataControls)
Слайд 34TDBGrid
Показывает содержимое полей НД в "табличном" виде, когда записям соответствуют
строки, полям - столбцы
Слайд 35Свойство DataSource компонента TDBGrid содержит имя компонента TDataSource, который ссылается
на соответствующий НД (компоненты TTable или TQuery). Изменяя значение свойства
DataSource во время выполнения, можно использовать один компонент TDBGrid для показа содержимого различных наборов данных. При продуманном сценарии диалога с пользователем и интерфейса приложения это может существенно минимизировать объем и конструктивную сложность создаваемых приложений
Слайд 36Для определения состава столбцов в TDBGrid можно использовать редактор столбцов
(Columns Editor). В этом случае используются только те столбцы, которые
созданы редакторе столбцов компонента TDBGrid, и принимаются во внимание только их характеристики. Порядок следования столбцов в сетке TDBGrid определяется порядком следования определений столбцов редакторе столбцов.
Слайд 38TDBEdit (страница DataControls)
Обеспечивает просмотр и изменение значения поля текущей
записи НД. Поля - любого типа, кроме полей комментариев и
BLOB
Свойство dataSource связ. с ист данных
Свойство DataField с названием поля
Слайд 40TDBCheckBox (страница DataControls)
Обеспечивает просмотр и изменение значения поля типа
Boolean текущей записи НД.
Слайд 42TDBRadioGroup
Обеспечивает возможность выбора значения для поля, которое может содержать фиксированное
число вариантов значений. Значения показываются в виде радиокнопок.
Слайд 46TDBMemo
Позволяет просматривать и корректировать значение мемо-поля (поля комментария) в режиме
текстового редактора.
Слайд 50. Как связаны друг с другом компоненты для работы с
базами данных
Визуальные и невизуальные компоненты связываются друг с другом при
помощи свойств. Значения этих свойств обычно устанавливаются на этапе разработки приложения, но могут устанавливаться и во время выполнения приложения.
Слайд 51Первым уровнем являются псевдонимы BDE, устанавливаемые при помощи ВDE Administrator.
На псевдоним ссылается компонент типа "набор данных" (компоненты TTable и
Tquery). Имя псевдонима БД записывается как значение свойства DataBaseName этих компонентов.
Слайд 52Компонент TTable работает с записями одной физической таблицы БД. Поэтому
свойство TableName этого компонента хранит имя этой таблицы БД.
Слайд 53Компонент TQuery в общем случае возвращает набор данных, записи которого
получены в результате выполнения запроса к одной или нескольким таблицам
БД. Имена таблиц и условия выборки из них записей устанавливаются в запросе (SQL-оператор SELECT), который хранится в свойстве SQL компонента TQuery.
Слайд 54Имя любого компонента типа "набор данных" хранится в его свойстве
Name. Свойство Active указывает, активен ли (открыт, готов для доступа
к данным) соответствующий набор данных (значение True) или не активен (значение False). Открытие НД производится на этапе разработки приложения и во время выполнения установкой свойства Active в значение True, а также во время выполнения - при помощи метода Open этого набора данных.
Слайд 55Для связи визуальных и невизуальных компонентов для работы с данными
используется компонент "промежуточного уровня", TDataSource (источник данных). Его свойство DataSet
содержит имя соответствующего компонента типа "набор данных".
Слайд 56Визуальные компоненты разделяются на работающие с множеством записей набора данных
(например, TDBGrid) и с отдельным полем (TDBEdit и другие). Соответственно,
компоненты, работающие с множеством записей, ссылаются в своем свойстве DataSource только на имя компонента TDataSource;
Слайд 57компоненты, работающие с конкретным полем, кроме этого ссылаются на имя
поля НД (свойство FieldName). Список доступных полей набора данных хранится
в свойстве Fields соответствующего компонента типа "набор данных".
Слайд 58. Использование компонента TQuery для формирования набора данных из одной
или нескольких таблиц
Расположим в форме компонент TQuery (страница Data Access
палитра компонентов). По умолчанию его имя Query1. Установим его свойство DatabaseName в PROBA. Расположим в форме компонент TDataSource (имя DataSource1). Установим его свойство DataSet в значение Queryl. Расположим в форме компонент TDBGrid. Установим его свойство DataSource в значение DataSourcel.
Слайд 59В инспекторе объектов для компонента Queryl найдем свойство SQL и
нажмем кнопку эллипса. Затем в появившемся окне редактора наберем текст
SQL-запроса
SELECT P.DatPrih, P.Kolvo
FROM Prihod P