База данных Ms access с MySQL в качестве серверной части

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

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

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

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

Спасибо.


person daffodil lavendar    schedule 17.04.2020    source источник


Ответы (2)


SO предназначен для вопросов о кодировании, так что это OT. Тем не мение:

  1. Один из способов описан в моей статье:

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

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

  2. да.

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

person Gustav    schedule 18.04.2020
comment
Спасибо за ответ. Для № 1, что я имел в виду, что касается бэкэнда MySQL? У команды будет внешний интерфейс на рабочем столе. Что требуется для того, чтобы этот внешний интерфейс был связан с серверной частью MYSQL? - person daffodil lavendar; 18.04.2020
comment
Нужно читать основы. Серверная часть MySQL должна использоваться как экземпляр базы данных, размещенный на сервере базы данных MySQL, который вам нужно будет установить на серверной машине. Затем внешний интерфейс подключится к этому экземпляру базы данных через ODBC. - person Gustav; 18.04.2020
comment
Я согласен. Это та часть, которую я не понимаю. Я создал базу данных в рабочей среде, и теперь я не уверен, как разместить ее на сервере. Если бы вы могли поделиться какими-либо ссылками, касающимися этого, это будет очень полезно. - person daffodil lavendar; 18.04.2020
comment
Вы можете просто использовать bing/google для Как установить сервер MySQL. Множество руководств, таких как это. - person Gustav; 18.04.2020

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

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

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

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

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

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

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

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

Добавьте столбец "rowversion". Это не следует путать со столбцом даты и времени. В SQL-сервере этот столбец rowversion имеет тип данных 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% вашего кода, формы и все остальное должно работать.

ОДИН получил тебя? В доступе ли это в форме или в коде набора записей VBA? Когда вы создаете новую строку или начинаете печатать в форме? Доступ с серверной частью доступа будет генерировать 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

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

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

если me.dirty = true, то me.dirty = false ' сохранить перекод

lngPK = me.ID 'получить ПК

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

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

Кроме вышеупомянутых двух проблем? Весь остальной ваш существующий код и формы должны работать как прежде.

person Albert D. Kallal    schedule 18.04.2020