Программирование >>  Разработка пользовательского интерфейса 

1 ... 107 108 109 [ 110 ] 111 112 113 ... 147


Д Vim) Fjniul Fan) inh Eintfan iidim Ц#

Ifoivetf ЧЛ1Анд1гй:-. ........ Топлива;

Tent?

Те !}

Т*я1Л

TejIlS

Test7

I \ii Гя13 JatjTali]

mm ИДИ

.tie (MtK-I

Wed 1

1Гпг1пТ


Рис. 9.14.

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

Как видно из рис. 9.14, напротив каждого объекта находится маленькая пиктограмма, служащая для облегчения определения типа объекта. Кроме того, кнопки By Row и By Column позволяют быстро автоматически определить требуемый порядок, хотя на сложных формах их применение может и не дать желаемого результата. Добившись нужного порядка активизации объектов, нажмите кнопку OK.

В этой форме мы допустили возможность транспортировки данных в Microsoft Word и Microsoft Excel (с построением диаграммы). Как мы это сделали, будет рассказано в следующей главе.

Описанные в данной главе формы используются в примере SAMPLE.EXE, поставляемом на дискете.

Создание формы Прием заказов на Access

Мы уже неоднократно упоминали о широких возможностях Access как хорошего помощника в нелегком труде программиста. Здесь мы сосредоточимся на создании относительно сложной формы, при проектировании которой только Мастерами не обойтись.

Так же как в Visual FoxPro, основным инструментом для проектирования формы в Access является Конструктор формы, показанный на рис. 9.15. Для создания новой формы с помощью Конструктора формы в контейнере БД активизируйте вкладку Форма и нажмите кнопку Создать. В появившемся диалоговом окне Новая форма выберите в списке пункт Конструктор.

Для изменения порядка перехода нажмите клавишу Shift и кнопку мыши над нужным объектом. При этом номер объекта будет убран, а все остальные объекты перенумерованы. При повторном нажатии объект будет помещен в конец списка. Очевидно, что применение данного метода для большой формы займет довольно много времени.

Более быстрый метод состоит в нажатии на первый объект в последовательности без нажатия на клавишу Shift. При этом объекту присваивается номер один, а все остальные номера исчезают. Затем, нажимая Shift, обойдите все остальные объекты в нужном порядке. Когда все сделано, нажмите кнопку Reorder.

Второй способ изменения порядка активизации полей - с помощью списка. В этом случае после выбора пункта меню Tab Order откроется диалоговое окно, показанное на рис. 9.14.



Па№ль имсгрументов для размещения объеетоа на форме

I 1 t г t I I 5 I ь I


if - .Jill

Макет I n iHht*e С0Бмтня Дду * вся

Текущая запись .....

ййссеаки ....

Пйслв встйвки......

До ввн селения.................

Уйалвний .................

Qo muTMpiiuewn Del........

ПоЕге поат1армлв №)аОв1

Откры+мв .......

Эвгрруам...........

ftpywfl .....

Закрптис .. ...

Потеря рокусв. .. К и<стие инолки

Окно проегплроеаниа фор/чь1

Окно задания свойств для формы и ее объектов Рис. 9.15. Конструктор формы в Access 7.0

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

Как правило, это панели Конструктор Форм, Панель орматирования и Панель элементов.

Для нашего примера мы объявили переменные объектного типа на уровне модуля для того, чтобы они были видны из всех процедур всех модулей текущей базы данных, а при создании ссылки на эту базу данных - и из других баз данных.

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

для начала и конца транзакций

Public mywksp As Workspace

Public mywksp1 As Workspace

Создание переменных наборов данных

Public rstOrd As Recordset

Public rstcust As Recordset

Public rstAc As Recordset

Объекты типа Workspace необходимы нам для начала, завершения и отката транзакций. Объекты типа Recordset будут использоваться для работы с необходимыми нам данными, так как в некоторых случаях нам придется использовать формы, которые не имеют источника данных и соответственно не могут иметь связанных с какими-либо полями элементов управления. Например, форма Прием заказов не имеет источника данных.

Прием заказа начинается с нажатия на кнопку с соответствующим названием - Прием заказа . После этого выполняется следующий код:

Private Sub Кнопка1 Click()

Это строка условия поиска продавца в таблице Salesman

Dim strSearch As String Инициализируем переменную рабочего пространства

Set mywksp = DBEngine.Workspaces(0) Инициализируем переменную набора данных

Set rstOrd = mywksp.Databases(0).OpenRecordset( order , начинаем транзакцию

mywksp.BeginTrans

Строка для поиска кода продавца создается из названия поля

Last name и login текущего пользователя приложения

strSearch = Last name= & Chr(34) & mywksp.UserName & Chr(34)

Добавляем запись

rstOrd.AddNew

dbOpenDynaset)



Идентификатор продавца заносится в новую добавленную запись

rstOrd!key salman = DLookup( key salman , salesman , strSearch)

rstOrd.UPDATE

Me!cmbCust.Enabled = True

Me!txtFam.Enabled = True

End Sub

В результате выполнения этого кода в таблицу order вносится одна запись, но, обратите внимание, началась транзакция. Эти изменения еще не окончательные, мы можем при определенных обстоятельствах сделать откат. При работе программы предполагается, что каждый продавец, оформляющий сделку, будет запускать приложение со своим пользовательским именем, а с помощью этого имени будет находиться идентификатор, который и попадет в новую запись таблицы order . Для этого мы используем свойство Username объекта mywksp.

strSearch = Last name= & Chr(34) & mywksp.UserName & Chr(34) Добавляем запись rstOrd.AddNew

Идентификатор продавца заносится в новую добавленную запись

rstOrd!key salman = DLookup( key salman , salesman , strSearch)

После чего необходимо заняться поисками покупателя в предположении, что он уже совершал покупку до этого, либо ввести данные о нем в базу данных. При этом данные о покупателе будут сохраняться даже в том случае, если покупка не будет совершена, так как в дальнейшем вы можете использовать его адрес и имя для рассылки рекламных проспектов, приглашений на презентацию, для статистической обработки (жители какого квартала действительно покупают автомобили, а какого любят просто заходить в магазин) и для прочих нужд (зайти к клиенту в гости, находясь по соседству). С этой целью мы начинаем параллельную транзакцию в коде события Click, кнопки с подписью Новый клиент :

Private Sub cmbNcl Click()

Set mywksp1 = DBEngine.Workspaces(0)

Set rstcust = mywksp1.Databases(0).OpenRecordset( customer , dbOpenDynaset) mywksp1. Beg i nTrans

DoCmd.OpenForm Клиенты , acNormal, , , acAdd End Sub

Эта транзакция завершится уже в форме Клиенты . При этом, несмотря на все прекрасные перспективы дальнейшего использования данных о клиенте, существует возможность отката и в этом случае, например, если клиент вдруг неожиданно скроется, не успев назвать свой адрес и факс. Без них он для вас неинтересен.

Если клиент настаивает на том, что он совершал у вас покупку, то можно поискать его в вашей базе данных с помощью комбинированного списка. Применение фильтра ускорит поиск, фильтр можно установить с помощью единственного текстового поля, которое присутствует в нашей форме. Этого мы добиваемся с помощью кода, который выполняется при наступлении события LostFocus (Потеря фокуса):

Private Sub txtFam LostFocus() If Len(Trim(txtFam)) >> 0 Then

Me!cmbCust.RowSource = SELECT DISTINCTROW customer.key customer,customer.name customer,

customer.address, customer.tel FROM customer Where customer.name customer

like & Chr(34) & Trim(txtFam) &

* & Chr(34) & ;

Else

Me!cmbCust.RowSource = SELECT DISTINCTROW customer.key customer,customer.name customer, customer.address, customer.tel FROM customer ;

End If End Sub

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



1 ... 107 108 109 [ 110 ] 111 112 113 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика