Създаване на формуляр - Приемане на поръчки - в Access

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

Точно както във Visual FoxPro, основният инструмент за проектиране на формуляри в Access е Form Designer, показан на фигура 1. 9.15. За да създадете нов формуляр с помощта на Form Builder в контейнера на DB, активирайте раздела Form и щракнете върху бутона New. В диалоговия прозорец Нов формуляр, който се показва, изберете Дизайн от списъка.

customer

преобразуван в PDF от HupBaH9I

Ориз. 9.15. Дизайнер на формуляри в Access 7.0

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

По правило това са Дизайнерът на формуляри, Панелът за форматиране и Панелът с елементи. За нашия пример ние сме декларирали променливи от тип обект на ниво модул, за да

така че да са видими от всички процедури на всички модули на текущата база данни, а при създаване на връзка към тази база данни - от други бази данни.

„ Създайте променливи на работното пространство, които да се използват “ за стартиране и край на транзакции

Публично mywksp като работно пространство Публично mywksp1 като работно пространство

' Създаване на променливи набори от данни

Public rstOrd As Recordset Public rstcust As Recordset Public rstAc As Recordset

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

Приемането на поръчка започва с натискане на бутона със съответното име – „Приемане на поръчка“. След това се изпълнява следният код:

Частен подбутон 1_Click()

' Това е низът на думата за търсене за продавача в таблицата Salesman Dim strSearch As String

' Инициализирайте променливата на работното пространство

Задайте mywksp = DBEngine.Workspaces(0)

' Инициализирайте променливата на набора от данни

Set rstOrd = mywksp.Databases(0).OpenRecordset("order_", _ dbOpenDynaset) ' стартиране на транзакция

' Низът за търсене на кода на продавача се създава от името на полето ' Фамилия и вход на текущия потребител на приложението

strSearch = "Фамилно_име=" & Chr(34) &_ mywksp.UserName & Chr(34) ' Добавяне на запис

преобразуван в PDF от HupBaH9I

' ID на продавача се въвежда в новодобавения запис rstOrd!key_salman = DLookup("key_salman",_"salesman", strSearch) rstOrd.UPDATE

Me!txtFam.Enabled = True End Sub

Този код води до един запис в таблицата order_, но имайте предвид, че транзакцията е започнала. Тези промени все още не са окончателни, може да ги върнем при определени обстоятелства. Когато програмата работи, се предполага, че всеки продавач, който прави сделка, ще стартира приложението със собственото си потребителско име и с помощта на това име ще има идентификатор, който ще попадне в нов запис в таблицата order_. За да направим това, използваме свойството Username на обекта mywksp.

strSearch = "Фамилно_име=" & Chr(34) &mywksp.UserName &_ Chr(34) ' Добавяне на запис

' ID на продавача се въвежда в новия ' добавен запис

rstOrd!key_salman = DLookup("key_salman",_ "продавач", strSearch)

Частен под cmbNcl_Click()

Задайте mywksp1 = DBEngine.Workspaces(0)

Задайте rstcust = mywksp1.Databases(0).OpenRecordset("клиент", _ dbOpenDynaset) mywksp1.BeginTrans

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

Ако клиент настоява, че е пазарувал от вас, можете да търсите в базата данни с помощта на разгъващ се списък. Прилагането на филтър ще ускори търсенето, филтърът може да бъде зададен с помощта на единственото текстово поле, което присъства в нашата форма. Постигаме това с код, който се изпълнява при възникване на събитието.

LostFocus:

Частен под txtFam_LostFocus()

Ако Len(Trim(txtFam)) >> 0 Тогава Me!cmbCust.RowSource = "SELECT DISTINCTROW _ customer.key_customer,customer.name_customer,_

customer.address, customer.tel FROM customer Where _ customer.name_customer като " & Chr(34) & Trim(txtFam) &_

Me!cmbCust.RowSource = "ИЗБЕРЕТЕ DISTINCTROW _ customer.key_customer,customer.name_customer, _ customer.address, customer.tel ОТ клиент ;"

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

преобразуван в PDF от HupBaH9I

за четене и писане.

След избора на клиента е необходимо да изберете автомобила за него. За това е предназначен формулярът "Наличност на автомобили, дата на издаване, цена", който се извиква с помощта на бутона "Избор на автомобил". Използва се методът OpenForm на обектаDoCmd:

Private Sub cmbCAuto_Click() DoCmd.OpenForm _

„Наличност на превозно средство, дата на пускане, цена“, acNormal End Sub

Формата "Наличност на автомобили, дата на пускане, цена" има набор от свойства RecordSource. Източникът на данни за този формуляр е заявка със същото име. Има две комбинирани полета за търсене на автомобили: първото филтрира данните по име на производителя, а второто филтрира данните по модел. След това от ограничен списък с данни можете лесно да изберете автомобил за вашия клиент. Това използва прекрасното свойство на формулярите да използват филтър и да го променят динамично. Това става ясно от следния кодов фрагмент. Както беше отбелязано много пъти преди, Access работи много по-бързо с филтрирани данни, особено ако не ги променяте, а просто ги преглеждате.

Private Sub name_model_AfterUpdate() Ако Len(Trim(name_model)) >> 0 Тогава

Me.Filter = "name_model=" & Chr(39) _ & Me!name_model & Chr(39) & _

"и name_firm=" & Chr(39) & Me!name_firm & Chr(39) Me.FilterOn = True

Частен подбутон 9_Click() DoCmd.OpenForm "Подробности за модела", _

acNormal, , "[Име_модел]=" & Chr(39) & _Аз![име_модел] & Chr(39), acReadOnly End Sub

След като сте избрали превозно средство, което е подходящо за вашия клиент, можете да прехвърлите контрола върху формата „Приемане на поръчки“. Това започва да попълва таблицата на акаунта. Но, както си спомняте, всичко това се случва в рамките на транзакция, така че промените все още не са окончателни.

Частен подбутон 8_Click() Dim FStr като низ

FStr = "name_customer=" & Chr(39) &_ Формуляри![ Приемане на поръчки].cmbCust & Chr(39) КомплектrstAc = mywksp.Databases(0).OpenRecordset("акаунт", _ dbOpenDynaset) rstAc.AddNew

rstAc!key_customer = DLookup("key_customer", _ "customer", FStr) rstAc!key_auto = Me!key_auto

rstAc!date_write = Now() rstAc.UPDATE

Формуляри![ Приемане на поръчки].cmbAc.Enabled = True

DoCmd.Close acForm, "Наличност на превозни средства,_ дата на издаване, цена" End Sub

След като се върнете към формуляра за приемане на поръчка, вие вземате окончателното решение да продадете автомобила. Потребителят има последната възможност да се откаже. След натискане на бутона "Регистрация на фактура" транзакцията е завършена.