2009-05-21 3 views
7

Я создал приложение MS Access 2003, настроенное как разделенная интерфейсная/конечная конфигурация, с группой пользователей, состоящей из пяти человек. Передний конец .mdb находится на сетевом файловом сервере и содержит все запросы, формы, отчеты и код VBA, а также ссылки на все таблицы в back.mdb и некоторые ссылки на источники данных ODBC, такие как AS/400. Задний конец находится на одном сетевом файловом сервере, и в нем есть только данные таблицы.Как настроить среду разработки в MS Access

Это работало хорошо, пока я не «поехал вживую», и мои горстки пользователей начали придумывать запросы на улучшение, отчеты об ошибках и т. Д. Я развертывал новый код, разрабатывая/тестируя в своей собственной копии front- end .mdb в другой сетевой папке (которая связана с одним и тем же back-end .mdb), а затем отправляйте мой завершенный файл в папку «come-and-get-it», предупреждая пользователей, и они идут копировать/вставлять новый внешний файл в свои собственные папки в сети. Таким образом, каждый пользователь может обновить свой интерфейс, когда он находится в «точке остановки», не загружая всех сразу.

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

Затем, в другое время, нет никакого запаздывания.

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

Но мне интересно, есть ли еще лучший способ настроить мой собственный back-end .mdb для разработки, поэтому я могу тестировать свой код на «безопасные» данные, а не на те же данные в реальном времени, что и остальные пользователи. Я боюсь, что это только вопрос времени, прежде чем я испортил некоторые данные, возможно, в самый опасный момент.

Очевидно, что я мог бы просто создать отдельный back-end .mdb и вручную перенастроить ссылки на таблицы в интерфейсе каждый раз, используя Менеджер связанных таблиц. Но я надеюсь, что есть более элегантное решение, чем это.

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

EDIT: Я должен был добавить, что я застрял в MS Access (не MS-SQL или какой-либо другой «реальной» задней части); для более подробной информации см. мой комментарий к этому сообщению.

+1

Я попытался ответить на ваш реальный вопрос ниже, но есть и встречный вопрос: можете ли вы использовать для этого другую базу данных? (SQL Server Express, MySQL и т. Д.). У доступа есть много проблем в многопользовательских ситуациях, хотя я был вынужден использовать его политикой (и политиками) до ... – mavnn

+3

Я изгои, пользователь, не являющийся пользователем, прибегает к Access для разработки этого решения, потому что мы надеваем У вас есть доступные ресурсы IS/приоритет/деньги/политический чванз, чтобы сделать это правильно. Я надеюсь, что после того, как решение Access будет на месте и продемонстрирует четкую деловую потребность, кто-то из немногих классов зарплаты сделает его приоритетом IS. С этой целью я пытаюсь четко кодировать, чтобы облегчить боль бедному парню, которому, возможно, придется однажды отправить эту штуку. –

+1

Приятное использование ваших мошеннических сил там, Дейв, мне приходилось прибегать к подобной тактике в прошлом. –

ответ

11

Если все ваши пользователи используют общий интерфейс, это НЕПРАВИЛЬНАЯ КОНФИГУРАЦИЯ.

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

Непонятно, как вы могли бы развиваться в той же копии переднего конца, что и конечные пользователи, начиная с A2000, что запрещено (из-за «монолитной модели сохранения», где весь Проект VBA хранится в одном поле BLOB в одной записи в одной из системных таблиц).

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

  1. выключить COMPILE ON DEMAND в вариантах VBE.

  2. убедитесь, что вам требуется ОПЦИЯ EXPLICIT.

  3. скомпилируйте свой код часто, после каждых нескольких строк кода - чтобы это стало проще, добавьте кнопку COMPILE на панель инструментов VBE (пока я на ней, я также добавляю кнопку CALL STACK).

  4. Периодически делайте резервную копию своего интерфейса и декомпилируйте и перекомпилируйте код. Это достигается за счет запуска Access с помощью/декомпиляционного переключателя, открытия переднего конца, закрытия Access, открытия вашего интерфейса с Access (с нажатой клавишей SHIFT, чтобы обойти код запуска), а затем уплотнение декомпилированного переднего конца (с помощью SHIFT удерживаемый ключ), затем компиляция всего проекта и уплотнение в последний раз. Вы должны сделать это до любой крупной версии кода.

Несколько другие мысли:

  1. вы не говорите, если это сервер для Windows. Серверы Linux, к которым обращались через SAMBA, ранее сталкивались с проблемами (хотя некоторые люди клянутся им и говорят, что они намного быстрее, чем серверы Windows), и исторически серверам Novell необходимо было настроить настройки, чтобы позволить файлу Jet быть надежно отредактированным.Также есть некоторые настройки (например, OPLOCKS), которые можно настроить на сервере Windows, чтобы все стало лучше.

  2. хранить ваши Jet MDB в акциях с короткими дорожками. \ Server \ Data \ MyProject \ MyReallyLongFolderName \ Access \ Databases \ будет намного медленнее считывать данные, чем \ Server \ Базы данных. Это действительно имеет огромное значение.

  3. Связанные таблицы хранят метаданные, которые могут устаревать. Есть два простых шага и один решительный, чтобы его исправить. Сначала уплотните заднюю часть, а затем соедините переднюю часть. Это легко. Если это не помогает, полностью удалите ссылки и воссоздайте их с нуля.

  4. вы также можете рассмотреть вопрос о распространении MDE для ваших конечных пользователей, а не на MDB, поскольку он не может распаковать (который может быть MDB).

  5. см. Tony Toews's Performance FAQ для других обобщенных данных об исполнении.

+2

Вау, я думаю, я просто сел за четыре блюда, чтобы сделать приложение Access более эффективным. Чтобы уточнить, мы не все используем один и тот же файл интерфейса. Я работаю над интерфейсом в папке dev, а затем запускаю его путем копирования/вставки в папку выпуска, и каждый пользователь копирует/вставляет его в свой собственный файл, из которого они работают. Это позволяет каждому пользователю перейти на новые версии в соответствии со своим временем. Это файловый сервер Windows. Путь к заднему концу - 67 символов; Я могу сократить его до 22. И я обязательно рассмотрю другие предложения. Еще раз спасибо!! –

+0

+1. Хорошее сообщение ....... –

-2

Есть два правила для разработки против живых данных

Первое правило. , , никогда не разрабатывайте против живых данных. Никогда не.

Второе правило. , .Настройте против живых данных. Никогда не.

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

Приложение работает медленно, потому что это MS Access, и ему не нравится много одновременных пользователей (где много - любое число> 1).

+0

Также поместите ваши данные Dev mdb в личную папку на вашем локальном компьютере, тогда, если вы забудете изменить привязку привязанной таблицы, новая версия просто не сработает –

+0

Позвольте мне получить это прямо, просто так я поняла. Это не очень хорошая идея для разработки против живых данных, верно? Не должно быть третьего правила, например: «Если вы разрабатываете против живых данных ...» –

+0

как «... когда вы просыпаетесь и понимаете, что делаете, и кричите« Стоп », а затем остановитесь? " Да, что-то в этом роде :) –

1

Используйте VBA для отсоединения и переустановки ваших таблиц к новой цели при переключении с dev на prod. Мне было много лет, чтобы я помнил синтаксис - я просто знаю, что функция проста писать.

Или используйте MS-Access для разговора с MS-Access через ODBC или какое-либо другое соединение для передачи данных, которое живет за пределами клиентского mdb.

Как и во всех файлов базовых баз данных, вы в конечном итоге столкнуться с проблемами, с использованием пиковой или когда вы идете через небольшой магическое число где-то между 2 и 30.

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

Что касается производительности, данные обрабатываются на стороне клиента, поэтому вы можете использовать что-то вроде netmeter, чтобы посмотреть, сколько данных идет по проводу. Тот же принцип об индексировании и исключении сканирования таблиц применим также к базам данных dbs.

+0

+1 За дополнительной информацией, минус gazillion за отмену лет терапии и вернуть все это мне. , , ужас . , , О, бог, ХОРРОР (плачет жалобно) –

+0

Мне нравится звук этого подхода - мне нужно будет кое-что сделать, чтобы узнать, как сделать ссылку через VBA. –

+0

Доступ только имеет тенденцию к повреждению, если сети находятся в плохом состоянии. Или если на беспроводном или глобальном соединении. –

0

Вы также можете найти ответы на вопросы this question (how to extract schemas from access), чтобы быть полезными. После того, как вы извлекли схему, используя один из предложенных методов, вы получите целый ряд новых параметров, таких как возможность использования контроля источника на схемах, а также возможность легко создавать «чистые» среды тестирования.

Редактировать, чтобы ответить на этот комментарий: Нет простого способа управления исходным кодом базы данных Access в ее собственном формате, но файлы схемы - это только текстовые файлы, как и любые другие. Следовательно, вы можете проверить их в исходном программном обеспечении и выбрать из него, чтобы упростить управление версиями/откаты.

Или, конечно, он полагается на то, что у вас есть серия сценариев, настроенных для повторной сборки вашей базы данных из схемы. Как только вы это сделаете, обычно довольно просто создать вариант/альтернативную версию, которая перестраивает его в другом месте, позволяя создавать тестовые среды из любой предыдущей завершенной версии схемы. Надеюсь, это немного прояснится!

+0

Ой, это растягивает мой мозг. Я понимаю исходный контроль и схемы, но я понимаю, как я их совмещаю и почему. В любом случае для приложения, подобного моему, (developers.members.count = 1) –

+0

Добавлен немного больше, чтобы, надеюсь, объяснить мои рассуждения немного лучше. – mavnn

+0

Ах! Да, я думаю, что я тебя сейчас. Это приложение используется для управления процессом перехода, который происходит 1-2 раза в год. Если бы я занимался разработкой чаще, чем это, кажется, что, возможно, стоит потратить дополнительное время, чтобы настроить сценарии управления источником и утилиты, которые вы описываете. Спасибо за идею. –

-1

Вам необходимо понять, что общий файл mdb для данных не является надежным решением. Microsoft предположила бы, что SQL Server или какая-либо другая база данных на базе сервера будет намного лучшим решением и позволит вам использовать тот же самый интерфейс доступа. Мастер миграции поможет вам выполнить переход, если вы захотите пойти этим путем.

Как уже упоминалось, коррупция будет иметь место. Это просто вопрос, как часто, а не если.

Чтобы понять проблемы с производительностью, вам необходимо понять, что на сервере файл mdb с данными в нем - это просто файл. Поскольку на сервере не работает код, сервер не понимает транзакции, блокирует запись и т. Д. Он просто знает, что есть файл, который куча людей пытается читать и писать одновременно.

С системой базы данных, такой как SQL Server, Oracle, DB2. MySQL и т. Д. Программа базы данных запускается на сервере и обращается к серверу как к одной программе, обращающейся к файлу базы данных. Это программа базы данных (работает на сервере), которая обрабатывает блокировку записей, транзакции, параллелизм, ведение журнала, резервное копирование/восстановление данных и все остальные приятные вещи, которые требуется от базы данных.

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

+0

Спасибо за понимание на заднем конце. Мне жаль, что у меня не было реальной БД, с которой я мог бы столкнуться. Если бы существовал приличный открытый конец с открытым исходным кодом, который мог бы размещаться на файловом сервере (а не на выделенном сервере db, к которому у меня нет прав доступа) и обслуживать полдюжины пользователей, возможно, стоит посмотреть на , –

+0

Для приложения с 5 пользователями правильно настроенное приложение Access будет прекрасным, и не будет никакого искажения, КОГДА-ЛИБО, если в вашей операционной среде (аппаратном обеспечении и/или программном обеспечении) нет плохих компонентов. –

+0

... если они не оставлены Имя Автокорректное или Compact On Close включено, отредактируйте столбцы MEMO с привязанными элементами управления, используйте много VBA в своем внешнем файле, используйте оператор точки (а не удар) при обращении к элементу управления Form. .. и это лишь некоторые из сценариев коррупции, которые я недавно узнал от Дэвида У. Фентона ;-) – onedaywhen

1

Много хороших предложений от других людей. Вот мои 2 миллиона штук.Данные моего бэкэнд находятся на сервере, доступ к которому осуществляется через отображение диска. В моем случае, Y диск. Пользователи-производители получают сопоставление через скрипт входа в систему, используя активный каталог. Тогда следующие сценарии легко сделать пакетный файл:

  • Develop против локального компьютера, выполнив команду Подста в пакетном файле
  • отчетов выполняются на основе данных последних ночей, указав Y на сервер резервного копирования (только для чтения)
  • отчеты набегать конце месяца данные, указывая на правой директории
  • тест против специализированных сценариев, сохраняя специальный каталог

в моей среде (в среднем 5 сим пользователей, 1000 рядов, а не 10 000.) Коррупция произошла, но она редкая и управляемая. Только один раз за последние несколько лет мы использовали резервную копию предыдущих дней. Мы используем SQL Server для нашего материала с более высоким объемом, но развивать его не так удобно, возможно, потому, что у нас нет администратора SQL на сайте.

+0

Я слишком далеко от группы IS, чтобы получить этот. Задний конец находится на подключенном диске, хотя я использую UNC-имена для ссылок, потому что он чувствовал себя более надежным (например, я даже смог скопировать передний конец на свой домашний ПК и вытащить данные через VPN без привязки дисков) , Но я не знаю, что у меня есть права на создание пользовательских скриптов, если вы не говорите .BAT-файл или что-то еще. Плюс это выходит из моей лиги. –

+0

, если вы хотите, чтобы он работал таким образом, затем настройте задний конец на сопоставленный диск, а не UNC. Это вообще не изменяет ИТ-среду. Затем для вашей собственной разработки используйте файл bat только на вашем компьютере для сопоставления обычного письма с помощью команды SUBST в папку на вашем компьютере. Это можно сделать с помощью BAT-файла. Команда SUBST добавляет буквенный диск, но к вашему собственному жесткому диску. Очень просто и не требует изменения каких-либо прав, логинов, скриптов или чего-либо еще. Не нужно, чтобы ваш администратор сервера делал что-либо. Удачи в любом случае. – Knox

+0

У некоторых из моих клиентов в некоторых таблицах было 600K и 800K строк. С годами между проблемами. –

2

1) таблицы Relink доступа из кода http://www.mvps.org/access/tables/tbl0009.htm

После того, как я готов опубликовать новый MDE пользователям я RELINK таблицы, сделать MDE и скопировать MDE на сервер.

2) Я специально создал бесплатную утилиту Auto FE Updater, чтобы я мог вносить изменения в FE MDE так часто, как я хотел, и быть уверенным, что в следующий раз кто-то отправится на запуск приложения, Последняя версия. Для получения дополнительной информации об ошибках или утилите Auto FE Updater см. Бесплатную утилиту автоматического обновления фильтра FE на странице http://www.granite.ab.ca/access/autofe.htm на моем веб-сайте, чтобы сохранить FE на каждом ПК в актуальном состоянии.

3) Теперь, работая на сайте у клиентов, я делаю обновления в структуре таблицы после нескольких часов, когда все выходят из системы. Посмотрите, как: Обнаружение пользователя Время простоя или неактивности в Access 2000 (Q210297) http://support.microsoft.com/?kbid=210297 ACC: Как обнаружить пользователя Время простоя или неактивности (Q128814) http://support.microsoft.com/?kbid=128814

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

Также предварительный просмотр печати иногда не позволяет пользователям запускать пункт меню для экспорта отчета в Excel или другие. Таким образом, вам нужно было щелкнуть правой кнопкой мыши на отчете Previewed, чтобы вернуть отчет о своем внутреннем фокусе, чтобы он мог его экспортировать. Это также помогло продлить таймер до пяти минут.

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

4) В отношении другого человека, комментирующего скрипты и т.п., чтобы обновить схему, см. Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm. Хотя у нее есть свои причуды, он создает код VBA для обновления таблиц, полей, индексов и отношений.

+0

Это звучит довольно круто ... Я еще долго не смотрел в MDE. Может быть, это путь. Я буду читать и обновлять свой ответ позже. Благодаря! –

0

Если вы хотите обновить схему MDB на заднем конце автоматически при отпускании нового FE к клиентам, то см. Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm с радостью сгенерирует код VBA для воссоздания MDB. Или код для создания различий между двумя MDB, чтобы вы могли выполнить обновление версии уже существующего BE MDB. Это немного причудливо, но работает.

Я использую его все время.

+0

«Это немного причудливо, но работает» - мне было бы интересно узнать, как он обрабатывает ограничение CHECK, чье определение превышает 255 символов. ИНФОРМАЦИОННАЯ СХЕМА, доступная через OLE DB, всегда сворачивает это, ADOX не распознает CHECK как ограничение, DAO был искалечен в эпоху Jet 4.0 и т. Д. Говоря о том, поддерживает ли он набор функций Jet 4.0: WITH COMP text типы данных, тип данных BINARY? – onedaywhen

+0

Не знаю. Я всегда делаю обновления BEB с помощью кода VBA VBA для инструмента. –

+0

Ах, Jet 3.51 Access95. Ничего, я задавался вопросом, было ли обновлено более новые функции. – onedaywhen

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