- •Раздел 1. Проектирование баз данных. 2
- •Раздел 2. Разработка приложений для работы с Базами Данных в среде Delphi. 25
- •Раздел 1. Проектирование баз данных.
- •1.1. Основы построения баз данных. Модели данных.
- •1.1.1. Реляционная модель данных.
- •1.1.2. Нормализация базы данных.
- •1.2. Проектирование базы данных методом “сущность-связь”.
- •Раздел 2. Разработка приложений для работы с Базами Данных в среде Delphi.
- •2.1. Технология создания информационной системы.
- •2.1.1.Создание таблиц базы данных в Database Desktop.
- •2.1.2. Целостность базы данных.
- •Программа bde Administrator и модули данных.
- •Компоненты доступа и работы с данными. Тема: Наборы данных. Состояние и режимы наборов данных.
- •Тема: Объекты поля. Операции с полями.
- •Тема. Отображение и выбор значения поля.
- •Тема. Визуальные компоненты отображения записей из набора данных.
- •Закладки.
- •Тема. Ограничения на вводимые значения.
- •Тема. Сортировка набора данных.
- •Тема. Операции с таблицей базы данных.
- •Тема. Фильтрация записей.
- •Тема. Поиск записей.
- •Тема. Модификация набора данных.
- •Тема. Работа с отчетами
- •Отчет для связанных наборов данных
- •Составной отчет
- •Модули данных
- •Конструктор отчетов Rave Report
- •Реляционный способ доступа к данным.
- •Основные сведения о языке sql.
- •Оператор выбора Select.
- •Агрегирование и группирование записей.
- •Объединение таблиц.
- •Вложенные запросы.
- •Модификация записей.
- •Примеры баз данных
Закладки.
Для перемещения между записями набора данных можно использовать закладки. Закладка (аналог обычной закладки в книге) позволяет временно переместиться от нужной записи с тем, чтобы позже вернуться к ней.
Свойство 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.