Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

BD6_Rabota_s_polyami

.pdf
Скачиваний:
17
Добавлен:
09.03.2016
Размер:
321.25 Кб
Скачать

1

Работа с полями – компонент TField

Компонент TField позволяет обращаться к полям таблиц баз данных. Каждый набор данных состоит из записей, а записи – из полей. В Delphi имеется возможность использовать при работе с НД или все поля, определенные в данной ТБД на текущий момент, или использовать только часть существующих полей.

Существует два способа задания состава полей для НД:

Первый состоит в том, что после создания НД (компонент TTable) состав полей не изменяется.

Второй способ заключается в том, что для данного НД поля как компоненты TField добавляются в форму с помощью редактора полей Delphi. К таким полям можно обращаться через его имя, определяемое в свойстве Name компонента TField, соответствующего данному полю. По умолчанию, при добавлении в форму компонента TField, его имя генерируется следующим образом: берется имя НВ (т.е. значение свойства Name компонента TTable) и к нему добавляется имя поля, взятое из структуры ТБД. Например, поле с именем FIO, используемое в НД Stud, при добавлении в форму средствами редактора полей, получит имя StudFIO. Экземпляр StudFIO компонента TField трактуется не как конкретное значение, которое принимает поле FIO в конкретной строке ТБД, а как весь столбец набора данных, обладающий едиными свойствами, методами и событиями для всех записей набора данных.

Если хотя бы для одного поля НД создан компонент TField, первый принцип, т.е. принцип использования всех полей ТБД отвергается. В НД будут считаться определенными только те поля, для которых созданы компоненты TField, все остальные поля – отвергаться как несуществующие для данного НД. К несуществующим полям обратиться из данного набора данных нельзя.

Вновь вернуться к принципу использования всех полей ТБД можно удалив в редакторе полей все определенные ранее TField или добавив в него недостающие поля.

Для того, чтобы определить один или несколько компонентов TField, нужно:

1.Выбрать набор данных (компонент TTable).

2.Нажать правую кнопку мыши.

3.Во всплывающем меню выбрать режим Field Editior (запуская тем самым редактор

полей).

4.Вновь нажать правую кнопку мыши и во всплывающем меню выбрать Add Fields.

5.В появившемся списке полей ТБД выбрать необходимые. Для каждого из указанных полей будет создан компонент TField.

6.Если необходимо изменить свойства конкретного поля или написать обработчик события, необходимо в редакторе полей выбрать нужное поле и, используя инспектор объектов, установить значение в свойство или определить обработчик события.

Обращение к полям и их значениям

Способы обращения к полям:

1.Если полю соответствует компонент TField – через имя данного компонента, которое определяется свойством Name:

Table1FIO.AsString:=’Иванов’; Table1FIO.Value:=’Иванов’;

2.Используя метод FieldByName (‘Имя поля’) набора данных:

Table1.FieldByName(‘FIO’).AsString:=’Иванов’;

Table1.FieldByName(‘FIO’).Value:=’Иванов’;

3. Используя свойство Fields[индекс] набора данных. Индекс является порядковым номером поля в определении ТБД. Отсчет начинается с 0.

Table1.Fields[0].AsString:=’Иванов’; Table1.Fields[0].Value:=’Иванов’;

2

4. Используя свойство набора данных FieldValues[‘имя поля’]. Это свойство позволяет обращаться к полю через его имя:

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

Поскольку свойство FieldValues принимается для набора данных по умолчанию, его имя при обращении к полю можно опустить:

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

Более предпочтительным считается обращение к полю через его имя или через метод FieldByName, поскольку в этом случае мы обращается к конкретному полю по его имени.

Менее предпочтительным является обращение к полю через свойство набора данных Fields[индекс]. Если поле FIO было объявлено в ТБД вторым (Fields[1]), а затем удалено из структуры ТБД, обращением Fields[1] в программном коде будет воспринято как обращение в физически второму полю в ТБД. Этом полем будет третье поле, следовавшее за FIO перед тем, как FIO было удалено из структуры ТБД. После удаления FIO третье поле станет по счету вторым.

Обращение к значению поля

К значению поля можно обратиться с помощью свойств Value и AsNNN.

1. Свойcтво Value. Возвращает значения следующих типов: Variant (все компоненты), String, LongInt, Double, Boolean, TDateTime.

Var n:integer;

N:=Table1Number.Value;

2. Обращение к значению поля через свойство AsNNN. Существуют следующие свойства приведения типов полей: AsBoolean, AsDateTime, AsFloat, AsInteger, AsString, AsVariant/

Каждое из этих свойств приводит значение поля к соответствующему типу данных. Edit1.Text:=Table1Number.AsString;

Создание вычисляемых полей

1. В редакторе полей создать новое поле, пометив его как Calculated. Для этого нужно сделать текущим (при помощи мыши) необходимый НД, нажать правую кнопку мыши, выбрать в меню Field Editor и снова нажать правую кнопку мыши и выбрать в меню New Field. В окне диалога необходимо указать имя поля, его тип и для строковых полей – длину. Для нового поля будет создать компонент TField, доступ к которому можно осуществить в редакторе полей.

3

2. Для компонента НД, к которому принадлежит вычисляемое поле. Необходимо определить обработчик события OnCalcFields.

procedure TForm_Calc.Table1CalcFields(DataSet: TDataSet); begin

Table1Srball.AsFloat:=(Table1b1.Value+Table1b2.Value+Table1b3.Value)/3;

Table1Sum.AsInteger:=Table1b1.Value+Table1b2.Value+Table1b3.Value;

end;

Если свойство набора данных AutoCalcFields установлено в True, событие OnCalcFields наступает также и при модификации значений невычисляемых полей в режимах dsInsert и dsEdit данного НД.

Создание полей выбора данных (lookup-полей)

Поля выбора одного набора данных содержат значения из другого набора данных, связанного по ключу с НД, к которому принадлежит поле выбора данных. Поле выбора данных всегда доступно только для чтения и не может быть одновременно полем выбора данных и вычисляемым полем. Реляционное отношение НД, служащего источником значений для поля выбора данных и НД, к которому оно принадлежит, есть “один-ко-многим”. Это значит, что на один вариант значения в наборе данных-источнике должно приходится одно или несколько связанных значений в НД, к которому принадлежит поле выбора.

Для определения поля набора данных необходимо создать новое поле в редакторе полей, установив радио-группу Field Type в значение Lookup. Затем установить значения свойств:

DataSet – имя НД–источника значений для поля выбора данных

Key Fields – индексные поля набора данных – владельца поля выбора данных. По этим полям НД-владелец соединяется с НД-источником значений поля выбора данных. Если в индексе имеется несколько полей, они перечисляются через точку с запятой

Lookup Fields – индексные поля НД-источника значений для поля выбора. По значениям этих индексных полей устанавливается связь набора-источника со значениями индексных полей НД-владельца поля выбора. Если в индексе имеется несколько полей, они перечисляются через точку с запятой

Result Field – поле набора данных источника, возвращаемое в качестве результата. Необходимо следить, чтобы тип вновь создаваемого поля и поля результата совпадали.

Свойство Lookup в инспекторе объектов должно быть установлено в True.

Общие принципы работы с наборами данных

Под набором данных в Delphi понимается группа записей из одной или нескольких ТБД, доступная для использования через компоненты TTable и TQuery.

Компоненты TTable и TQuery имеют общие свойства, методы и события. При этом TTable и TQuery называются одним общим термином ‘набор данных’.

Набор данных TTable содержит записи, источником которых может быть только одна ТБД.

Набор данных TQuery содержит записи, источником которых могут быть несколько ТБД. Набор данных формируется так: выполняется SQL-запрос, представленный оператором

Select, и в качестве НД возвращаются записи из таблиц-источников, удовлетворяющие определенным условиям.

ТБД-источники перечисляются в разделе FROM оператора SELECT. Условия выборки записываются в разделе WHERE.

Записи результирующего НД состоят из полей, перечисленных после ключевого слова SELECT (или всех полей, если указан символ *).

SELECT FIO, SRBALL FROM STUD

Where (SRBALL>3)

4

Состояния набора данных

НД могут находится в одном из 6 состояний: dsInactive – НД закрыт

dsBrowse – состояние по умолчанию для открытого НД. Показывает, что записи просматриваются, но в данный момент не изменяются

dsEdit – НД находится в состоянии редактирования текущей записи dsInsert – НД находится в состоянии добавления новой записи

dsSetKey – НД находится в состоянии поиска записи по заданному критерию. По окончании поиска НД переходит в состояние dsBrowse.

dsCalcFields– выполняется установление значений вычисляемых полей. В данном режиме изменения в НД вносится не могут.

dsFilter – обрабатывается фильтрация записей в НД при свойстве Filtered, установленном в

True.

if Table1.State=dsInactive then Table1.Active:=True;

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

Существует два способа работы с записями в НД.

Способ, основанный на использовании операторов SQL, предполагает оперирование группами записей. Записи, удовлетворяющие некоторому условию, выдаются группами.

Второй способ состоит в оперировании единичными записями. Если необходимо изменить, добавить или удалить группу записей, необходимая операция выполняется для каждой из таких записей. Для этого такие записи в НД нужно отыскать, для чего применяются навигационные методы. Они всегда работают с единичной записью и связаны с понятием курсора НД.

Под курсором набора данных понимается указатель текущей записи в каждом конкретном наборе данных. Текущая запись – та запись, над которой в данный момент времени можно выполнять некоторые операции (удаление, изменение и т.д.)

Существует 5 методов для изменения курсора НД:

First – устанавливает курсор на первую запись в наборе данных. Last – устанавливает курсор на последнюю запись в наборе данных. Next – перемещает курсор на следующую запись в наборе данных Prior – перемещает курсор на предыдущую запись в наборе данных

MoveBy(n) – перемещает курсор на n записей в концу набора данных (n>0) или к началу набора (n<0).

Для определения начала и конца набора данных служат свойства:

BOF –возвращает True, если курсор установлен на первую запись в наборе данных EOF –возвращает True, если курсор установлен на последнюю запись в наборе данных

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

Для выполнения действий, начиная с некоторой стартовой записи и до конца набора данных, используется цикл while not EOF:

With Table1 do Begin

First;

While not EOF do Begin

{какие-либо действия} Next;

End;

End;

5

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

Для выполнения действий, начиная с некоторой стартовой записи и до начала набора данных, используется цикл while not BOF:

With Table1 do Begin

Last;

While not BOF do Begin

{какие-либо действия} Prior;

End;

End;

Спонтанные перемещения по набору данных

В одном программном блоке можно использовать методы Next, Prior, MoveBy. При этом нужно помнить, что применение метода Edit, когда изменяется значение индексного поля, может переместить курсор на записи вверх или вниз, если по нему производится сортировка.

Table1.IndexFieldnames:=’Oklad’; With Table1 do

Begin

Fist;

While not BOF do Begin

Edit;

TableOklad.value:=tableOklad.Value+1000;

Post;

Next;

End;

End;

Свойство RecordCount:Integer возвращает текущее число записей в НД. N:=Table1.RecordCount;

Реакция на изменение курсора набора данных

Событие OnDataChange (компонент DataSource) возникает всякий раз при изменении курсора НД, т.е. при переходе к новой текущей записи. Это событие возникает, когда курсор БД уже находится на новой записи.

Событие происходит и в режимах dsInsert и dsEdit:

при изменении какого-либо поля;

при первом перемещении с измененного поля на другое поле.

Два события компонента типа "набор данных" также происходят при переходе к новой записи:

property BeforeScroll: TDataSetNotifyEventl;

Событие наступает перед переходом на другую запись в наборе данных. property AfterScroll: TDataSetNotifyEventl;

Событие наступает после перехода на другую запись в наборе данных.

Временное отключение визуализации при работе с НД

При выполнении действий с НД, влекущих за собой частое изменение местоположения курсора БД, в визуальном компоненте, показывающем записи (например. TDBGrid) или текущую запись (TDBEdit и др.). будет возникать эффект "прокрутки" записей. Он не всем нравится. Кроме этого, при смене местоположения курсора БД (т.е. при смене текущей записи НД, необходимо время для отражения произошедших изменений в визуальном компоненте.

6

Для устранения данной проблемы имеются методы procedure DisableControls;

procedure EnableControls;

Первый отключает связь с визуальным компонентом, а второй восстанавливает ее. Например, при последовательном переборе записей НД, . произведенном таким образом:

WITH Tablel do begin DisableControls; First;

WHILE not EOF do begin

{Какие-либо действия}

Next;

END;

EnableControls;

END;

в таблице компонента DBGridl не будет видно эффекта прокрутки записей. Наоборот, у пользователя возникнет иллюзия, что курсор БД сразу переустановился с текущей записи набора данных на его последнюю запись.

Внесение изменений в НД Свойства, запрещающие или разрешающие изменять записи в НД

Свойство

property CanModify: Boolean:

набора данных определяет, может ли НД переводиться в состояние dsInsert и dsEdit (CanModify=True) или не может (CanModify=False). Это свойство зависит от значения свойства ReadOnly набора данных. Если ReadOnly=True, CanModify автоматически переводится в False. Когда ReadOnly=False, CanModify может принимать значения как True, так и False, устанавливая таким образом возможность изменения НД в зависимости от каких-либо условий.

Свойство AutoEdit компонента TDataSourse, связанного с данным НД, определяет, возможен ли (True) автоматический перевод НД в состояние dsEdit, или невозможен (False). В последнем случае для изменения НД программа должна вызвать метод Edit . Свойство AutoEdit не влияет на возможность перевода в состояние dsInsert. Для того, чтобы запретить НД переход в режим dsInsert, достаточно либо сделать НД открытым только для чтения (свойство НД ReadOnly =True), либо установить режим НД Readonly=True для полей, входящих в состав первичного ключа. В этом случае корректировка записи будет возможна, за исключением указанных полей.

НД автоматически может переводиться в состояние dsInsert или dsEdit, если пользователь в визуальном компоненте, связанном с НД, выполняет определенные действия. Вид этих действий зависит от визуального компонента, связанного с НД.

Например, для перехода в режим dsEdit в компоненте TDBGrid, связанном с набором данных, достаточно изменить значение любого поля; в компонентах TDBEdit или TDBMemo, связанных с отдельными полями НД, следует изменить значение поля, с которым связаны TDBEdit или TDBMemo; для компонента DBNavigator, связанного с данным НД, нужно нажать соответствующую кнопку и т.д.

Изменение текущей записи

Чтобы изменить запись в НД, этот НД нужно перевести методом Edit из состояния dsBrowse в состояние dsEdit, затем произвести изменение значения одного или нескольких полей записи и использовать метод Post для запоминания измененной записи в НД. Post в данном случае при благополучном сходе переводит НД из состояния dsEdit в состояние dsBrowse.

Для отказа от запоминания измененной записи в НД используется метод Cancel. Он также переводит НД из состояния dsEdit в состояние dsBrowse.

Метод Edit

Редактирование записи должно быть разрешено (свойство property ReadOnly: Boolean;

7

должно быть установлено в False). Помимо этого, могут быть запрещены для корректировки отдельные поля записи (когда свойство Readonly соответствуюших компонентов TField установлено в True).

Метод Edit может вызываться:

программно;

автоматически, когда пользователь в визуальном компоненте, связанной с НД. выполняет определенные действия. Вид этих действий зависит от визуального компонента. Автоматический перевод набора данных в режим редактирования должен быть разрешен

свойством AutoEdit соответствующего компонента DataSource (значение True).

Пример. Изменение значения поля Oklad в текущей записи набора данных, запоминание изменений. Новое значение оклада вводится пользователем в поле ввода в форме (компонент TEdit с именем Edit1). Введенное пользователем значение доступно через свойство Edit1.Text. Это свойство строкового типа, поэтому оно должно быть преобразовано в целочисленный вид перед присваиванием его числовому полю Oklad.

WITH Tablel do begin Edit;

FieldByName('Oklad').Value := IntToStr(Editl.Text); Post;

END;

Метод SetFields

Метод

procedure SetFields(const Values: array of const);

объединяет функциональность методов Edit, Post и действий по присваивании значений полям изменяемой записи.

В ходе выполнения метода сначала НД переводится в режим dsEdit. Затем полям записи присваиваются значения, перечисленные в открытом массиве Values. При этом первое значение в списке присваивается первому полю, второе – второму и т.д. Естественно, что значения в списке дожны быть совместимы с теми полями, которым они присваиваются.

Если в списке число значений меньше числа полей записи, те поля, которым "не хватило" значений, сохраняют свое первоначальное значение. Наоборот, если значений больше, чем нужно для заполнения полей, '"лишние" значения теряются.

После успешного присваивания значения полям записи автоматически выполняется метод

Post.

Метод SetFields обычно выполняется после того, как пользователь введет значения в переменные и будет произведен контроль правильности их значений.

Пример.

Tablel.SetFields([‘Петров', 'Бухгалтер']);

Добавление новой записи

Чтобы добавить новую запись в НД, нужно вызвать метод Insert для перевода НД из состояния dsBrowse в состояние dsEdit. Затем производится присваивание значения одному или нескольким полям записи, после чего выполняется метод Post для запоминания новой записи в НД. Post при благополучном исходе переводит НД из состояния dsEdit в состояние dsBrowse.

Для отказа от запоминания новой записи в НД используется метод Cancel. Он также переводит НД из состояния dsEdit в состояние dsBrowse.

Метод Insert

При добавлении записи изменение НД должно быть разрешено (свойство ReadOniv должно быть установлено в False). Помимо этого, могут быть запрещены для изменения отдельные поля записи (когда свойство Readonly соответствующих компонентов TField установлено в True). В этом случае в них нельзя ввести новые значения.

Метод Insert может вызываться программно или автоматически, когда пользователь в визуальном компоненте, связанном с НД, предпринимает соответствующие действия.

8

Пример. Добавление записи

Tablel.Insert;

//установка значений полей добавляемой записи

Table1.Post;

Метод Append

Метод

procedure Append;

аналогичен методу Insert, но он добавляет запись в конец набора данных, в то время как Insert добавляет ее после текущей записи.

Для индексированных НД применение метода Append приводит к тем же последствиям, что и применение метода Insert.

Метод Insert Record

Метод

procedure InsertRecord(const Values: array of const);

объединяет функциональность методов Insert, Post и действий по присваиванию значений полям новой записи.

InsertRecord ([‘Петров', 'Бухгалтер']);

Метод Append Record

Метод

procedure Append Record(const Values: array of const);

отличен от метода InsertRecord только тем, что помещает новую запись не после текущей записи, а вслед за последней записью НД.

Запоминание изменений – метод Post

Выполнение метода Post приводит к запоминанию изменений, сделанных в режиме добавления или изменения записи.

Если НД не находится в режиме dsInsert или dsEdit, применение Post приводит к возбуждению исключительной ситуации. Вызов Post зависит от способа, которым ранее был вызван метод Insert или Edit: программно или автоматически.

Post обычно вызывается автоматически, если пользователь предпринимает соответствующие действия, направленные на запоминание измененной записи в НД. Вид этих действий зависит от визуального компонента, связанного с НД. Например, для компонента TDBGrid, связанного с набором данных, это – переход к другой записи. Для НД, управляемого компонентом TDBNavigator это – нажатие соответствующей экранной клавиши компонента TDBNavigator. Реже изменения в наборе данных, автоматически переведенном в режим редактирования, запоминаются путем программного вызова метода Post.

Метод Post, независимо от того, вызывается он программно или автоматически, может завершиться неудачно. Причиной этого могут послужить неверные значения в соответствующих полях записи. В лучшем случае при возникновении препятствий для выполнения Post запись переводится в состояние, в котором НД находился до выполнения метода (dslnsert или dsEdit).

Отмена сделанных изменений – метод Cancel

Метод Cancel отменяет все изменения, сделанные в записи. Если НД находился в режиме добавления новой записи, запись в НД не добавляется. Если НД находился в режиме изменения записи, изменявшаяся запись в НД не записывается и данные в ней остаются в том состоянии, в котором они находились до перехода в режим dsEdit. Сам НД переводится в режим dsBrowse.

Вызов Cancel зависит от способа, которым ранее был вызван метод Insert I или Edit: программно или автоматически.

Cancel вызывается автоматически, если пользователь предпримет соответствующие действия, направленные на запоминание измененной записи в НД. Вид этих действий зависит от визуального компонента, связанного с НД. Например, для компонента TDBGrid, связанного с

9

набором данных, это нажатие клавиши Esc. Для НД, управляемого компонентом TDBNavigator. это нажатие соответствующей экранной клавиши компонента TDBNavigator.

Оценка изменения записи

Часто бывает необходимо знать, вносились ли в запись изменения в режимах dsInsert или dsEdit. Это актуально в тех случаях, когда внесение изменений в поля записи зависит от какихлибо условий, которые могут наступать или не наступать в разные моменты работы приложения. Свойство НД

property Modified: Boolean;

автоматически устанавливается в True, если значение какого-либо поля записи НД было изменено в режимах dsInsert или dsEdit. Методы Post и Cancel переводят свойство в состояние False.

Пример. В следующем фрагменте запись будет запомнена в НД, только если в нее вносились изменения:

Tablel.Edit;

IF Tabiel.Modified THEN Post ELSE Cancel;

Реакция на изменение данных

Событие OnUpdateData (компонент DataSource) возникает для измененной (или вновь добавляемой) записи, когда выполнен метод Post, но физическое перезаписывание измененной записи в ТБД еще не произошло.

Событие OnValidate (компонент TField) возникает после любого изменения значения поля, произведенного вручную или программно (это относится и к вводу значения в поле при создании новой записи). Это событие служит для контроля правильности значений поля, если на него накладываются какие-либо ограничения. Событие возникает перед выполнением метода Post, физически записывающего измененную запись в ТБД. В случае несоответствия значения поля накладываемым ограничениям выполнение Post (и, следовательно, физическое запоминание в БД записи с неверным полем) можно предотвратить, используя метод Abort или принудительно возбудив исключительную ситуацию raise Exception.Create). Например,

procedure TForml.TableKodlzdeliaValidate(Sender: TField); begin

if TableKodlzdelia.AsInteger > 1000 THEN

raise Exception.Create(Неверное значение кода излелия'); end;

Удаление записи

Удаление текущей записи в наборе данных реализуется методом Delete

Например: Table1.Delete;

Удаление записи может производиться: программно или автоматически, если это предусмотрено в том или ином компоненте.

Необходимо помнить об одной важной особенности. Записи в различных СУБД могут удаляться 2 способами:

пометка записи в ТБД как удаленной. Сама запись физически не удаляется из НД. В зависимости от СУБД новые записи могут записываться на место помеченных как "удаленные" или в конец ТБД. В последнем случае такие ТБД могут "разбухать" до больших размеров, поэтому время от времени для них проводят операцию сжатия, при которой помеченные, как удаленные записи физически уничтожаются, а остальные записи "сдвигаются" вверх, заполняя образовавшиеся пустоты в ТБД.

немедленное удаление записей из ТБД, вследствие чего последующие записи "сдвигаются" вверх, заполняя образовавшиеся в ТБД пустоты.

В Delphi при работе с НД реализован второй метод. Посте удаления записи все оставшиеся записи "сдвигаются" наверх. При удалении одной записи это может быть несущественным, однако, если нужно удалить несколько записей, это способно внести осложнения. Например, пусть требуется удалить все записи в Table 1. Можно было бы предположить, что данную потребность можно реализовать следующим программным кодом:

10

With table1 do Begin

First;

While not EOF do Begin

Delete;

Next;

End;

End;

Однако в действительности этот код приведет к удалению примерно половины записей в Table1. Причина этого лежит в том, что когда мы удаляем запись (например, №3), последующие записи автоматически перемещаются вверх, и поэтому запись, бывшая до удаления следующей (№ 4), становиться текущей (N3). После выполнения метода Next осуществляется переход к записи N 4. Таким образом, записи удаляются через одну.

Удалив ненужный вызов Next, мы сотрем все записи: With table1 do

Begin First;

While not (RecordCount=0) do Delete;

End;

N:= table1. RecordCount;

Чаще всего нужно удалять не все записи НД, а часть записей, удовлетворяющих некоторому условию.

Во-первых, можно воспользоваться временной фильтрацией удаляемых записей в момент группового удаления.

Второй способ состоит в использовании метода Locate, реализующего поиск необходимой записи по точному соответствию значений некоторых полей. Метод Locale указывает поля, по которым ведется поиск, и значения этих полей, по которым нужно найти записи. В нашем случае это поле Otdel и свойство OtdelEdit.Text (компонент TEdit), где содержится наименование отдела, по которому нужно удалить все записи в НД. Если запись с таким значением поля Otdel найдена, Locate зозврашает True, в противном случае false. Как только запись найдена, она удаляется; когда Locale возвратит False, это значит, что все записи с указанным наименованием отдела удалены:

//Удалить все записи с указанным отделом

Procedure Tform1.Button4Click(Sender: TObject); Begin

With Table1 do Begin

First;

With Locate (‘Otdel’, OtdelEdit.Text, []) do Delete;

end;

end;

Для больших НД, а также в процессе удаления в НД меняются индексы, определяющие текущую сортировку, рекомендуется перед реализацией удаления отключать связь НД с управляющими компонентами, а по окончании удаления – включать:

WITH Table1 do begin DisableControls;

EnableControls;

END;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]