- •Введение
- •Основные концепции объектно-ориентированного программирования
- •Принципы ооп
- •Архитектура программы при ооп
- •Объектно-ориентированные языки програм-мирования
- •Описание класса в Object Pascal
- •События и реакция на них
- •Интегрированная среда разработки
- •Интегрированная среда разработки Delphi 7: 1 – главное окно; 2 - окно Дерева объектов; 3 – окно Инспектора объектов; 4 – окно Проводника кода; 5 – окно Конструктора форм; 6 – окно Редактора кода
- •Характеристика проекта Delphi
- •Компиляция и выполнение проекта
- •Знакомство со средой программирования
- •Компонент Lable
- •Компонент Label
- •Инспектор объектов
- •Компонент Edit
- •Компонент Edit
- •Компоненты Button, BitBtn, SpeedButton
- •Примеры кнопок Button, BitBtn и SpeedButton
- •Пример приложения
- •Форма с размещенными на ней компонентами
- •Компоненты для работы с текстом
- •Строковый редактор
- •Пример работы с компонентом Memo
- •Компонент RichEdit
- •Примеры форматирования текста в компоненте RichEdit
- •Списки строк
- •Компонент ListBox
- •Пример работы со списками строк
- •Компонент ComboBox
- •Переключатели
- •Компонент CheckBox
- •Пример работы с независимыми переключателями
- •Компоненты RadioButton и RadioGroup
- •Пример работы с группой зависимых переключателей
- •Объединение элементов управления. Компонент Panel
- •Примеры различного оформления рамки панелей
- •Компоненты OpenDialog и SaveDialog
- •Диалоговое окно открытия файла
- •Редактор фильтра
- •Работа с меню
- •Компонент MainMenu
- •Конструктор меню
- •Компонент PopupMenu
- •Пример контекстного меню
- •Работа с базами данных
- •Средства для работы с базами данных
- •Создание баз данных с помощью Database Desktop
- •Окно выбора формата таблицы
- •Окно определения структуры таблицы
- •Пример структуры таблицы
- •Пример заполненной таблицы
- •Создание псевдонимов бд в bde Administrator
- •Диалоговое окно создания псевдонима бд
- •Главное окно Администратора bde
- •Компоненты для работы с бд
- •Пример приложения
- •Форма с компонентами Table, DataSource и dbGrid
- •Редактор полей таблицы
- •Пример таблицы с измененными свойствами
- •Работа с графикой
- •Пример работы с графикой
- •Лабораторное задание
- •Указания по оформлению отчета
- •Контрольные вопросы
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
Форма с компонентами Table, DataSource и dbGrid
Теперь приложение можно запустить на выполнение и убедиться, что в таблице можно просматривать и изменять данные.
Чтобы запретить пользователю редактировать данные, нужно установить свойство DBGrid ReadOnly в true.
Для редактирования отдельных полей служит Редактор полей, который вызывается двойным нажатием на компоненте Table1. Сначала редактор пуст. Для добавления полей нужно в контекстном меню редактора выбрать команду Add fields (добавить поля). Появится диалоговое окно, содержащее список всех полей таблицы. С помощью курсора выделим в нем все поля, кроме Id. Дальше работать можно будет только с ними. После нажатия кнопки ОК выбранные поля будут добавлены в основное окно редактора (рис. 27).
Редактор полей таблицы
При выделении в редакторе какого-либо поля его свойства отображаются в Инспекторе объектов, причем точный набор свойств определяется типом данных поля. К числу наиболее важных свойств относятся:
Alignment – определяет выравнивание отображаемого текста внутри колонки таблицы;
DisplayLabel – определяет отображаемый заголовок столбца;
DisplayWidth – определяет ширину колонки в символах;
ReadOnly – определяет, является ли поле редактируемым или только для чтения;
Visible – определяет видимость поля.
Добавим на форму еще один компонент, управляющий работой с таблицей – навигатор DBNavigator. Компонент имеет ряд кнопок, служащих для управления данными (табл. 3).
Сделать некоторые кнопки невидимыми можно с помощью свойства VisibleButtons.
Кнопка |
Команда |
|
переход к первой записи |
|
переход к предыдущей записи |
|
переход к следующей записи |
|
переход к последней записи |
|
добавление новой записи перед текущей |
|
удаление текущей записи |
|
редактирование текущей записи |
|
пересылка отредактированной информации в БД |
|
отмена результатов редактирования или добавления новой записи |
|
очистить буфер, связанный с набором данных |
Для того чтобы привязать навигатор к конкретному набору данных, нужно заполнить его свойство DataSource.
Готовая форма с отредактированной таблицей и навигатором изображена на рис. 28.
Пример таблицы с измененными свойствами
Чтобы не занимать БД в процессе проектирования приложения, можно присвоить свойству Active компонента Table1 значение false и устанавливать соединение с БД в момент запуска приложения, а при закрытии формы разрывать его:
// - - - - Object Pascal - - - -
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Table1.Close;
end;
// - - - - - - - C++ - - - - - - -
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Table1->Open();
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Table1->Close();
}
В примерах показано использование методов Open и Close, назначение которых аналогично присвоению свойству Active значений true и false.
Компонент Table позволяет не только отображать, редактировать и упорядочивать данные, но и отфильтровывать записи по определенным критериям. Для задания фильтра используются свойства Filter, Filtered и FilterOptions.
Свойство Filtered включает или выключает использование фильтра, а сами фильтр записывается в свойство Filter в виде ограничений на значения полей. Например, можно задать в свойстве Filter значение
Surname = 'Павлов'
и в таблице отобразятся только записи, поле Surname которых равно указанному значению.
При записи условий можно использовать операции отношения (=, >, <, >=, <=, <>), а также логические операции and, or и not. Кроме того, в условиях сравнения строк можно использовать символ *, который обозначает, что на его месте могут находиться любые символы в любом количестве.
Например, при задании фильтра
Surname = 'C*'
в таблице отобразятся все записи, в которых фамилия начинается с буквы C.
Свойства фильтрации могут задаваться не только при проектировании приложения, но и во время выполнения программы. Например, пусть в таблице отображаются только записи, фамилии в которых соответствуют значению в поле Edit:
// - - - - Object Pascal - - - -
Table1.Filtered := false;
Table1.Filter := 'Surname = ''' + Edit.Text + '''';
Table1.Filtered := true;
// - - - - - - - C++ - - - - - - -
Table1->Filtered = false;
Table1->Filter = "Surname = '" + Edit1->Text + "'";
Table1->Filtered = true;
Для программного перемещения по записям таблицы можно использовать следующие методы Table:
First – перемещение к первой записи;
Last – перемещение к последней записи;
Next – перемещение к следующей записи;
Prior – перемещение к предыдущей записи.
Как и в случае файлов, компонент Table имеет функцию Eof, возвращающую true, если достигнут конец таблицы и false в противном случае.
Для того чтобы узнать значения какого-либо поля для текущей записи, можно использовать свойство FieldByName, но при этом необходимо обеспечить преобразование типов с помощью свойств AsString, AsInteger, AsFloat и др.
Например, перенесем все значения из поля Surname в расположенный на форме компонент Memo1:
// - - - - Object Pascal - - - -
Table1.First;
while not Table1.Eof do
begin
Memo1.Lines.Add(
Table1.FieldByName('Surname').AsString);
Table1.Next;
end;
// - - - - - - - C++ - - - - - - -
Table1->First();
while (!Table1->Eof)
{
Memo1->Lines->Add(
Table1->FieldByName("Surname")->AsString);
Table1->Next();
}
Лабораторное задание
Написать программу для работы с БД, реализующую следующие функции:
добавление, изменение, удаление записей;
фильтрация по всем полям;
проверка вводимых значений;
сохранение всех полей БД в текстовый файл.
Указания по оформлению отчета
Отчет должен содержать:
наименование и цель работы;
краткие теоретические сведения;
задание на лабораторную работу;
результаты выполнения лабораторной работы.
контрольные вопросы
На какие группы можно разделить компоненты Delphi, предназначенные для работы с БД?
Как связать визуальный компонент с таблицей БД?
С помощью каких свойств таблицы можно осуществить фильтрацию данных?
Какие методы компонента Table позволяют перемещаться по записям таблицы?