Файл: Методические указания к лабораторным работам по Delphi Lazarus.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 114

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

  1. При нажатии на кнопку «Удалить» должно появляться окошко для подтверждения операции удаления.

  2. При осуществлении фильтрации или редактировании информации в таблицах «Заказы» или «Товары» должен происходить автоматический пересчет итогов.

  3. Поиск в таблице «Заказы» должен осуществляться даже по частичному ключу (например, по первой букве названия).



Методические указания к лабораторной работе № 3:





  1. Создание базы данных. Чтобы создать в Delphi таблицы БД, необходимо выполнить следующие шаги:

  • Создайте папку, в которой будут храниться таблицы вашей базы данных (например, это может быть подпапка DB в папке, где будет размещаться ваша программа).

  • Запустите приложение Database Desktop. Это можно сделать как из самой Delphi (через меню Tools), так и через главное меню Windows (Пуск | Программы | Borland Delphi | Database Desktop).

  • Выберите из меню команду File | Working Directory и сделайте так, чтобы рабочая директория указывала на папку с вашей будущей базой данных.

  • Выберите из меню команду File | New | Table, в появившемся окошке выберите формат Paradox 7 (таблицы этого формата лучше всего подходят для небольшой настольной базы данных), после чего вы попадете в окошко определения структуры вашей таблицы.

  • Заполните структуру вашей таблицы, обращая внимание на следующее:

  • Имя поля (Field Name) должно состоять из букв, цифр и символов подчеркивания «_», пробелы и русские буквы не допускаются.

  • Список допустимых типов полей (Type) можно вызвать, нажав клавишу «пробел» или правую кнопку мыши. Наиболее часто используемыми типами полей являются: строковый (Alpha), числовой (Number, Short, Long Integer), дата (Date), автоинкрементный (+). Чтобы получить подробное описание каждого типа данных, вызовите Cправку (кнопка Help или клавиша F1).

  • Для некоторых типов данных необходимо указать размер (Size). Например, строковые поля могут быть размером от 1 до 255 символов.

  • Ваша таблица обязательно должна иметь первичный ключ, то есть поле или набор полей, значения которых являются уникальными (неповторяющимися) для данной таблицы. Причем все ключевые поля должны идти в списке полей перед неключевыми. Чтобы пометить какое-то поле как ключевое, нажмите любой символ в столбце ключ (Key). Если ключ получается слишком громоздким (состоящим из нескольких полей), то, возможно, имеет смысл добавить в таблицу фиктивное автоинкрементное поле, которое гарантированно содержит неповторяющиеся значения.

  • Вы можете пометить любое поле как «обязательное к заполнению», поставив галочку Required Field.

  • После того, как вы ввели все необходимые поля, сохраните вашу таблицу, нажав кнопку Save As и введя имя вашей таблицы.

  • Ч
    тобы в дальнейшем произвести модификацию структуры вашей таблицы, откройте эту таблицу (выполнив команду File | Open | Table) и нажмите кнопку Restucture на панели инструментов (или выберите из меню команду Table | Restructure).


Вот пример структуры таблицы «Заказы» (Orders.db) из 4 работы:

  • Аналогичным образом разработайте структуру остальных таблиц вашей базы данных и сохраните их под собственными именами.

  1. Установка связей (ссылочной целостности) между таблицами. Связи между таблицами необходимы для поддержания согласованности одних и тех же данных в разных таблицах. Например, в нашей базе данных поле «Имя клиента» из таблицы «Заказы» должно принимать только те значения, которые имеет поле «Имя клиента» в таблице «Клиенты». Чтобы обеспечить это, необходимо выполнить следующие шаги (в нашем примере таблица «Заказы» называется подчиненной (Child), а таблица «Клиенты» – главной или родительской (Parent)):

  • Закройте главную таблицу («Клиенты»), если она открыта, и откройте подчиненную таблицу («Заказы»).

  • Нажмите кнопку Restucture на панели инструментов.

  • Выберите из выпадающего списка Table Properties в правой части окна значение Referencial Integrity (ссылочная целостность) и нажмите кнопку Define (определить).

Откроется диалоговое окно, в левой части которого указан список всех полей текущей таблицы («Заказы»), а в правой – все другие таблицы в рабочем каталоге. (Если правое окошко пустое или содержит таблицы не вашей базы данных, то перед продолжением необходимо вернуться к пункту определения текущего рабочего каталога – Working Directory).

  • В левом списке выберите поле «Имя клиента» (ClientName) и нажмите стрелку вправо. Указанное поле появится в списке Child Fields.

  • В
    правом списке выберите таблицу «Клиенты» и нажмите стрелку влево. Ключевое поле из указанной таблицы появится в списке Parent’s Key.



  • Нажмите кнопку OK и в появившемся диалоговом окошке введите произвольное название для созданной связи, например ClientIntegrity.

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

  • Аналогичным образом создайте связь между таблицами «Заказы» и «Товары» по полю «Наименование товара».

  1. Занесение начальных данных в таблицы:

  • Выберите из меню команду File | Open | Table, чтобы открыть нужную таблицу.

  • Нажмите кнопку Edit Data на панели инструментов (или клавишу F9), чтобы перейти в режим ввода/редактирования данных. Повторное нажатие клавиши F9 возврает нас в режим просмотра.


  1. Использование таблиц базы данных в Delphi. Чтобы подключить к вашему приложению таблицу базы данных, необходимо выполнить следующие шаги:

  • Разместите на вашей форме 2 невизуальных компонента: Table (таблица) с закладки BDE и DataSource (источник данных) с закладки Data Access. Компонент Table служит для связи (через драйвер BDE) с таблицей базы данных, а компонент DataSource служит для отображения данных из таблицы в различных визуальных элементах управления (Data Controls). Для каждой таблицы базы данных вы должны использовать два этих компонента. Поскольку большая база данных может состоять из множества таблиц, то, чтобы не загромождать форму компонентами, можно разместить их в отдельном модуле данных. Чтобы создать модуль данных, используйте команду File | New | Data Module.

  • У компонента DataSource найдите в Инспекторе объектов свойство DataSet и выберите из выпадающего списка название компонента Table, с которым он связан.

  • У компонента Table найдите свойство TableName и напишите имя вашей таблицы базы данных вместе в путем (например, если таблица находится в подпапке DB и называется Orders, то введите «DB\Orders.db»).

Существует и другой способ подключения базы данных – через псевдоним (alias). В этом случае псевдоним базы данных должен быть создан заранее (при помощи программ Database Desktop или BDE Administrator), а затем указан в свойстве DatabaseName у компонента Table. Недостатком этого способа является то, что при переносе программы с компьютера на компьютер необходимо сначала настроить на новом компьютере псевдоним.

  • Совет. Чтобы в дальнейшем в приложении было удобно ссылаться на компоненты Table и DataSource, рекомендуется их переименовать, чтобы их имена совпадали с названиями таблиц. Например, если у вас имеется таблица заказов (Orders), то для компонента Table установим свойство Name = ‘Orders’, а для компонента DataSource установим свойство Name = ‘DS_Orders’.

  1. Работа с элементами управления для доступа к данным (Data Controls). Элементы управления для доступа к данным позволяют просматривать и редактировать данные, относящиеся к текущей записи в таблице. Следующая таблица дает краткую сводку основных компонентов, расположенных на закладке Data Controls:

DBGrid

отображает информацию из источника данных в табличной форме

DBNavigator

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

DBText

показывает содержимое поля как метку (строку без редактирования)

DBEdit

показывает содержимое поля как строку редактирования

DBMemo

показывает содержимое Memo-поля или BLOB-объекта в многострочном редакторе

DBImage

показывает содержимое поля как графическое изображение

DBCheckBox

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

DBRadioGroup

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

DBListbox

отображает список элементов, который служит для обновления указанного поля в таблице

DBComboBox

отображает выпадающий список элементов, который служит для обновления указанного поля в таблице

DBLookupListbox

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

DBLookupComboBox

отображает выпадающий список значений указанного поля из другой таблицы, который служит для обновления значения поля в текущей таблице


Все элементы управления соединяются с таблицей базы данных через посредника – источник данных (Data Source). Чтобы связать какой-то элемент управления с таблицей базы данных, выполните следующие шаги:

  • Разместите на форме или в модуле данных компоненты Table и DataSource и установите их свойства, как указано в предыдущем пункте.

  • Поместите нужный элемент управления с закладки Data Controls на форму.

  • Используя Инспектор объектов, найдите у элемента управления свойство DataSource и выберите из выпадающего списка имя компонента DataSource, размещенного на первом шаге.

  • Найдите у элемента управления свойство DataField и выберите из выпадающего списка имя поля, которое должно отображаться в этом элементе управления. (Этот шаг не нужен для компонентов DBGrid, DBNavigator, у которых нет свойства DataField.)

  • Установите у компонента Table свойство Active в значение True, чтобы открыть таблицу и показать ее данные в элементе управления.

  1. Работа с компонентом DBGrid (табличное представление базы данных):

  • Для редактирования текста заголовков, ширины и порядка следования стобцов у компонента DBGrid используйте встроенный редактор столбцов (Columns Editor, вызывается двойным щелчком мыши по компоненту).

  • Чтобы запретить изменение содержимого таблицы через компонент DBGrid, установите его свойство ReadOnly в значение True.

Замечание. Если установить непосредственно у компонента Table свойство ReadOnly в значение True, то любые изменения данных в этой таблице будут невозможны.

  1. Получение и изменение данных в таблице в процессе выполнения программы. Для чтения и записи данных в поля таблицы можно использовать процедуру <таблица>.FieldByName(‘<имя поля>’).As<тип>. Например, оператор Kolvo := Orders.FieldByName('Count’).AsInteger прочитает значение поля “Count” для текущей записи в таблице «Orders», а оператор Orders.FieldByName(‘Client’).AsString := ‘John Lennon’ изменит имя клиента в текущем заказе.

  2. Работа с вычисляемыми (calculated) полями. Вычисляемые поля не сохраняются в физической базе данных на жестком диске, их значения вычисляются по мере необходимости на основании значений других полей базы данных. Преимущество использования вычисляемых полей состоит в том, что нет необходимости хранить в базе данных дублирующую информацию. Примеры вычисляемых полей: «Стоимость партии товара» (= «Цена за единицу товара» * «Размер партии»), «ФИО» (= «Фамилия» + ‘ ‘ + «Имя» + ‘ ‘ + «Отчество»).

  • Чтобы создать в таблице вычисляемое поле:

  • двойным щелчком мыши по компоненту Table откройте редактор полей (Fields Editor);

  • щелкните правой кнопкой мыши по редактору полей и выберите команду Add all fields для того, чтобы добавить в окно редактора все существующие поля таблицы базы данных;

  • еще раз щелкните правой кнопкой мыши по редактору полей и выберите команду New field для того, чтобы создать новое поле;

  • в появившемся диалоговом окне введите имя нового поля (Name), выберите тип данных поля (Type), отметьте, что поле будет являться вычисляемым (Calculated) и нажмите кнопку OK.

  • Чтобы отобразить вычисляемое поле в компоненте DBGrid, вызовите редактор столбцов (Columns Editor) для компонента DBGrid и добавьте в нем новый столбец, указав в качестве имени поля (FieldName) имя нового поля.

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


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

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

  • Чтобы задать условие фильтрации записей, присвойте свойству Filter у компонента Table необходимое условие в следующем формате: <имя поля> <операция сравнения> <значение>. Примеры условий: ‘Cnt > 10’, ‘FIO = ‘Иванов’’.

  • Чтобы включить или выключить фильтрацию записей, присвойте свойству Filtered значение True или False.

  1. Поиск записей в таблице базы данных. Существует два основных метода поиска записей: поиск по произвольному условию (процедура Table.Locate) и поиск по ключевому полю (процедура Table.FindNearest). Первый вариант обладает большей гибкостью, но имеет следующие существенные недостатки: а) поскольку записи перебираются последовательно, то в большой базе данных поиск осуществляется медленно; б) для поиска следующей записи, отвечающая условию, поиск надо запустить повторно. Второй вариант требует задания ключевых полей (создания вторичных индексов), но зато поиск по ним осуществляется быстро и все записи, отвечающие условию, будут найдены за один раз.

  • Для того, чтобы создать в таблице «Заказы» индексы по полю «Товар» и «Клиент»:

  • Откройте в Database Desktop таблицу «Заказы», нажмите кнопку Restructure, выберите из выпадающего списка Table Properties в правой части окна значение Secondary Indexes (вторичные индексы) и нажмите кнопку Define (определить).

  • Из списка полей выберите то поле, по которому вы хотите построить индекс, (в данном случае это поле «Товар») и нажмите кнопку OK.

  • Придумайте и введите имя для названия индекса, например TovarIndex.

  • Повторите операцию для поля “Клиент”.

  • Перед тем, как начать поиск по какому-то критерию, необходимо сделать соответсвующий индекс активым. Для этого необходимо присвоить свойству IndexName у компонента Table имя нужного индексного файла.

  1. Ну, и последний совет:

  • Поскольку диалоговые окна «Добавить запись» и «Изменить запись» по логике идентичны (различаются только заголовками), для них разумно использовать одну общую форму, а не две.