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

преобразуван в 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
След като се върнете към формуляра за приемане на поръчка, вие вземате окончателното решение да продадете автомобила. Потребителят има последната възможност да се откаже. След натискане на бутона "Регистрация на фактура" транзакцията е завършена.