2009-09-26 2 views
7

Мне интересно, какие идеи могут улучшить процесс разработки решений с использованием языка программирования Access и VBA. Конечно, я не говорю о лучших методах программирования в целом, но только о них, непосредственно связанных с Access и VBA.Рекомендации по программированию доступа

Все знают, что VBA имеет плохую объектно-ориентированную поддержку программирования, нет наследования, полиморфизма и т. Д. Итак, как обеспечить DRY и KISS за один раз? Есть несколько решений, как реализовать общие в других языках шаблоны и стратегии в VBA, но, откровенно говоря, они часто сложнее. Какие из них стоит реализовать?

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

+2

Я просто хочу сказать, что это большой вопрос. Требуется много дисциплины, чтобы избежать DRY в доступе, но это можно сделать. Но нет абсолютно никаких препятствий для смешивания логики ui и biz. Но я думаю, что важно помнить, что точка доступа чрезвычайно быстро развивается. Access - это самая быстрая платформа разработки приложений для Windows. Так что у него есть место. Seth –

ответ

2

Я хотел бы добавить здесь некоторые другие вопросы и ответы, связанные с тем же вопросом. Указатели могут привести к моему собственному ответу на эти вопросы, но не стесняйтесь просматривать другие ответы!

MS Access as enterprise software

Best way to test an MS-Access application

Working with multiple programmers on MS-Access

Recommendations on using SQL server GUIDS from MS-Access

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

  • «AllMyForms» объект, который на самом деле поддерживать 2 коллекции объектов: один стандартный сбор форм доступа, другой является сбор всех экземпляров объекта «customForm». Обе коллекции индексируются с помощью свойства hwnd открытой формы (или, более конкретно, свойства hwnd экземпляра формы, что позволяет мне открывать несколько экземпляров одной и той же формы).

  • «customForm» объект, который перечисляет свои собственные свойства и методы экземпляра формы в

Таким образом, я могу сослаться на такие свойства, как:

accessForms: ссылка к стандартным свойствам и методам

AllMyForms.accessForm(hwnd).name 

относится к .nam е свойство формы доступа через его .hwnd значение

Кстати, следующий Debug.Print затем дать мне тот же результат:

? screen.ActiveForm.name 
? AllMyForms.accessForm().name 'default value for hwnd is screen.activeForm.hwnd' 

Пользовательские формы: свойства

AllMyForms.customForm(hwnd).selectClause 

будет ссылаться на предложение SELECT, используемое для создания базового набора записей экземпляра формы

Настраиваемые формы: методы

Метод .agregate, доступный для настраиваемого объектаForm, рассчитает сумму/min/max/avg формы «столбец» (т.е. сумма значений для элемента управления в непрерывной форме) :

AllMyForms.customForm().agregate("lineAmount","sum") 

даст мне сумму всех значений «lineAmount» отображается на текущем/активный экземпляр формы.

+0

Я предполагаю, что ваша точка зрения о свойствах/методах клиента заключается в том, что вы не можете добавить их все в одном месте, то есть по умолчанию вам нужно добавить их в модуль класса каждой формы? Но это может быть выполнено с помощью автономной оболочки модуля вокруг ваших форм, и похоже, что это именно то, что вы сделали. Можете ли вы это уточнить? –

+0

Хотя я понимаю значение оболочки customForm(), я не вижу значения вашей коллекции пользовательских форм. Я не вижу, что он предоставляет, который еще не доступен в существующих коллекциях Access. –

+0

Некоторые пояснения: основная идея состоит в том, чтобы иметь возможность добавлять собственные свойства/методы в формы (что означает примеры форм доступа). У меня есть одна уникальная процедура для открытия такого экземпляра с помощью метода allMyForms.open myFormName, mySelectQuery (если есть) и т. Д. ».Каждый раз, когда этот метод вызывается, я добавлю один элемент в частную коллекцию o_AccessForms, являясь новым экземпляром существующей формы. Я также добавлю один элемент в коллекцию o_CustomForms, являясь новым экземпляром моего объекта «customForm». Делая это, я могу получить доступ как к стандартным свойствам, так и к пользовательским свойствам моих открытых форм. –

2

Окончательный источник для наилучшей практики в области программирования Access эта книга:

Access Handbook 2002 Desktop разработчика
http://www.amazon.com/Access-2002-Desktop-Developers-Handbook/dp/0782140092

Вы должны получить копию, если вы серьезно о программировании в доступе. Эти ребята - эксперты.

Я понимаю, что книга кажется датированной, но вся информация в ней по-прежнему применяется. Я полагаю, он никогда не обновлялся, потому что такой вид развития - это немного нишевая область. Но Access не изменил все так много внутри (это один из оставшихся оставшихся инструментов разработки программного обеспечения, который все еще использует то, что составляет диалект VB6), и большая часть информации в книге по-прежнему хороша.

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

Access 2002 Enterprise разработчика
http://www.amazon.com/Access-2002-Enterprise-Developers-Handbook/dp/0782140106

+0

Две из моих любимых книг все время. У меня было каждое издание первого. –

0

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

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

Смежные вопросы