Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИОСУ.doc
Скачиваний:
33
Добавлен:
19.03.2015
Размер:
14.55 Mб
Скачать

27. Основные методы модифицируемого набора данных. Добавление и удаление записей и проблемы удаления.

Для рассм-я навигацион. методов необх-мо использ-ть понятия курсора НД (указатель текущей записи в конкретн НД).

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

Procedure First; устан. курсор на 1ую позицию в НД

Last; устан. курсор на последн.

Next; устан. курсор на след. запись

Prior; устан. курсор на предыд. запись

function MoveBy(n:Integer):integer; перемещает курсор на n записей к концу НД, если n>0 и к началу, если n<0.

Св-во BOF, EOF класса TDataSet имеет тип Boolean и показыв. не явл. ли текущ. запись 1ой или последней соотв-но.

Пр.1… Table1.First;

While not Table1.EOF do begin…. Table.Next; end;

Т.к. BDE не способна опред-ть место нахождения курсора в НД возникает потребность проверки момента попадания на 1ую или последн. запись для комфортности работы.

… with ttZakazch do begin

if not BOF then Prior else begin First;end;

Вставка записи.

Вставить запись, как и отредактир-ть ее м. только в модифицирован. набор. Для удволетв-я записи:

-НД перевод. в режим вставки

-задаются знач-я для полей нов. записи

-подтверждается добавление записи или производиться отмена.

4 метода: Insert, InsertRecord, Append, AppendRecord.

Insert вставляет запись, сдвигая вперед текущее состояние курсора.

Append автоматич. вставл. запись в конец.

InsertRecord и Append наполняют запись или строку знач-ями или же в текущую или в конец НД. При присваивании новых знач-й отдельным полям или записи в целом можно обратиться к методу Post или SetFields или отменить объявлен. действие.

….

zakazchik.insert;

zakazchik.fieldbyname(‘name’).asstring:=edit1.text;

zakazchik.post;…

использ-е InsertRecord

Zakazchik.InsertRecord[nil,’Иванов’,nil]

удалить запись.

можно также только из модифицирован. НД с пом. метода Delete при удалении записи послед-но генерир-ся событие BeforeDelete и AfterDelete, кот. можно использ-ть для проверки выполн-я условия.

Если выполн-е метода приводит к ошибке, то генирир. исключение OnDeleteError на использ-и вычиляемого поля.

.Lookup:Boolean;

NewValue:variant;

OldValue:variant;

По умолчанию для каждого комп-та ист-ка доступны все поля НД. Тогда к любому полю можно обратиться через метод FieldByName.

function FieldByName( const: FieldName:string):Tfields; property Fields[Index]:Tfield;

Для работы с конкретн. полем на этапе конструир-я программы с помощью редактора полей создается объект поля класса TField; редактор вызыв. двойн. щелчком по комп-ту TTable и с пом. вспомогат. меню в появившемся диалогом окне инспектора объектов производим настройку полей. редактор полей присваивает объектом поля имена путем сцепления имени ист-ка и имени поля.

При прямом обращении использ-ся метод FieldByName или св-во Fields

Zakazchik. FieldByName(‘FAM’).AsString:=’Григорьев’;

Zakazchik.Fields(‘1’).AsString:= ’Григорьев’;

28. Назначение компонента tdbGrid в создании бд. Основные свойства и методы компонента.

В тех случаях, когда таблица имеет небольш. кол-во полей, для предъявления данных пользователю и модификации таблицы целесообразно использ-ть комп-т DBGrid (страница Data Controls). Комп-т DBGrid предъявляет данные в табличной форме и имеет все необх. св-ва для редактир-я записей, вставки новых записей и удаления записей.

Необх. учитывать: если измен-ть данные в тек. записи и перейти к др. записи, DBGrid автомат. вызывает метод Post и измен-я сохр-ся в таблице, даже если они были сделаны случайно. Аналогичные действия производятся после вставки новой записи. При удалении тек. записи DBGrid запрашивает у пользователя подтверждение, но текст сообщ-я на англ. языке, не удобно. В качестве заголовков колонок по умолчанию использ-ся имена полей таблицы, также не понятно пользователю.

Чтобы не заносить в базу измен-я, можно использ-ть обработчики события BeforePost набора данных, где можно согласиться с измен-ями либо отказаться от них. в случае отказа необх-мо вызвать метод Cancel. чтобы пользователь не видел отмененных измен-й, необх-мо переместить указатель записи на одну запись назад, а затем вперед. Здесь же приходится вызвать «тихое» исключение (Abort). Иначе при отказе от вставлен. записи выдается сообще-е о неверном ключе.

procedure TfmIzdelie.BeforePost(DataSet: TDataSet);

begin

if MessageDlg('Сохранить запись?',mtWarning,[mbYes,mbNo],0)=mrNo then

begin ttIzdelie.Cancel;

ttIzdelie.Prior;

ttIzdelie.Next;

Abort; end;end;

Комп-т DBgrid, размещенный на форме можно переименовать с пом. св-ва Name. Чтобы связать его с набором данных Table, его свойству DataSource присвойте имя соответствующего компонента формы (выбирается из списка). Для того, чтобы дать колонкам DBGrid названия, необходимо для всех полей набора данных Table создать столбцы DBGrid. Для создания столбцов щелкните в инспекторе объектов по свойству Columns и затем щелчком по кнопке, появившейся в правой части поля Columns, вызовите редактор столбцов. Для создания нового столбца щелкните по кнопке «Add New». В окне редактора появится строка с надписью «0-Tcolumn», а в инспекторе объектов появится список свойств столбца. Присвойте свойству столбца FieldName имя того поля, которое он будет отображать (выбирается из списка). Свойству столбца Title.Caption присвойте текст заголовка колонки. Почти все остальные свойства столбца можно оставить без изменений. Таким же способом можно создать столбцы для остальных полей набора данных. Закройте редактор столбцов.

Динамич. св-ва. Св-ва столбца внесен в момент дин. немедленно отображаются в DBGrid. Пример динамич. опред-я св-ва столбца.

procedure TForm1.Button2Click(…)

begin

DBGrid1.Colums.Clear;

DBGrid1.Colums.Add;

DBGrid1.Colums[0].FieldName:=’Fam_z’;

DBGrid1.Colums[0].TitleCaption:=’Фамилия’;

DBGrid1.Colums.Add;

DBGrid1.Colums[1].FieldName:=’Kod’;…

Комп-т TDBCtrlGrid представл. собой таблицу каждый ряд или каждая ячейка отображается в виде панелей, кот. могут сод-ть в себе др. комп-ты из которых проектир-ся только 1ая, а ост. повторяют структуру, но относятся к след. записи.