Ну, во-первых, вам все равно нужно и вы хотите развернуть прикладную часть, называемую внешним интерфейсом (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 .
Если не считать вышеуказанные две проблемы? Весь остальной код и формы должны работать как прежде.