Ms доступ к базе данных с MySQL в качестве бэкэнда - PullRequest
0 голосов
/ 18 апреля 2020

Моя текущая команда из 20 человек использует интерфейс базы данных доступа на своем рабочем столе. Бэкэнд базы данных доступа находится на сетевом диске. Меня попросили создать клиентскую часть базы данных доступа с MYSQL в качестве серверной части.

Я установил MySQL верстак и разъем ODB C на моем компьютере. Я создал схему и таблицы и подключил интерфейс базы данных к таблице MYSQL, которую создал в рабочей среде. У меня вопрос

  1. Как мне развернуть это для использования командой. Я полагаю, что могу перенести внешний интерфейс dB доступа на сетевой диск, и команда может скопировать его на свой рабочий стол. Но что мне делать с бэкэндом?
  2. Нужно ли команде установить на своих компьютерах разъем ODB C?
  3. Стоит ли перенести рабочую среду MySQL на сетевой диск?

PS: я новый разработчик и только изучаю базы данных, и я только знаком с базой данных доступа, пожалуйста go спокойно для меня.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

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

Итак, после переноса данных в MySQL, затем, конечно, вы будете использовать диспетчер связанных таблиц доступа, а теперь свяжете таблицы с MySQL. Как это работает, действительно так же, как и сейчас. Единственное отличие состоит в том, что связанные таблицы теперь указывают на сервер базы данных (MySQL). С точки зрения приложения, он должен работать как прежде.

Как и все приложения, будь то Outlook, Excel, пакеты учета? Вы по-прежнему развертываете часть приложения на каждой рабочей станции. То, что вы сейчас разрабатываете и пишете программное обеспечение с помощью Access, вовсе не означает, что вы по какой-то странной причине перестаете развертывать часть FE на каждой рабочей станции. На самом деле, вы должны развертывать скомпилированную версию вашего приложения (accDE).

Еще несколько советов: КОГДА вы связываете FE, УБЕДИТЕСЬ, что вы используете ФАЙЛ DSN. Причиной этого является то, что Access преобразует ссылки на DSN-менее для вас. Это означает, что после того, как вы свяжете таблицы, вы сможете развернуть FE на каждой рабочей станции, и он сохранит информацию о связанной таблице, БЕЗ необходимости настраивать DSN-соединение на каждой рабочей станции. Разумеется, вам также потребуется развернуть драйвер MySQL ODB C на каждой рабочей станции, поскольку он не является частью Access и не является частью вашего приложения.

То, что вы сейчас разрабатываете программное обеспечение, делает не предлагать и не снимать вас с крючка развертывания этого приложения на каждой рабочей станции. Таким образом, ваши настройки с FE на каждой рабочей станции НЕ меняются на один бит.

В большинстве случаев после переноса данных в MySQL, вероятно, настройте ваши отношения (скажем, с * 1058). * верстак) есть несколько других вещей, о которых вам нужно помнить.

Все таблицы теперь нуждаются в первичном ключе. Скорее всего, у вас это есть, но Access с бэкэндом доступа работал и мог работать с таблицами без PK. Однако для SQL server / MySQL et c. Тогда все таблицы нуждаются в PK.

Далее: если у вас есть столбцы true / false, вы ДОЛЖНЫ установить для этого значение по умолчанию. колонка. Если такие столбцы true / false имеют значение по умолчанию или допускают пустые значения, это приведет к путанице в доступе, поэтому убедитесь, что столбцы true / false не могут иметь нулевые значения и имеют настройки по умолчанию (обычно 0) на стороне сервера.

Добавьте столбец «rowversion». Это не следует путать со столбцом даты и времени. На сервере SQL этот столбец версии строк имеет тип данных timestamp (плохое имя, поскольку столбец имеет нулевое отношение ко времени - это просто столбец, который «версии» строки. Это также устранит многие ошибки. Я не Не знаю, как этот тип столбца называется в MySQL, но во всех таблицах должен быть этот столбец (нет нужды видеть / использовать / просматривать этот столбец в ваших формах - но он должен быть частью таблицы.

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

dim rst   DAO.Recordset
dim strSQL  as string
strSQL = "SELECT * from tblHotels"

set rst = currentdb.OpenRecordSet(strSQL).

Вероятно, в прошлом у вас было много кода, как указано выше.

Теперь вам нужно:

Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)

Вы можете в целом выполнить поиск и замену (найдите каждый .OpenRecordSet и добавьте dbOpen и dbSee к каждой строке кода, которую вы найдете. (Я поместил dbOpenDynaset , dbSeeChanges в моем буфере вставки. И затем выполните поиск по всей системе. Чтобы найти все .openRecordSets

, нужно всего несколько минут * На данный момент, 99% вашего кода, форм и всего должно работать. * 102 9 *

ОДИН получил тебя? В доступе будь то на форме или в коде записи VBASet? Когда вы создаете новую строку или начинаете печатать на / в форме? Доступ с серверной частью доступа сгенерирует PK в этой точке. Не было необходимости сохранять запись, чтобы получить значение PK. Эта необходимость встречается редко, и в большом приложении у меня было только 2 или 3 места, где это произошло.

Итак, если у вас есть такой код:

dim rstRecords    as RecordSet
dim lngPK         as Long       ' get PK value of new record

Set rstRecords = CurrentDb.OpenRecordset("tblHotels")

rstRecords.AddNew
' code here sets/ add data/ set values
rstRecords!HotelName = "Mount top Hotel"
rstRecords!City = "Jasper"

' get PK of this new record
lngPK = rstRecods!ID   ' get PK

rstRecords.Update

Итак, выше код, я беру значение PK. Но в серверных системах вы не можете получить значение PK, пока ПОСЛЕ записи не было сохранено. Итак, вы должны изменить выше на

rstRecords.Update
rstRecords.Bookmark = rstRecords.LastModified

' get PK of this new record
lngPK = rstRecods!ID   ' get PK

Обратите внимание, как мы берем / получаем PK ПОСЛЕ того, как мы сохраняем. Закладка выше просто переустанавливает указатель записи на новую запись. Это «изюминка» DAO, и когда добавляются новые reocrds, команда .Update перемещает указатель записи, и, таким образом, вы перемещаете его обратно с помощью вышеупомянутого .LastModified. Вам ТОЛЬКО нужен трюк .LastMOdifed для НОВЫХ записей. Для существующих у вас уже есть PK - так что это не имеет значения.

Этот тип кода встречается довольно редко, но иногда в форме (а не в коде reocdset VBA), некоторый код формы мы могли бы использовать / нужно / получить / получить значение PK. В форме вы можете сделать это:

если me.dirty = true, тогда me.dirty = false 'save reocod

lngPK = me.ID' get PK

Итак, еще раз, в приведенном выше коде формы, я удостоверяюсь, что запись сохраняется в первую очередь, а затем я получаю значение PK, как указано выше. Конечно, это проблема ТОЛЬКО для НОВЫХ записей. (и вам не нужно использовать трюк с закладками - это только для наборов записей - не для связанных форм.

Так что, просто имейте в виду, в тех случаях, когда вам нужно значение PK новой записи, вы должны сделать это ПОСЛЕ того, как вы сохранили набор записей (обновление) или в случае формы после принудительного сохранения записи формы. Это требование только для новых записей и ТАКЖЕ только когда ваш код должен получить / получить новое значение PK .

Если не считать вышеуказанные две проблемы? Весь остальной код и формы должны работать как прежде.

0 голосов
/ 18 апреля 2020

ТАК для вопросов о кодировании, так что это ОТ. Однако:

  1. В моей статье описан один метод:

    Разверните и обновите приложение Microsoft Access одним щелчком мыши .

    Старый бэкэнд можно архивировать. Он больше не будет использоваться.

  2. Да.

  3. Вероятно, нет. Это только для вас, если вам нужно изменить базу данных MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...