Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП 01. Базы данных. Часть 2 — копия.doc
Скачиваний:
33
Добавлен:
09.12.2018
Размер:
637.44 Кб
Скачать

1.4.2. Доступ к записям

При доступе к записям следует убедиться в том, что НД содержит записи. Для этого нужно вызвать метод IsEmpty, который возвращает False, если в НД есть хотя бы одна запись. После использования или редактирования текущей записи переход к следующей реализуется методами FindNext или Next. Например:

Table1.Open;

if not Table1.IsEmpty then

repeat

{используем или редактируем информацию из текущей записи}

until not Table1.FindNext;

Table1.Close;

или

Table1.Open;

while not table1.EOF do

begin

{используем или редактируем информацию из текущей записи}

Table1.Next;

end;

Table1.Close;

Перед редактированием текущей записи НД необходимо перевести в состояние dsEdit методом Edit, а после редактирования сохранить сделанные изменения, вызвав метод Post:

Table1.Edit;

Table1[‘Number’]:=12345;

Table1[‘Name’]:=’Иванов И.И.’;

Table1.Post;

В квадратных скобках после имени компонента Table1 указываются имена полей таблицы. По такой же схеме осуществляется вставка или добавление новой записи, при этом вместо Edit вызывается Insert (вставка записи) или Append (добавление записи).

Table1.Insert;

Table1[‘Number’]:=Edit1.Text;

Table1[‘Name’]:=Edit2.Text;

Table1[‘Children’]:=Edit3.Text;

Table1.Post;

Вместо этого можно использовать единственный оператор, вызвав метод InsertRecord или AppendRecord (метод Post в этом случае вызывать не требуется):

Table1.InsertRecord([Edit1.Text, Edit2.Text, Edit3.Text]);

Вставленная запись становится текущей.

1.4.3. Навигация по набору данных

С помощью методов First, Last, Next, Prior, MoveBy, FindFirst, FindLast, FindNext, FindPrior можно изменять положение курсора и, следовательно, выбирать нужную запись.

Для выполнения действий при последовательном переборе записей, начиная от некоторой стартовой записи и до конца набора данных, используют циклы while…do или repeat…until:

with Table1 do begin

First;

while not EOF do {пока не

достигнут конец таблицы}

begin

{действия над очередной записью}

Next;

end;

end;

with Table1 do

begin

First;

repeat

{действия над

очередной записью}

until not FindNext;

end;

1.4.4. Поиск записей в наборах данных

Метод Locate

Метод Locate ищет первую запись, удовлетворяющую критерию поиска, и если такая запись найдена, делает ее текущей. В этом случае в качестве результата возвращается True. Если запись не найдена, возвращается False и курсор не меняет своего положения.

function Locate(const KeyFields: String;

const KeyValues:Variant; Options: TLocateOptions):Boolean;

Список KeyFields указывает поле или несколько полей, по которым ведется поиск. В случае нескольких полей их названия разделяются точкой с запятой. Критерии поиска задаются в вариантном массиве KeyValues так, что i-ое значение в KeyValues ставится в соответствие i-му полю в KeyFields. Параметр Options позволяет указать необязательные режимы поиска:

  • loCaseInsensitive — поиск ведется без учета возможной разницы регистра букв в строковых полях и в критерии поиска;

  • loPartialKey — запись считается удовлетворяющей условию поиска, если она содержит часть строки поиска.

Метод Lookup

Метод Lookup находит запись, удовлетворяющую условию поиска, но не делает ее текущей, а возвращает значение некоторых ее полей. В отличие от Locate, Lookup осуществляет поиск только на точное соответствие критерию поиска значения поля поиска записи.

function Lookup(const KeyFields:String; const KeyValues:Variant; const ResultFields:string):Variant;

В ResultFields перечисляются поля, значения которых требуется получить в случае успешного поиска.

Пример. Задаем в редакторе edName (компонент Edit) имя клиента, ищем это имя в поле Name_cl и в качестве результата указываем значения полей name_cl и dohod_cl:

var

LookupResult:Variant;

begin

LookupResult:=Table1.Lookup(‘Name_cl’, edName.text,

’Name_cl;Dohod_cl’);

if VarType(LookUpResult)=varNull then

Showmessage(‘Такого клиента нет в базе’) else

if VarIsArray(LookupResult) then

begin

stName.Caption:=LookupResult[0];

stDohod.Caption:=LookupResult[1];

end;

end;

Свойство Filter

Свойство Filter задает критерий фильтрации. В синтаксисе можно использовать обычные операции отношения и логические операторы AND, NOT и OR, например:

(KOD_ZAKAZA>0) and (KOLVO_TOVARA<30)

Как только свойству Filtered будет присвоено значение True, в НД останутся только те записи, которые удовлетворяют критерию фильтрации. Строку критерия фильтрации можно ввести во время выполнения программы или на этапе разработки. Например, с помощью такого обработчика события OnClick компонента Button критерий фильтрации считывается из редактора Edit и помещается в свойство Filter компонента Table.

procedure TForm1.Button1Click(Sender: TObject);

begin

if Edit1.Text<>’’ then

with Table1 do

begin

Filter:=Edit1.Text;

Filtered:=True;

end;

end;

C помощью свойства FilterOptions программист может определить дополнительные условия фильтрации строковых полей:

  • foCaseInsensitive — фильтрация производится без учета разницы в регистре букв;

  • foNoPartialCompare — поиск производится на точное соответствие.