Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADO Delphi.doc
Скачиваний:
22
Добавлен:
11.08.2019
Размер:
800.26 Кб
Скачать

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

Рис. 8. Главное окно приложения

Щелчок на кнопках Изделия, Заказчики, ТТН приведет к появлению соответствующих рабочих форм. Щелчком на кнопке Help вызывается справочник по работе с приложением. Щелчок на кнопке Close закрывает главную форму.

Модуль главной формы был ранее сохранен нами под именем fmMainUnit. Изменим некоторые свойства главной формы следующим образом:

Caption = ‘Сбыт готовой продукции’ Heght = 100

Name = FMain Width = 281

BorderStyle = bsSingle BorderIcons.biMaximize = False

Наиболее подходящий стиль главного окна приложения – BorderStyle = bsSingle с исключением из доступных кнопки развернуть (BorderIcons.biMaximize = False). Это позволит пользователю сворачивать и восстанавливать окно, но не даст возможности развернуть окно на весь экран или изменить размер окна.

Так как все действия в приложении выполняются через главную форму, необходимо, чтобы она была доступна в любой момент времени. Для этого укажем в методе-обработчике события OnShow нулевые координаты верхнего левого угла формы:

procedure TFMain.FormShow(Sender: TObject);

begin

FMain.Left:=0; FMain.Top:=0;

end;

Разместим на форме компонент Panel1, установим свойство Align = alClient и очистим свойство Caption. Расположим на панели пять кнопок:

Button1 (Caption = ‘Изделия’) Button2 (Caption = ‘Заказчики’)

Button3 (Caption = ‘ТТН’)

BitBtn1 (Kind = bkHelp) BitBtn2 (Kind = bkClose)

Разместим на форме компонент PopupMenu1. В свойстве PopupMenu формы FMain выберем PopupMenu1.

Свяжем модуль главного окна с модулем данных dmSaleUnit командой File > Use Unit. Сохраним все сделанные в проекте изменения.

Создание рабочих форм. Перейдем к созданию рабочих форм, открываемых кнопками главной формы. Рабочие формы необходимо сделать модальными.

Создадим новую рабочую форму «Изделия» командой File > New > FormDelphi for Win 32. Сохраним модуль этой формы под именем fmIzdUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Изделия’ BorderStyle = bsDialog

Name = FIzd BorderWidth = 2

Height = 210 Width = 395

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Panel2 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компонент DBGrid1 (Align = alClient).

Командой File > Use Unit свяжем модуль fmIzdUnit с модулем данных dmSaleUnit. Сохраним изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM ->DataIzdelie. Сетка наполнится данными из НД ADOIzdelie. Для компонента DBNavigator1 в списке свойств DataSource также выберем DM ->DataIzdelie.

Создадим объекты-столбцы для сетки DBGrid1. Дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add All Fields (Добавить все поля). Далее редактируем свойства каждого столбца в отдельности. Вид выравнивания значений в столбце зададим, обратившись к свойству Alignment, параметры заголовка зададим, раскрыв свойство Caption.

Чтобы в сетке отображались рубли для столбца, имеющего тип Currency, необходимо для компонента ADOIzdelie открыть редактор полей, обратиться к полю ICena и в инспекторе объектов (раздел Miscellaneous) выбрать Currency = true. Вид окна после всех сделанных изменений показан на рис. 9.

Рис. 9. Рабочее окно «Изделия»

В главной форме командой File > Use Unit добавим модуль fmIzdUnit. Создадим обработчик события OnClick для кнопки Button1 главной формы.

procedure TFMain.Button1Click(Sender: TObject);

begin

FIzd.ShowModal;

end;

Создадим новую рабочую форму «Заказчики» командой File > New > FormDelphi for Win 32. Сохраним модуль формы под именем fmZakUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Заказчики’ BorderStyle = bsDialog Height = 210

Name = FZak BorderWidth = 2 Width = 395

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Pane12 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компонент DBGrid1 (Align = alClient).

Командой File > Use Unit свяжем модуль fmZakUnit с модулем данных dmSaleUnit. Сохраним изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM ->DataZakazcik. Сетка наполнится данными из НД ADOZakazcik. Для компонента DBNavigator1 в списке свойств DataSource выберем DM ->DataZakazcik. Создадим объекты-столбцы для сетки DBGrid1 (рис. 10).

Рис. 10. Рабочее окно «Заказчики»

Внесем необходимые изменения в главную форму. Командой File > Use Unit добавим модуль fmZakUnit в раздел implementation модуля fmMainUnit. Создадим обработчик события OnClick для кнопки Button2 главной формы.

procedure TFMain.Button2Click(Sender: TObject);

begin

FZak.ShowModal;

end;

Создадим рабочую форму «Обработка накладных» командой File > New > FormDelphi for Win 32. Сохраним модуль этой формы под именем fmObrNakUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Обработка накладных’ BorderStyle = bsDialog

Name = FObrNak BorderWidth = 2

Height = 375 Width = 520

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). На панели – компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В свободной части формы разместим компонент Pane12 (Align = alBottom, Caption = ‘ ‘).

Чтобы пользователь мог во время работы менять высоту этой панели, поместим на пустую часть формы вешку разбивки Splitter1 (Align = alBottom, Beveled = True, Height = 5). На свободную часть формы выше панели Pane12 положим компонент Pane13 (Align = alClient, Caption = ‘ ‘). На панели Pane13 расположим компонент DBGrid1 (Align = alClient). На панели Pane12 расположим компонент DBGrid2 (Align = alClient).

Поскольку нам придется создавать для формы контекстное меню, разместим на ней компонент PopupMenu1. В свойстве PopupMenu формы FObrNak выберем PopupMenu1.

Командой File > Use Unit свяжем модуль fmObrNakUnit с модулем данных dmSaleUnit. Сохраним все сделанные изменения.

Для компонента DBGrid1 в списоке DataSource выберем DM ->DataNaklad. Сетка наполнится данными из НД ADONaklad. Для компонента DBGrid2 раскроем список DataSource и выберем DM ->DataSnakl. Сетка наполнится данными из НД ADOSnakl. Для компонента DBNavigator1 в списке свойств DataSource выберем DM ->DataNaklad.

Создадим объекты-столбцы для сетки DBGrid1 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add. В свойстве FieldName выберем NNom. Добавим все остальные поля, кроме NZKod. Редактируем вид выравнивания и параметры заголовка для каждого столбца.

Создадим объекты-столбцы для сетки DBGrid2 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в контекстном меню выберем команду Add. В свойстве FieldName выберем SnNNom. Добавим остальные поля, кроме SnIKod. Редактируем вид выравнивания и параметры заголовка для каждого столбца.

Внесем необходимые изменения в главную форму. Командой File > Use Unit добавим модуль fmObrNakUnit в раздел implementation модуля fmMainUnit. Создадим обработчик события OnClick для кнопки Button3 главной формы (рис. 11).

procedure TFMain.Button3Click(Sender: TObject);

begin

FObrNak.ShowModal;

end;

Рис. 11. Рабочее окно «Обработка накладных»

Отдельно рассмотрим процесс закрытия главной формы. Чтобы все внесенные в таблицы изменения были сохранены в БД, эти таблицы по окончании работы необходимо закрыть. У каждого класса, описывающего НД в Delphi, имеется для этого метод Close. Создадим следующий обработчик события OnClick для кнопки BitBtn2:

procedure TFMain.BitBtn2Click(Sender: TObject);

begin

DM.ADOIzdelie.Close; DM.ADOZakazcik.Close;

DM.ADONaklad.Close; DM.ADOSnakl.Close;

end;

Создание форм ввода новых данных. При работе с НД используется указатель набора данных, определяющий, какая запись таблицы БД в настоящий момент является текущей. При работе с сеткой DBGrid менять, добавлять или удалять в любой момент времени можно только одну запись (выделяется в таблице звездочкой).

Чтобы выполнить модификацию НД, надо убедиться, что он открыт. Состояние НД проверяется значением свойства Active, которое в этом случае должно быть равно True. Открытие НД выполняется с помощью метода Open. Данные могут добавляться (метод Insert) или модифицироваться (метод Edit). После выполнения изменений их необходимо зафиксировать в БД (метод Post) или отказаться от сохранения (метод Cancel). Подход позволяет отменить изменения, внесенные в текущую запись, если обнаружится, что значение одного из полей указано некорректно.

Чтобы получить возможность редактировать, добавлять или удалять записи таблиц Izdelie и Zakazcik, писать программный код не требуется. Данные вводятся в сетку DBGrid набором с клавиатуры. Курсор при этом должен быть установлен в нужное поле. Выбор необходимой операции осуществляется с помощью соответствующих кнопок компонента DBNavigator.

Организовать добавление новых записей в таблицы Naklad и Snakl с помощью элемента DBGrid довольно сложно. В таблицах хранятся значения ключей из других таблиц (например, в поле NZKod). Редактировать такие значения вручную, не зная, какому названию соответствует значение, бессмысленно. Добавление новых записей в такие таблицы проще осуществлять в отдельных формах программы.

Создадим новую рабочую форму «Новая накладная» командой File > New > FormDelphi for Win 32. Сохраним модуль этой формы под именем fmNewNakUnit и добавим его в проект Sale командой Project > Add to Project. Изменим свойства:

Caption = ‘Новая накладная’ BorderStyle = bsDialog

Name = FNewNak BorderWidth = 2

Height = 219 Width = 385

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели кнопки BitBtn1 (Kind = bkOK) и BitBtn2 (Kind = bkCancel). В оставшейся свободной части формы разместим компонент Pane12 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компоненты Edit1 (Номер ТТН), Edit2 (Дата отгрузки), Edit3 (Сумма отгрузки), DBLookupComboBox1 (Наименование заказчика), DBEdit1 (Код заказчика). Разместим также все необходимые подписи.

Командой File > Use Unit свяжем модуль fmNewNakUnit с модулем данных dmSaleUnit. Сохраним все сделанные изменения. Для компонента DBLookupComboBox1 в свойстве DataSource выберем значение DM ->DataNaklad, в свойстве DataField – значение Naim. Для компонента DBEdit1 в свойстве DataSource выберем значение DM ->DataZakazcik, в свойстве DataField – значение ZKod (рис. 12).

Рис. 12. Рабочее окно «Новая накладная»

Программное внесение изменений в поля текущей записи выполняется с помощью обычных операторов присваивания. Поля текущей записи хранятся в свойстве НД Fields. Это список элементов типа TField, описывающих конкретные поля. Нумерация полей начинается с нуля. Класс TField имеет набор свойств, позволяющих обращаться к каждому полю в зависимости от его типа в БД (табл. 5).

Таблица 5

Свойство

Назначение

Свойство

Назначение

AsString

AsBoolean

AsDateTime

AsCurrency

Формат String

Формат Boolean

Формат DateTime

Формат Currency

AsFloat

AsInteger

AsVariant

Формат Double

Формат Integer

Формат Variant

Определим, как программа будет работать при вызове окна добавления новой записи. Условимся, что пользователь всегда вводит правильные значения.

ВНИМАНИЕ! При вводе данных совершаются самые разные ошибки. Для БД такая ситуация может закончиться потерей большого объема данных. Поэтому всегда необходимо контролировать возникновение конфликтов с помощью блока try / except и осуществлять проверки корректности введенных значений.

Создадим обработчик события OnClick для кнопки BitBtn1 формы:

procedure TFNewNak.BitBtn1Click(Sender: TObject);

begin

with DM.ADONaklad do

begin

Fields[0].AsString:=Edit1.Text;

Fields[1].AsDateTime:=StrToDateTime(Edit2.Text);

Fields[2].AsCurrency:=StrToCurr(Edit3.Text);

Fields[3].AsString:=DBEdit1.Text;

Post;

end;

end;

Создадим обработчик события OnClick для кнопки BitBtn2 формы:

procedure TFNewNak.BitBtn2Click(Sender: TObject);

begin

DM.ADONaklad.Cancel;

end;

Свяжем вызов рабочей формы «Новая накладная» с соответствующим пунктом контекстного меню рабочей формы «Обработка накладных». Щелкнем правой кнопкой мыши на компоненте PopupMenu1 на этой форме. Выберем пункт Menu Designer. Для первого элемента меню (объект N1) в свойстве Caption укажем – «Ввод новой ТТН». Напишем процедуру обработки события OnClick для этого элемента меню:

procedure TFObrNak.N1Click(Sender: TObject);

begin

DM.ADONaklad.Insert;

FNewNak.ShowModal;

end;

Для формы FObrNak раскроем список значений свойства PopupMenu и выберем элемент PopupMenu1. Командой File > Use Unit добавим модуль fmNewNakUnit в раздел implementation модуля fmObrNakUnit.

Создадим новую форму «Новая строка накладной» командой File > New > FormDelphi for Win 32. Сохраним модуль формы под именем fmNewSnaUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства:

Caption = ‘Новая строка накладной’ BorderStyle = bsDialog

Name = FNewSna BorderWidth = 2

Height = 219 Width = 385

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели кнопки BitBtn1 (Kind = bkOK) и BitBtn2 (Kind = bkCancel). В оставшейся свободной части формы разместим компонент Pane12 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компоненты DBEdit1 (Номер ТТН), DBLookupComboBox1 (Наименование изделия), DBEdit2 (Код изделия), DBEdit3 (Цена изделия), Edit1 (Отгруженное количество). Разместим необходимые подписи.

Командой File > Use Unit свяжем модуль fmNewSnaUnit с модулем данных dmSaleUnit. Сохраним изменения. Для компонента DBEdit1 в свойстве DataSource выберем значение DM ->DataSnakl, в свойстве DataField – значение SnNNom. Для компонента DBLookupComboBox1 в свойстве DataSource выберем DM ->DataSnakl, в свойстве DataField – значение Name. Для компонента DBEdit2 в свойстве DataSource выберем значение DM ->DataIzdelie, в свойстве DataField – значение IKod. Для компонента DBEdit3 в свойстве DataSource выберем DM ->DataIzdelie, в свойстве DataField – значение ICena (рис. 13).

Рис. 13. Рабочее окно «Новая строка накладной»

Создадим обработчик события OnClick для кнопки BitBtn1 формы:

procedure TFNewSna.BitBtn1Click(Sender: TObject);

begin

with DM.ADOSnakl do

begin

Fields[0].AsString:=DBEdit1.Text;

Fields[1].AsString:=DBEdit2.Text;

Fields[2].AsInteger:=StrToInt(Edit1.Text);

Post;

end;

end;

Создадим обработчик события OnClick для кнопки BitBtn2 формы:

procedure TFNewSna.BitBtn2Click(Sender: TObject);

begin

DM.ADOSnakl.Cancel;

end;

Свяжем вызов формы «Новая строка накладной» с соответствующим пунктом контекстного меню рабочей формы «Обработка накладных». Щелкнем правой кнопкой мыши на компоненте PopupMenu1, расположенном на этой форме. Выберем пункт Menu Designer. Для второго элемента меню (объект N2) в свойстве Caption укажем – «Ввод новой строки ТТН». Напишем процедуру обработки события OnClick для этого элемента меню:

procedure TFObrNak.N2Click(Sender: TObject);

begin

DM.ADOSnakl.Insert;

FNewSna.ShowModal;

end;

Командой File > Use Unit добавим модуль fmNewSnaUnit в раздел implementation модуля fmObrNakUnit.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]