Подтвердить что ты не робот

Проблемы с использованием MS Access в качестве интерфейса для базы данных базы данных MySQL?

Два пользователя хотели разделить одну и ту же базу данных, изначально написанную в MS Access, не конфликтуя друг с другом в одном файле MDB.

Я переместил таблицы из простой базы данных MS Access в MySQL, используя Migration Toolkit (который работает хорошо, кстати) и настроил Доступ к ссылке на эти таблицы через ODBC.

До сих пор я столкнулся с следующим:

  • Вы не можете вставлять/обновлять/удалять строки в таблице без первичного ключа (не удивительно).
  • Поля AutoNumber в MS Access должны быть первичным ключом, или они просто заканчиваются как целые столбцы в MySQL (natch, почему бы и не быть PK?)
  • Таблицы были перенесены в тип таблицы MySQL InnoDB, но отношения Access не стали ограничениями внешнего ключа MySQL.

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

4b9b3361

Ответ 1

У меня было приложение, которое сработало аналогично: интерфейс MS Access к серверу MySQL. Это была такая огромная боль, что я в конечном итоге написал интерфейс Win32. С головы я столкнулся со следующими проблемами:

  • Развитие связи ODBC, похоже, давно прекратилось. Существуют разные версии, плавающие вокруг - очень запутывающие. Ссылка ODBC не поддерживает Unicode/UTF8, и я помню, что были и другие проблемы (хотя некоторые из них можно было преодолеть путем тщательной настройки).
  • Возможно, вы захотите вручную настроить свою схему db, чтобы сделать ее совместимой с MS Access. Я вижу, вы уже узнали о необходимых суррогатных ключах (т.е. Int primary keys): -)
  • Вы должны помнить, что вам может понадобиться использовать сквозные запросы для выполнения более сложных SQL-манипуляций базы данных MySQL.
  • Будьте осторожны с использованием большого количества VBA, так как это приводит к повреждению файла внешнего интерфейса. Регулярно сжимайте базу данных (используя главное меню, утилиты "Инструменты" базы данных | Сжатие и восстановление, или что-то в этом роде --- я использую голландскую версию), и необходимо сделать много резервных копий.
  • Доступ имеет тенденцию вызывать много сетевого трафика. Например, действительно огромные партии. Я не смог найти решение для этого. Использование сетевого монитора рекомендуется, если вы хотите следить за этим!
  • Access настаивает на сохранении логических значений как 0/-1. ИМХО, 0/+ 1 имеет больше смысла, и я считаю, что это тоже способ делать вещи в MySQL. Не большая проблема, но если ваши флажки не работают, вы обязательно должны это проверить.

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

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

Ответ 2

Я знаю, что эта тема не слишком свежая, а просто некоторые дополнительные объяснения:

Если вы хотите эффективно использовать MS Access, особенно с большими, многопользовательскими базами данных, выполните следующие действия:

  • разделите ваш MDB на внешние приложения и бэкэнд (только данные) - у вас будет два отдельных файла MDB.

  • переносить все таблицы с данными и структурой во внешнюю базу данных. Это может быть: MySQL (работает очень хорошо, без ограничений по размеру базы данных), требует еще нескольких навыков, поскольку это не технология MS, но во многих случаях это хороший выбор - кроме того, вы можете масштабировать свой сервер с большим количеством ОЗУ и дополнительных процессоров, поэтому все зависит от ваших потребностей и возможностей оборудования); Oracle (если у вас достаточно денег или какая-либо корпоративная лицензия) или Oracle 10g XE (если это не проблема, размер базы данных ограничен до 4 ГБ и всегда будет использовать 1 ГБ ОЗУ и 1 процессор) MS SQL Server 2008 (это отличная пара для поддержки интерфейса MS Access и сервера MS SQL Server во всех случаях, но вам нужно заплатить за лицензию!). Преимущества: тесная интеграция, обе технологии составляют один и тот же поставщик; MS SQL Server очень легко поддерживать эффективность одновременно) или Express Edition (такая же история, как и с Oracle XE - почти те же ограничения).

  • привязать внешний интерфейс MS Access с базой данных. Если вы выбрали MS SQL Server для бэкэнд, то это будет так же просто, как использовать мастер из MS Access. Для MySQL - вам нужно использовать драйверы ODBC (он прост и работает очень хорошо). Для Oracle - не используйте драйверы ODBC от Microsoft. Они из Oracle будут делать свою работу намного лучше (вы можете сравнить время, необходимое для выполнения SQL-запроса от MS Access до Oracle через Oracle ODBC и MS Oracle ODBC-драйверы). На этом этапе у вас будет надежный бэкэнд базы данных и полностью функциональный интерфейс MS Access - файл MDB.

  • скомпилируйте ваш MDB-интерфейс с MDE - это даст вам много скорости. Более того, это единственная разумная форма распространения приложения MS Access для ваших конечных пользователей.

  • для повседневной работы - используйте MDE файл с интерфейсом MS Access. Для дальнейшего расширения интерфейса MS Access используйте файл MDB.

  • не использовать плохо написанные компоненты ActiveX для улучшения возможностей интерфейса MS Access. Лучше напишите их сами или купите нужные.

  • не верят в мифы о том, что с MS Access очень много проблем - это отличный продукт, который может помочь в случаях. Проблема в том, что многие люди считают игрушкой или что доступ к MS просто прост. Обычно они генерируют много ошибок и проблем сами по себе, а также отсутствие знаний и опыта. Чтобы быть успешным с MS Access, важно понять этот инструмент - это то же правило, что и любая другая технология.

Я могу сказать вам, что я использую довольно продвинутый доступ к MS Access к серверу MySQL, и я очень доволен (как разработчик, поддерживающий это приложение). Мои друзья, пользователи также довольны тем, что им очень нравится интерфейс GUI (frontend), скорость (MySQL), у них нет проблем с блокировкой записей или производительностью базы данных.

Кроме того, важно прочитать много о хорошей практике и опыте других людей. Я бы сказал, что во многих случаях MS Access является хорошим решением. Я знаю множество специализированных систем на заказ, которые начинались как эксперимент в виде частной базы данных MS Access (MDB файл), а затем развивались в: разделенный MS Access (MDE-frontend, MDB-backend) и, наконец, на: интерфейс MS Access (MDE) и "серьезных" баз данных (в основном MS SQL Server и MySQL). Также важно, чтобы вы всегда могли использовать решение MS Access в качестве рабочего прототипа - вы готовы использовать бэкэнд в своей базе данных (MySQL - допустим), и вы можете переписать интерфейс на технологию по вашему выбору (веб-решение? Возможно, рабочий стол С# приложение - то, что вам нужно!).

Надеюсь, я помог некоторым из вас рассмотреть работу с MS Access.

С уважением, Wawrzyn http://dcserwis.pl

Ответ 3

Гарет Симпсон предположил:

Если это только два пользователя, то Access должно быть очень хорошо, если вы .mdb на общем диске.

Er, нет. Нет многопользовательского приложения Access, для которого каждый пользователь не должен иметь выделенную копию переднего конца. Это означает, что каждый пользователь должен иметь MDB на своей рабочей станции. Зачем? Поскольку объекты на передних концах не располагают хорошо (не так же хорошо, как и таблицы данных Jet, хотя в этом сценарии нет ни одного из них, использующего MySQL в качестве задней части).

Гарет Симпсон продолжал:

Я считаю, что рекомендуемый максимум одновременным пользователям для доступа 5, но Иногда я проталкивал его мимо и никогда не отклеиваются.

Нет, это совершенно неверно. Теоретический предел для пользователей MDB составляет 255. Это, конечно, нереально, поскольку, как только вы достигаете около 20 пользователей, вам нужно тщательно программировать приложение Access, чтобы работать хорошо (хотя то, что вам нужно сделать в Access-to- Приложение Jet - это те же самые вещи, которые вы бы делали, чтобы сделать любое приложение базы данных сервера эффективным, например, извлечение самых маленьких удобных наборов данных).

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

Ответ 4

Я знаю, что это не отвечает на ваш вопрос напрямую, но, возможно, стоит проверить средство миграции SQL Server 2005 для доступа. Я никогда не использовал этот инструмент, но, возможно, стоит использовать SQL Server 2005 Express Edition, чтобы узнать, есть ли те же проблемы, что и у MySQL

Ответ 5

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

Ответ 6

В общем, это зависит:)

У меня не было много проблем, когда сторона приложения только что обновляла данные через формы. Вы можете получать предупреждения/ошибки, когда одна и та же строка была обновлена ​​более чем одним пользователем; но Access, похоже, постоянно обновляет свои записи в реальном времени.

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

У меня было больше проблем, когда я редактировал записи в коде VB через RecordSets, особенно в сочетании с редактированием одних и тех же данных в формах. Это не обязательно проблема с несколькими пользователями; однако у вас почти такая же ситуация, потому что у вас есть один пользователь с несколькими подключениями к тем же данным.

Ответ 7

Если это только два пользователя, тогда Access должен делать все отлично, если вы поместите .mdb на общий диск.

Вы пробовали это сначала, а не просто предполагаете, что это будет проблемой.

Я считаю, что рекомендуемые максимальные одновременные пользователи для Access - 5, но иногда я проталкивал его и никогда не отклеивался.

С другой стороны, я однажды использовал Access как front-end для MySQL в одной пользовательской среде (мне). Это был необычайно неприятный опыт, я не могу представить, что с двумя пользователями станет лучше.