Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_БД.doc
Скачиваний:
28
Добавлен:
04.05.2019
Размер:
4.03 Mб
Скачать

Закладки.

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

Свойство Bookmark класса TTable хранит значение текущей закладки.

Методы НД:

Function GetBookmark: TBookmark; - создается закладка для текущей записи,

Procedure GotoBookmark(Bookmark: TBookmark) ; - перемещается указатель текущей записи к конкретной закладке,

Procedure FreeBookmark (Bookmark: TBookmark); virtual; - удаляется указанная закладка, то есть освобождаются выделенные для закладки ресурсы,

Function BookmarkValid (Bookmark: TBookmark) : Boolean; override; - проверка корректности значения закладки, то есть указывает ли закладка на существующую запись,

Function CompareBookmarks (Bookmark1, Bookmark2: TBookmark) : Integer; -сравнение двух закладок. Возвращается значение 0, если закладки идентичны; -1, если закладка Bookmark1 меньше закладки Bookmark2; +1, если закладка Bookmark2 меньше закладки Bookmark1.

Например,

var

Bookmark1: TBookmark;

// создание закладки для текущей записи

Bookmark1 := Table1.GetBookmark;

// переход к записи с закладкой

if Table1.BookmarkValid(Bookmark1) then

Table1.GotoBookmark(Bookmark1);

// удаление закладки

if Table1. BookmarkValid(Bookmark1) then

Table1.FreeBookmark(Bookmark1);

Пример. Создание вычисляемого поля возраста сотрудника для таблицы Sotrudniki.

procedure TForm1.TbSotrudnikiCalcFields(DataSet: TDataSet);

var year1,year2, month1, month2,day1, day2: word;

begin

DecodeDate(Now,year1,month1,day1);

DecodeDate(TbSotrudnikiS_Birthday.Value,year2,month2,day2);

TbSotrudnikiS_Age.AsInteger:=year1-year2;

end;

Здесь функция DecodeDate() преобразует первый аргумент типа TDateTime в целые значения года, месяца, дня.

Пример. В компоненте ComboBox создать список названий столбцов компонента DBGrid.

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

ComboBox1.Clear;

for i:=0 to DBGTovar.Columns.Count-1 do begin

ComboBox1.AddItem(DBGTovar.Columns[i].Title.Caption,Sender);

end;

ComboBox1.ItemIndex:=0;

end;

Пример. Вывести в Label наименование товара с наибольшей общей стоимостью и перевести указатель текущей записи на соответствующую запись.

procedure TForm1.Button1Click(Sender: TObject);

var k,max: integer;

begin

TbPokupka.First;

max:=TbPokupkaSumma.AsInteger; k:=1;

while not TbPokupka.Eof do begin

if TbPokupkaSumma.AsInteger>max then begin

max:=TbPokupkaSumma.AsInteger;

k:=TbPokupka.RecNo;

end;

TbPokupka.Next;

end;

TbPokupka.RecNo:=k;

Label1.Caption:=TbPokupkaTovar.AsString;

end;

Пример.

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

procedure TForm1.Table1CalcFields(DataSet: TDataSet);

begin

if Edit1.Text<>'' then

Table1Day.AsDateTime:=Table1Date1.AsDateTime+StrToInt(Edit1.Text);

end;

Тема. Ограничения на вводимые значения.

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

Например, для T_Kol_vo (TbTovar)можно задать:

MinValue=0

MaxValue=200

При нарушении этих пределов возникает исключение EDatabaseError, которое необходимо обработать в приложении.

Другой способ задания ограничений через свойства статического поля:

CustomConstraint – строка SQL (условное выражение),

ConstrainErrorMessage текст, который появляется в случае неверно введенного значения.

Например, для поля T_Kol_vo можно задать:

TbPokupkaP_Kol_vo.CustomConstraint:='TbPokupkaP_Kol_vo>0 and

TbPokupkaP_Kol_vo<100)';

TbPokupkaP_Kol_vo.ConstraintErrorMessage:=' Значение вне диапазона!';

Здесь разрешен ввод для поля T_Kol_vo значений от 0 до 100. В противном случае выводится сообщение “Значение вне диапазона!” и введенное значение отвергается.

Проверку данных на уровне поля можно выполнить в обработчике события OnValidate, которое возникает перед записью введенного значения поля в буфер текущей записи. После этого события возникает событие OnChange, в обработчике которого можно записать обработку исключений.

Ограничения на вводимые значения для отдельных полей можно записать в виде набора ограничений в окне Editing Contraints, которое появляется при выборе свойства Constraints компонента Table.