Слайд 1Лекция №3
Создание в среде Delphi приложения, предназначенного для учета поступающих
на склад товаров
Слайд 2Постановка задачи
База данных состоит из двух таблиц: справочника "Товары"
и операционной таблицы "Приход товаров".
Таблицы необходимо создать и хранить
в формате Paradox.
Отношение между таблицами "один-ко-многим", то есть одному товару в таблице "Товары" может соответствовать более одной записи в таблице "Приход товаров".
Слайд 4Для таблицы "Товары" первичный ключ построен по полю Tovary.
Для
таблицы "Приход товаров" первичный ключ построен по полю N_Prih
Для
реализации ссылочной целостности (с таблицей "Товары") необходимо построить внешний ключ по полю Tovary.
Для сортировки записей при их выводе в приложении необходимо создать индекс по полям "Дата прихода", "Товар".
Слайд 5Создание псевдонима базы данных
При работе с таблицами локальных баз
данных (в число которых входят таблицы СУБД Paradox и dBase)
базой данных считается каталог на диске, в котором хранятся файлы таблиц БД, индексов, примечаний (мемо-полей) и т.д. Для хранения одной таблицы создается отдельный файл. Такие же отдельные файлы создаются для хранения индексов таблицы и мемо-полей.
Обращение к БД из утилит и программы осуществляется по псевдониму (алиасу, alias) базы данных. Такой псевдоним должен быть зарегистрирован в файле конфигурации конкретного компьютера при помощи утилиты BDE Administrator.
Слайд 6Запуск утилиты BDE Administrator
Слайд 7Выберем в главном меню Элемент Object \ New. В появившемся
окне оставим тип создаваемой БД без изменений (STANDARD) и нажмем
Ok
Слайд 8В левом окне появившегося окна администратора БД мы увидим строку
с именем STANDARDl. Изменим это имя на "PROBA". Для этого
щелкнем мышью на названии БД и введем новый текст.
Слайд 9В правом окне приведены параметры БД. Оставим их без изменения,
изменив лишь PATH. Этот параметр указывает путь к каталогу, в
котором будет расположена БД. Можно ввести путь вручную, но лучше воспользоваться средствами администратора: для этого нужно щелкнуть по полю PATH и нажать на появившуюся в правом углу поля кнопку. Затем следует выбрать каталог D:\Students\П_411\PROBA и нажать кнопку Ok
Слайд 11Теперь необходимо запомнить определение псевдонима. Для этого в левом окне
администратора БД необходимо щелкнуть по имени псевдонима правой кнопкой мыши
и во всплывающем меню выбрать элемент Apply. В появившемся диалоговом окне, в котором спрашивается, собираемся ли мы запоминать изменения для псевдонима, необходимо нажать кнопку Ok. Затем следует выйти из утилиты BDE Administrator. Теперь создание псевдонима завершено и к нему можно обращаться из других утилит и приложений. Однако каталог, на который ссылается псевдоним БД, еще пуст. Необходимо создать таблицы базы данных.
Слайд 12Создание таблиц базы данных
запустить утилиту Database Desktop (DBD).
После
запуска утилиты установим рабочий псевдоним утилиты. Это псевдоним, с которым
утилита работает по умолчанию. Если рабочий псевдоним не установлен, придется при работе с DBD всякий раз указывать псевдоним, что отнимает время.
Слайд 13Для установки рабочего псевдонима нужно выбрать элемент главного меню File
| Working Directory и в выпадающем списке Aliases выбрать имя
псевдоним PROBA, после чего нажать кнопку Ok.
Слайд 14Для создания таблицы БД нужно выбрать элемент главного меню File
\ New | Table. В появившемся окне Create Table оставляем
без изменения тип создаваемой таблицы (Paradox 7) и нажимаем кнопку Ok. После этого появится окно определения структуры таблицы БД
Слайд 15Каждая строка таблицы соответствует полю. Назначения столбцов:
• Field Name
- имя поля;
• Type - тип поля;
• Size - размер
поля (для строковых полей, поскольку иные поля подразумевают размер, определяемый типом поля);
• Key - содержит звездочку '*', если поле входит в состав первичного ключа. Если в первичный ключ входит несколько полей, они должны определяться в той последовательности, в которой они присутствуют в первичном ключе.
Слайд 16Кроме того, все поля, входящие в состав первичного индекса, должны
определяться перед иными полями, то есть быть в списка полей
наверху.
Определим поля, входящие в таблицу "Товары". Введем Tovary в столбец Field Name. Для того, чтобы определить тип поля, щелкните по столбцу Type и нажмите клавишу пробела. В ответ на это будет выдан список типов полей, из которых необходимо произвести выбор нужного типа.
Слайд 17возможные типы полей СУБД Paradox:
Слайд 20Для того, чтобы определить тип поля Tovar, выберем А и
затем в столбце Sire укажем значение 20. В столбце Key
поместим звездочку, означающую, что данное поле входит в состав первичного ключа. Для этого нажмем любой символ на клавиатуре. Повторное нажатие любого символа снимает отметку звездочкой в столбце Kеу.
Слайд 21Введем определения и других столбцов таблицы Tovary. Для каждого поля
определим требование обязательного заполнения поля значением. Для этого, переходя от
поля к полю, включим переключатели Required Field. Другие поля служат для наложения ограничений на значение поля
Слайд 22Minimum value - определяет минимальное значение поля, Maximum value -
определяет максимальное значение поля;
Default value - определяет значение поля по
умолчанию;
• Picture - определяет шаблон изображения поля. Для формирования шаблона следует нажать кнопку Assist.
Отсутствие значения в одном из полей означает отсутствие ограничений на значение поля.
Слайд 23Установка соответствующего языкового драйвера
для того чтобы русский текст изображался
на экране без искажений (Table property/Table language/Modify/Pdox ANSI Cyrillic/ok). Процедуру
установки языкового драйвера надо проводить до создания индексов по символьным полям и установления по ним ссылочной целостности.
Слайд 25Запоминание таблицы
Чтобы запомнить сохраненную таблицу на диске, следует нажать кнопку
Save As. Затем в появившемся окне следует указать имя таблицы.
При желании можно указать каталог или псевдоним, отличные от принятых по умолчанию. Напомним, что по умолчанию принимается рабочий каталог или каталог, определяемый рабочим псевдонимом.
Слайд 27После того, как мы определим имя создаваемой таблицы (Tovary), в
каталоге D:\Students\П_411\PROBA (он назначен псевдониму PROBA, используемому нами в качестве
рабочего псевдонима) будет создан файл Tovary.DB и файлы индексов с соответствующими расширениями.
Слайд 28Изменение структуры существующей таблицы
Если в структуру существующей таблицы БД
необходимо внести изменения, следует выбрать элемент меню File | Open
| Table, в появившемся диалоговом окне выбрать имя таблицы и нажать кнопку Ok. Будет показано содержимое таблицы: в таблице Tovary отсутствуют записи, что не удивительно, поскольку мы их еще не вводили).
Слайд 29В том случае, когда мы хотим ввести новые записи в
таблицу прямо в DBD (а также изменить значения в некоторых
записях или произвести удаление), следует нажать кнопку F9. После этого таблица будет переведена в режим внесения изменений.
Чтобы изменить структуру таблицы, выберите элемент меню Table | Restructure. Вслед за этим будет показано диалоговое окно для определения структуры таблицы.
Слайд 31Определим структуру таблицы "Приход товаров".(ЭУН)
Слайд 32всем полям присваиваем атрибут Required Field, кроме автоинкрементного поля N_Prih.
создаем
индекс по полям DatPrih и Tovar. Для этого в комбинированном
списке Table properties выбираем элемент Secondary Indexes. Нажимаем кнопку Define и переводим вправо нужные поля. Имя индекса – Sort_DatPrih_Tovar
Слайд 34Определяем ссылочную целостность между таблицами.
Таблицы Tovary и Prihod находятся
в отношении один ко многим, т.е. с одной записью таблицы
Tovary может быть связано несколько записей по приходу того же товара в таблице Prihod.
В качестве поля связи выступает поле Tovar.
Слайд 35Открыть таблицу Prihod (File/Table/Open/Restructure).
В выпадающем списке Table Properties выбрать
элемент Refrential Integrity. Имя ссылочной целостности – Tovary_Prihod_Integrity.
Слайд 38Свойства компонентов:
Table1:
DatabaseName – proba (псевдоним БД)
property DatabaseName: - определяет локальный
псевдоним приложения, который может использоваться при доступе к БД вместо
пути или имени БД..
Tablename – Tovary.DB
Active – True;
DataSource1
Dataset – Table1;
Слайд 39DBGrid1:
DataSource – DataSource1;
Для Table2, DataSource2,DBGrid2 – то же , но
с таблицей Prihod.
Слайд 41Если сейчас запустить приложение, то обе таблицы будут независимы друг
от друга. Чтобы содержимое подчиненного набора соответствовало выбору записи в
главном наборе, подчиненную таблицу нужно связать с главной. В компоненте Table2:
MasterSource – dataSource1
Masterfields – связать по полю Tovar.
Слайд 42property MasterFields: string; - используется в дочернем НД для указания
имени поля связи между родительским и дочерним НД.
property MasterSource: TDataSource;
- используется в дочернем НД для указания имени компонента TDataSource, связанного с родительским НД.
Слайд 45Наша программа имеет 2 недостатка
В ней показан автоинкрементный столбец N_Prih,
который необходим для обеспечения уникальности записей в таблице Prihod. Он
не несет никакой смысловой нагрузки, поэтому его лучше не показывать
Дважды щелкнуть по Table2 или правой кнопкой и выберите Редактор полей, затем добавьте все поля кроме N_Prih
Слайд 47Название колонок в сетке DBGrid представлены латинскими буквами – эти
названия следует заменить на русские. Для каждого добавленного в редакторе
полей поля, Delphi автоматически создает объект класса Tfield и получает соответствующее имя , Table2 Tovar, если какое то поле не включено в список полей, оно становится невидимым для программы и не появляется в соответствующем НД.
Слайд 48Шелкнуть по соответствующему полю и изменить свойство DisplayLabel – Товар,
дата прихода, количество. Иначе это можно было сделать в редактор
столбцов компонента DBGrid1.
Слайд 52Отсортируем записи в НД Table2 по дате прихода товара.
Для
этого разорвем связь между таблицами один-ко многим.
В свойстве Table2 -
Mastersource , Masterfield убрать ссылки.
Раскроем список Tables.Indexfieldnames и выбираем DatPrih; Tovar.
После этого вызвать редактор столбцов DBGrid2 и переташить DatPrih перед Tovar.
Слайд 54
Добавим визуальные компоненты
Tbutton – 5 компонентов
TDBLookupComboBox
ListSource – DataSource1
ListField – Tovary
keyField
– Tovary
DataSource – dataSource2
DataField – Tovary
Слайд 55TBDEdit
DataSource – DataSource2
DataField - DatPrih
TBDEdit
DataSource – DataSource2
DataField - Kolvo
Слайд 57Напишем обработчики событий OnClick для компонентов TButton
procedure Form1.InsertButtonClick(Sender: TObject);
begin
if
TabPrih.State= dsBrowse then
TabPrih.Insert;
end;
Слайд 58procedure TForm1.EditButtonClick(Sender: TObject);
begin
if TabPrih.State= dsBrowse then
TabPrih.Edit;
end;
Слайд 59procedure Form1.DeleteButtonClick(Sender: TObject);
begin
if TabPrih.State= dsBrowse then
if MessageDlg('Подтвердите удаление записи',
mtConfirmation,[mbYes,mbNo],0)=mrYes then
TabPrih.Delete;
end;
(ЭУН, ГСХ)
Слайд 60procedure TForm1.PostButtonClick(Sender: TObject);
begin
if TabPrih.State in [ dsInsert,dsEdit] then
TabPrih.Post;
end;
Слайд 61procedure TForm1.CancelButtonClick(Sender: TObject);
begin
if TabPrih.State in [ dsInsert,dsEdit] then
TabPrih.cancel;
end;