(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Работа с формами в Access

Источник: Accessoft

Ещё делая первый свой крупный проект, лет этак шесть назад, я пришел к выводу, что на экране должна находиться только одна форма. Несколько одновременно открытых форм загромождают рабочее поле, возникает возможность случайного переключения между открытыми формами, что может привести к ошибкам. (Правда, иногда наличие нескольких форм на экране оправдано. Например, из большой формы ты можешь вызвать какой-нибудь справочник, чтобы посмотреть нужное значение или откорректировать его.) Использование модальных форм не всегда оправдано. Например, при выводе на экран отчета из модальной формы, эта форма остается на экране поверх отчета. Что не очень-то красиво. Пришлось сесть за разработку интерфейса. После нескольких экспериментов, я пришел к выводу, что при вызове одной формы из другой, надо делать родительскую форму невидимой, а при закрытии - восстанавливать видимость. Единственное условие - передача в дочернюю форму имени родительской формы. Здесь можно использовать три метода. (По крайней мере, я додумался до трех.)

  1. Использовать глобальную текстовую переменную. В момент открытия формы, считывать из неё имя родительской формы, помещать в локальную переменную, а в глобальную записывать своё имя открываемой формы. При вызове следующей формы, операция повторяется. Таким образом, в глобальной переменной хранится имя текущей активной формы. При закрытии формы сначала в глобальную переменную помещается имя родительской формы из локальной переменной, затем закрывается текущая форма и управление передается родительской форме.
  2. Передавать имя родительской формы через аргументы команды DoCmd.OpenForm
  3. Передавать имя родительской формы через тег (Tag) загружаемой формы.

Каждый способ имеет как свои преимущества, так и недостатки. В конце концов, мне надоело выписывать строки кода в каждой форме, по этому я сделал две подпрограммы и вынес их в отдельный модуль.

Вот пример реализации управления видимостью форм при передаче имени по третьему методу.

Подпрограмма открытия формы

Public Sub GotoForm(Name As String, Optional MyForm As Variant, Optional StrWhere As Variant, Optional StrArg As String)
' Параметры подпрограммы GotoForm
' Name as String - имя загружаемой формы
' MyForm as Variant - имя закрываемой формы (опционально)
' StrWhere as Variant - cтроковое выражение, представляющее допустимое
' предложение SQL WHERE без ключевого слова
' WHERE (опционально)
' StrArg as String - аргументы открытия (опционально)
On Error GoTo Err_GotoForm
Dim stDocName As String
Dim stLinkCriteria As String
Dim strHide As String
' определяется имя активной формы
    strHide = Screen.ActiveForm.Name
' активная форма делается невидимой
    Screen.ActiveForm.Visible = False
' проверяется наличие условий
    If Not IsMissing(StrWhere) Then
        If Len(StrWhere) > 0 Then
            DoCmd.OpenForm Name, acNormal, , StrWhere, , , StrArg
' проверяется наличие закрываемой формы
            If Not IsMissing(MyForm) Then
                DoCmd.Close acForm, strHide
            Else
                Screen.ActiveForm.Tag = strHide
            End If
            Exit Sub
        End If
    End If
' если нет условий на открытие формы
    DoCmd.OpenForm Name, acNormal, , , , , StrArg
' проверяется наличие закрываемой формы
    If Not IsMissing(MyForm) Then
        DoCmd.Close acForm, strHide
    Else
        Screen.ActiveForm.Tag = strHide
    End If
Exit_GotoForm:
    Exit Sub
Err_GotoForm:
    MsgBox Err.Description
    Resume Exit_GotoForm
End Sub

****************************************************

Функция закрытия формы

Public Function fnCloseForm() As Long
' Данная функция закрывает текущую форму и делает
' видимой родительскую форму
On Error GoTo Err_fnCloseForm
Dim strUnhide As String
Dim Name As String
' определяется имя активной формы
    Name = Screen.ActiveForm.Name
' определяется наличие родительской формы
    If Nz(Screen.ActiveForm.Tag) = "" Then
        DoCmd.Close acForm, Name
    Else
        strUnhide = Screen.ActiveForm.Tag
        DoCmd.Close acForm, Name
        DoCmd.SelectObject acForm, strUnhide
    End If
' если при выполнении функции не произошло ошибки
    fnCloseForm = 0
Exit_fnCloseForm:
    Exit Function
Err_fnCloseForm:
' если при выполнении функции произошла ошибка
' MsgBox Err.Description
    fnCloseForm = Err.Number
    Resume Exit_fnCloseForm
End Function

Эти две подпрограммы надо применять совместно. Код конечно далек от идеала, например подпрограмму GotoForm можно представить в виде:

Public Sub GotoForm(Name As String, Optional MyForm As Variant, Optional StrWhere As String, Optional StrArg As String)
' Параметры подпрограммы GotoForm
' Name as String - имя загружаемой формы
' MyForm as Variant - имя закрываемой формы (опционально)
' StrWhere as String - cтроковое выражение, представляющее допустимое
' предложение SQL WHERE без ключевого слова
' WHERE (опционально)
' StrArg as String - аргументы открытия (опционально)
On Error GoTo Err_GotoForm
Dim stDocName As String
Dim strHide As String
' определяется имя активной формы
    strHide = Screen.ActiveForm.Name
' активная форма делается невидимой
    Screen.ActiveForm.Visible = False
' открывается новая форма
    DoCmd.OpenForm Name, acNormal, , StrWhere, , , StrArg
' проверяется наличие закрываемой формы
    If Not IsMissing(MyForm) Then
        DoCmd.Close acForm, strHide
    Else
        Screen.ActiveForm.Tag = strHide
    End If
Exit_GotoForm:
    Exit Sub
Err_GotoForm:
    MsgBox Err.Description
    Resume Exit_GotoForm
End Sub

Оба варианта работоспособны, причем второй проще и красивее. Прошу не слишком ругать, я эти подпрограммки сочинил, когда из всей литературу по Access у меня была книга "Access 97 - шаги к эффективной работе" (что-то вроде "Access за 24 часа") и хелп к самому Access 97.

Эти подпрограммы по существу являются "обертками" стандартных команд Access. Их можно изменять и дорабатывать под свой вкус. Но и в таком виде они решают большинство стоящих перед Вами задач. А если надо, то добавьте новые параметры. Скачать пример реализации работы форм Вы можете ниже.

Ссылки по теме

Файлы для загрузки


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Microsoft »
Обсудить материал в конференции Дизайн, графика, обработка изображений »
Написать редактору 
 Рекомендовать » Дата публикации: 31.10.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Отправка и прием факсов с GFI FAXmaker превращается в эффективный, простой и быстрый процесс, решая все проблемы ручной отправки документов, включающий в себя обслуживание факс-аппаратов. GFI FAXmaker позволяет пользователя отправлять и ... GFI FAXmaker including 1 year SMA from 5 to 9 users
Электронный ключ Microsoft Office для Дома и Учебы 2013. Язык интерфейса - Русский. Для установки и использования на 1 ПК. Не предназначен для коммерческого использования. Срок поставки - в течении 1 дня. Купить Microsoft Office для Дома и Учебы 2013 Russian, полная версия, электронный ключ
Электронный ключи Microsoft Outlook 2013. Язык интерфейса - Русский. Купить Microsoft Outlook 2013 Russian, полная версия, электронный ключ
Русская версия. Программа обновления Windows Anytime Upgrade — это новый способ обновления одной версии системы Windows 7 до другой (например версии Windows 7 Home Basic до Windows 7 Home Premium) через Интернет. Microsoft Windows Anytime Upgrade (WAU) Windows 7 Starter to Home Premium UPG (WAU WinStrtr to HPrem 7 Russian UPG)
Получите подписку на 1 год, включающую приложения Word, Excel, PowerPoint и Outlook и облачное хранилище OneDrive для 1 ПК или компьютера Mac и 1 планшета iPad или под управлением Windows. Вся языки. Microsoft Office 365 Персональный 32-bit/x64 Подписка на 1 год, на 1 пользователя (1ПК+1 моб.устройство), электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
Воспользуйтесь новыми стандартами в трехмерной печати! Четвертое поколение принтеров от компании MakerBot является лучшим настольным 3D принтером, предлагаемым в настоящее время на рынке.  С разрешающей способностью в 100 микрон и объемом печати 6700... MakerBot Replicator 2
3D принтер ProJet 1500 – персональный принтер, использующий технологию FTI, также как V-flash. Он также применяет пластик в качестве модельного материала. Его главное отличие от V-flash – работает материалами шести цветов, что позволяет получать... 3D принтер ProJet 1500
Новые стандарты в персональной 3D печати! Профессиональный персональный 3D-принтер MakerBot Replicator устанавливает новые стандарты в мире 3D-печати. Область печати на 11% больше, чем у MakerBot Replicator 2. MakerBot Replicator 5th GEN
Пластик этого цвета был специально создан по нашей спецификации, и он получился ярким, кричащим и блестящим на солнце. Также он отлично выглядит при люминесцентном освещении. Мы потратили много времени, чтобы добиться этого результата и пользователи... Катушка ABS-пластика Myriwell 1.75 мм 1кг., красная
CubeX Duo - имеет 2 печатающие головки, в отличие от CubeX, что позволяет одновременно печатать двумя цветами, но при этом снизилась область построения (230 × 265 × 240 мм). CubeX Duo
 
Другие предложения...
 
Книжный магазин   WWW.ITSHOP.RU
Рассмотрены приемы разработки на языке РНР интерактивных Web-сайтов, извлекающих данные из баз MySQL. Отмечены особенности новейших версий РНР 6 и MySQL 6. Для написания простейших страниц используется популярный Web-редактор Adobe Dreamweaver CS4,... PHP 5/6, MySQL 5/6 и Dreamweaver CS4. Разработка интерактивных Web-сайтов
Сегодня как никогда остро стоит проблема адаптивного веб-дизайна. Все больше планшетных компьютеров, смартфонов и даже телевизоров используется для выхода в Интернет. Разработчикам веб-страниц требуется принимать во внимание огромное разнообразие... HTML5 и CSS3. Разработка сайтов для любых браузеров и устройств
Книга предназначена для освоения методики создания двумерных объектов и трехмерных моделей в системе AutoCAD 2014. Рассматриваются процессы параметризации, аннотирования и визуализации, средства коллективной работы с применением облачных ресурсов.... Самоучитель AutoCAD 2014
Самоучитель не только расскажет, но и покажет, как пользоваться Windows 8. Шаг за шагом, изучая материал последовательно, с помощью подробно иллюстрированных инструкций вы узнаете все об этой самой современной операционной системе, которая максимально... Современный самоучитель Windows 8. Цветное пошаговое руководство
В курсе изложены основы системного анализа, синтеза и моделирования систем, которые необходимы при исследовании междисциплинарных проблем, их системно-синергетических основ и связей. Курс предназначен для студентов, интересующихся не только тем, как... Введение в анализ, синтез и моделирование систем. Учебное пособие
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Adobe Photoshop: алхимия дизайна
Delphi - проблемы и решения
Работа в Windows и новости компании Microsoft
CASE-технологии
 
Рассылки Maillist.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Adobe Photoshop - уроки для каждого
Delphi - проблемы и решения
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
AutoCAD помощь чайнику (158)
Здравствуйте, Я только начал осваивать AutoCAD. Слышал такое определение как лимиты чертежа,...
 
Пишу программы на заказ профессионально (1199)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Программы Delphi на заказ (131)
Пишу программы в среде Delphi на заказ http://bddelphi.ucoz.ru/
 
70-671 экзмен на русском языке. (356)
Уже в третий раз пытался сдать экзамен MSP 70-671 на русском языке и все без результатно,...
 
автокад для чайников (42)
Добрый день! Возник вопрос по чертежам для инженерной графики на 1 курсе МГСУ. Все чертят...
 
 
 



    
rambler's top100 Rambler's Top100